美文网首页
cmsis-rtos Semaphore

cmsis-rtos Semaphore

作者: 骑上我心爱的小蜗牛 | 来源:发表于2020-09-14 16:09 被阅读0次

    大佬传送门

    • 创建信号量ID,创建os_semaphore_cb结构体指针

    osSemaphoreId sync_sem_id;

    • 定义osSemaphore引用的信号量对象,声明信号量。

    osSemaphoreDef(sync_sem);

    • 初始化信号量容器,创建并初始化一个Semaphore对象,该对象用于管理对共享资源的访问。
    • 10为初始化给定令牌数。在无osSemaphoreRelease的情况下,令牌数决定了osSemaphoreWait不被阻塞的次数。

    sync_sem_id = osSemaphoreCreate(osSemaphore(sync_sem), 10);

    • 阻塞等待获取令牌。当sync_sem_id存在令牌数时,向下通行运行一次,令牌数同时-1;反之阻塞等待令牌的出现。return--当前使用的令牌号。

    val=osSemaphoreWait(sync_sem_id, osWaitForever);

    #define osWaitForever     0xFFFFFFFF     ///< wait forever timeout value
    int32_t osSemaphoreWait(osSemaphoreId semaphore_id, uint32_t millisec);
    * 返回值:int32_t ,正常返回当前count数,失败返回-1。
    * 如果需要阻塞延时,参数应该设置为CMSIS-RTOS API提供的宏定义 osWaitForever
    * millisec等待的时间
    
    • 获取1次令牌,当本函数被运行时,令牌数+1。

    osSemaphoreRelease(sync_sem_id);

    • 例程
    #include "cmsis_os.h"
    
    osSemaphoreId sync_sem_id;
    osSemaphoreDef(sync_sem);
    int main(void)
    {
    
         sync_sem_id = osSemaphoreCreate(osSemaphore(sync_sem), 10);
        /* initialize CMSIS-RTOS */
        osKernelInitialize(); // initialize CMSIS-RTOS
        //CMSIS thread create
        TaskTest_Id = osThreadCreate(osThread(test_thread), NULL);
        /* start thread execution */
        osKernelStart();
        while(1)
        {
        osDelay(3);  
            val=osSemaphoreWait(sync_sem_id, osWaitForever);
        printf("2\r\n");
        if(val>0)
          {
            printf("val=%d\r\n",val);
    //      osSemaphoreRelease(sync_sem_id); 
          }
        }
    }
    
    void test_thread(void const *arg)
    {
        /* test code begin */
        while(1){
    //  osSemaphoreWait (sync_sem_id, osWaitForever);
    //  printf("1\r\n");
    //      osSemaphoreRelease(sync_sem_id);
    //      osDelay(1000);
        }
        /* test code end */
    }
    
    • 结果
    2
    val=10
    2
    val=9
    2
    val=8
    2
    val=7
    2
    val=6
    2
    val=5
    2
    val=4
    2
    val=3
    2
    val=2
    2
    val=1
    

    相关文章

      网友评论

          本文标题:cmsis-rtos Semaphore

          本文链接:https://www.haomeiwen.com/subject/saezektx.html