一直不知道怎么解释,就解释为互斥锁吧,就是这个变量,或者这块内存,他有锁,需要拿到这个钥匙的人,才能去操作这个内存,不然大家都能操作,就麻烦大了.创建互斥锁的函数是xSemaphoreCreateMutex,返回QueueHandle_t类型的互斥锁,暂定为xMutex;
QueueHandle_t xMutex; xMutex = xSemaphoreCreateMutex();
然后申请互斥锁,使用一个最大的阻塞延迟,可以保证一直在等待互斥锁的钥匙可以用,除非,太久你就想放弃.
static void vTask1( void *pvParameters ) { for(;;) { xSemaphoreTake( xMutex, portMAX_DELAY ); printf("Are you sure? "); xSemaphoreGive( xMutex ); taskYIELD(); } } static void vTask2( void *pvParameters ) { for(;;) { xSemaphoreTake( xMutex, portMAX_DELAY ); printf("YES OR NO? "); xSemaphoreGive( xMutex ); taskYIELD(); } }
互斥锁的钥匙,用完要归还.其中上面程序xSemaphoreGive就是归还,这样,不会导致其他程序被停止调度,比如TFT被停止调度可是非常严重的事情.另外还有一种叫守护方法的东西,当然,这个用在以太网之类的地方,需要周期性查询,开启configUSE_TICK_HOOK配置,并且在主程序你们vApplicationTickHook实现就可以,诸如此类任务,如心跳LED.他们没必要安装一个独立任务地去申请.