工業局生醫電子

2015年3月5日 星期四

[Embedded]ARM Cortex M3 for LM3S3748 USB Part3 在FreeRTOS Task Create

在此建立新的Task之前要先認識xTaskCreate函式

建立工作之函式:
xTaskCreate(工作函式,工作描述字串,堆疊深度,參數,優先順序,工作指標)
工作函式宣告:
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檔案:









執行FreeRTOS結果

將程式燒錄至板子上,這部分可以直接使用德州儀器所提供的免費工具,
如下圖:燒入狀況與完成圖
http://www.ti.com/tool/lmflashprogrammer




執行結果如下圖所示

以下所執行的結果,以LED1顯示亮暗閃爍,另一個任務則是以LCD執行狀態。


沒有留言 :

張貼留言