调用freertosAPI函数的一些注意事

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中断。
以上是调用freertosAPI函数的一些注意事的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>