【iCore4 雙核心板_uC/OS-II】例程八:消息郵箱

1、實驗說明:數據結構

  消息郵箱是uC/OS-II中的另外一種通訊機制,能夠使一個任務或者中斷服務子程序向另外一個任務發送一個指針型的變量。一般該指針指向一個包含了「消息」的特定數據結構。
 
2、實驗截圖:
 
3、源代碼下載連接:
連接: https://pan.baidu.com/s/1o9JMmxG 密碼:psk3
 
4、核心代碼:
/*
 * Name                : main
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
/*實驗現象:
  打開串口工具putty.exe,按下ARM.KEY按鍵,終端顯示此時任務1的運行次數;鬆開按鍵,中止顯示。
  */
int main(void)
{
    system_clock.initialize();                               //系統時鐘初始化
    led.initialize();                                        //LED初始化
    usart6.initialize(115200);                               //串口初始化
    key.initialize();

    usart6.printf("\x0c");                                   //清屏    
    usart6.printf("\033[1;32;40m");                          //設置字體終端爲綠色
    usart6.printf("\r\n Hello, I am iCore4!\r\n\r\n");
    LED_RED_ON;

    OSInit(); 

    //UCOS初始化
    OSTaskCreate(start_task,                                 //建立開始任務
            (void*)0,                                   //任務參數
            (OS_STK*)&START_TASK_STK[START_STK_SIZE-1], //任務堆棧
            START_TASK_PRIO);                           //任務優先級
    OSStart();                                               //開啓UCOS    
}
/*
 * Name                : start_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr;

    TaskMbox = OSMboxCreate(0);//建立郵箱

    OSStatInit();//初始化統計任務

    OS_ENTER_CRITICAL();//關中斷

    OSTaskCreate(AppTask1_task,(void*)0,(OS_STK*)&AppTask1_TASK_STK[AppTask1_STK_SIZE-1],AppTask1_TASK_PRIO);//建立AppTask1任務
    OSTaskCreate(AppTask2_task,(void*)0,(OS_STK*)&AppTask2_TASK_STK[AppTask2_STK_SIZE-1],AppTask2_TASK_PRIO);//建立AppTask2任務
    OSTaskSuspend(OS_PRIO_SELF);//掛起start_task任務

    OS_EXIT_CRITICAL();//開中斷
}
/*
 * Name                : AppTask1_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void AppTask1_task(void *pdata)
{
    int timer = 0;
    char cnt[20];

    while(1){
        if(ARM_KEY_STATE == KEY_DOWN){
            timer++;
            sprintf(cnt,"%d",timer);        //數據轉換
            OSMboxPost(TaskMbox, &cnt);     //發送郵箱
        }
        OSTimeDlyHMSM(0,0,0,500);         //延時500ms        
    }
}
/*
 * Name                : AppTask2_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void AppTask2_task(void *pdata)
{
    u8 err;
    u8 *s;


    while(1){
        s = (INT8U *)OSMboxPend(TaskMbox,OS_TICKS_PER_SEC,&err);
        if(err == OS_ERR_NONE){
            usart6.printf("\r\nThe number of task1 : %s\r\n",s);           //打印出郵箱的值    
        }
        OSTimeDlyHMSM(0,0,0,500);                                        //延時500ms        
    }
}

iCore4連接:工具

相關文章
相關標籤/搜索