專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

調(diào)用freertosAPI函數(shù)的一些注意事項(xiàng) IAR

作者:未知   來(lái)源:布冬冬 的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月16日   【字體:

 

 
 
1. 將啟動(dòng)匯編文件中的      替換
 
        DCD     vPortSVCHandler  //內(nèi)核SVC中斷
        DCD     DebugMon_Handler
       ;  DCD     SVC_Handler
       ; DCD     DebugMon_Handler
 
        DCD     xPortPendSVHandler   //內(nèi)核PendSV中斷
        DCD     xPortSysTickHandler   //內(nèi)核SysTick中斷
       ; DCD     PendSV_Handler
       ; DCD     SysTick_Handler
 
2. main函數(shù)中,在main函數(shù)的最后定義一個(gè)while(1);死循環(huán)。
 
   先是創(chuàng)建任務(wù),然后是啟動(dòng)任務(wù)調(diào)度函數(shù)。
 
   xTaskCreate( vIntegerGenerator, "IntGen", 200, NULL, 1, NULL);
   xTaskCreate( vStringPrinter, "String", 200, NULL, 2, NULL);
   vTaskStartScheduler();
 
3. 創(chuàng)建信號(hào)量時(shí),首先應(yīng)在main函數(shù)之前定義一下全局變量
 
xQueueHandle   xIntegerQueue;
xQueueHandle   xStringQueue;
 
4. 一些初始化的東西最好在main函數(shù)里面先初始化好,如GPIO的選擇、方向以及定時(shí)器的初始化。
 
   如果定時(shí)器的初始化放在任務(wù)里面,有可能導(dǎo)致定時(shí)器無(wú)法正常工作。因?yàn)槿蝿?wù)在循環(huán)執(zhí)行,可能定時(shí)器還沒(méi)到定時(shí)時(shí)間,就又被重新初始化了。
 
5. 加庫(kù)文件stdio.h,執(zhí)行printf語(yǔ)句,可在IO終端里面查看。
 
6. 在任務(wù)函數(shù)里面,定義變量放在for循環(huán)外面,其他放在for循環(huán)里面。
 
 
static void vStringPrinter( void *pvParameters )
{
  char *pcString;
  for(;;)
  {
    xQueueReceive( xStringQueue, &pcString, portMAX_DELAY);
    printf(pcString);
  }
}
 
7. 如果任務(wù)遇到中斷,需要強(qiáng)制上下文切換。中斷里面用的上下文切換是taskYIELD();而不是vTaskSwitchContext 里面有了個(gè)PendSV中斷。
 
關(guān)閉窗口

相關(guān)文章