一、實驗說明:
本例程移值入uC/OS-II,建立三個任務,紅色和綠色LED分別以固定頻率閃爍,並且開啟串列埠工具,
輸出浮點資料。
二、原始碼下載連結:
連結:https://pan.baidu.com/s/1o9pY0uI 密碼:5roo
三、核心程式碼:
/* * Name : main * Description : --- * Author : zh. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ /*實驗現象: 紅色和綠色LED燈分別以固定的頻率閃爍,並且開啟串列埠工具,可以看到有資料輸出。 */ int main(void) { system_clock.initialize(); //系統時鐘初始化 led.initialize(); //LED初始化 usart6.initialize(115200); //串列埠初始化 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; OSStatInit();//初始化統計任務 OS_ENTER_CRITICAL();//關中斷 OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);//建立LED0任務 OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);//建立LED1任務 OSTaskCreate(usart_task,(void*)0,(OS_STK*)&USART_TASK_STK[USART_STK_SIZE-1],USART_TASK_PRIO);//建立usart任務 OSTaskSuspend(OS_PRIO_SELF);//掛起start_task任務 OS_EXIT_CRITICAL();//開中斷 }
/* * Name : led0_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void led0_task(void *pdata) { while(1) { LED_RED_ON; //紅燈亮 OSTimeDlyHMSM(0,0,0,500); //延時500ms LED_RED_OFF; //紅燈滅 OSTimeDlyHMSM(0,0,0,500); //延時500ms } } /* * Name : led_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void led1_task(void *pdata) { while(1) { LED_GREEN_ON; //綠燈亮 OSTimeDlyHMSM(0,0,0,1000); //延時1000ms LED_GREEN_OFF; //綠燈滅 OSTimeDlyHMSM(0,0,0,1000); //延時1000ms } } /* * Name : usart_task * Description : --- * Author : liu. * * History * -------------------- * Rev : 0.00 * Date : 07/12/2017 * * create. * -------------------- */ void usart_task(void *pdata) { double f=0.1; while(1) { f+=0.1f; //浮點型運算 usart6.printf("float f=%.4f\r\n",f); //串列埠輸出 OSTimeDlyHMSM(0,0,0,500); //延時500ms } }
iCore4連結: