在此建立新的Task之前要先認識xTaskCreate函式
建立工作之函式:
xTaskCreate(工作函式,工作描述字串,堆疊深度,參數,優先順序,工作指標)
xTaskCreate(工作函式,工作描述字串,堆疊深度,參數,優先順序,工作指標)
工作函式宣告:
void 工作函式名(void * pvParams);
void 工作函式名(void * pvParams);
修改FreeRTOS底下的main.c檔案
新增LED 任務
下面main code的地方新增/* 創建任務LED,執行LED()涵式 */
--------------------------------------------------------------------------------------------------------------------------
int main( void ){ prvSetupHardware();
xOLEDQueue = xQueueCreate( mainOLED_QUEUE_SIZE, sizeof( xOLEDMessage ) );
if( SysCtlPeripheralPresent( SYSCTL_PERIPH_ETH )
)
{xTaskCreate( vuIP_Task, ( signed portCHAR * ) "uIP", mainBASIC_WEB_STACK_SIZE, NULL,mainCHECK_TASK_PRIORITY, NULL );}
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
vCreateBlockTimeTasks();
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
vStartQueuePeekTasks();
vStartRecursiveMutexTasks();
/* 創建任務LED,執行LED()涵式 */
xTaskCreate( LEDFlicker, "led", 100, NULL, tskIDLE_PRIORITY, NULL );
/* Start the tasks defined within this file/specific to
this demo. */
xTaskCreate( vOLEDTask, ( signed portCHAR * ) "OLED", mainOLED_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
vSetupTimer();
/* Start the scheduler. */
vTaskStartScheduler();
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
編譯程式
請 如下圖所示在MINGW32視窗下切換至/FreeRTOS_V4.8.1_Stellaris\FreeRTOS\Demo\CORTEX_LM3Sxxxx_Eclipse\RTOSDemo
執行make all,編譯成功後會如下圖所示產生RTOSDemo.bin檔案:
執行結果如下圖所示
以下所執行的結果,以LED1顯示亮暗閃爍,另一個任務則是以LCD執行狀態。
沒有留言 :
張貼留言