zoukankan      html  css  js  c++  java
  • FreeRTOS 任务通知模拟二值信号量

    FreeRTOS官方统计,使用任务通知替代二值信号量的时候,任务解除阻塞的时间要快45%,并且需要的RAM也更少

    举例

    void DataProcess_task(void *pvParameters)
    {
        while(1)
        {
            NotifyValue=ulTaskNotifyTake(pdTRUE,portMAX_DELAY); //获取任务通知
            if(NotifyValue==1) //清零之前的任务通知值为1,说明任务通知有效
            {
                for(i = 0; i < (USART_RX_STA&0x3fff) + 1; i++)
                {
                    printf("%c", USART_RX_BUF[i]);
                }
    
                USART_RX_STA=0;
                memset(USART_RX_BUF,0,USART_REC_LEN); //串口接收缓冲区清零
            }
            else
            {
                vTaskDelay(10); //延时10ms,也就是10个时钟节拍 
            }
        }
    }
    
    void USART3_IRQHandler(void)
    {
        //发送任务通知
        if((USART_RX_STA&0x8000)&&(DataProcess_Handler!=NULL)) //接收到数据,并且接收任务通知的任务有效
        {
            vTaskNotifyGiveFromISR(DataProcess_Handler,&xHigherPriorityTaskWoken); //发送任务通知
            portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //如果需要的话进行一次任务切换
        }
    }

    运行结果
    1

  • 相关阅读:
    SCCM2012 R2实战系列之四:初始化配置
    SCCM 2012 R2实战系列之一:SQL安装
    hdu 1242(bfs)
    hdu 1728(bfs)
    hdu 1253(bfs)
    hdu 3661
    hdu 1072(bfs)
    AC模版
    hdu 1010(dfs)
    poj 3628(01_page, dfs)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709428.html
Copyright © 2011-2022 走看看