专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

调用freertosAPI函数的一些注意事项 IAR

作者:未知   来源:布冬冬 的空间   点击数:  更新时间:2014年08月16日   【字体:

 

 
 
1. 将启动汇编文件中的      替换
 
        DCD     vPortSVCHandler  //内核SVC中断
        DCD     DebugMon_Handler
       ;  DCD     SVC_Handler
       ; DCD     DebugMon_Handler
 
        DCD     xPortPendSVHandler   //内核PendSV中断
        DCD     xPortSysTickHandler   //内核SysTick中断
       ; DCD     PendSV_Handler
       ; DCD     SysTick_Handler
 
2. main函数中,在main函数的最后定义一个while(1);死循环。
 
   先是创建任务,然后是启动任务调度函数。
 
   xTaskCreate( vIntegerGenerator, "IntGen", 200, NULL, 1, NULL);
   xTaskCreate( vStringPrinter, "String", 200, NULL, 2, NULL);
   vTaskStartScheduler();
 
3. 创建信号量时,首先应在main函数之前定义一下全局变量
 
xQueueHandle   xIntegerQueue;
xQueueHandle   xStringQueue;
 
4. 一些初始化的东西最好在main函数里面先初始化好,如GPIO的选择、方向以及定时器的初始化。
 
   如果定时器的初始化放在任务里面,有可能导致定时器无法正常工作。因为任务在循环执行,可能定时器还没到定时时间,就又被重新初始化了。
 
5. 加库文件stdio.h,执行printf语句,可在IO终端里面查看。
 
6. 在任务函数里面,定义变量放在for循环外面,其他放在for循环里面。
 
 
static void vStringPrinter( void *pvParameters )
{
  char *pcString;
  for(;;)
  {
    xQueueReceive( xStringQueue, &pcString, portMAX_DELAY);
    printf(pcString);
  }
}
 
7. 如果任务遇到中断,需要强制上下文切换。中断里面用的上下文切换是taskYIELD();而不是vTaskSwitchContext 里面有了个PendSV中断。
 
关闭窗口

相关文章