STM32F429-DISCO 学习之FreeRTOS互斥锁&守护方法

/ 0评 / 1

一直不知道怎么解释,就解释为互斥锁吧,就是这个变量,或者这块内存,他有锁,需要拿到这个钥匙的人,才能去操作这个内存,不然大家都能操作,就麻烦大了.创建互斥锁的函数是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.他们没必要安装一个独立任务地去申请.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注