【问题标题】:vTaskDelay never returnvTaskDelay 永不返回
【发布时间】:2018-01-09 07:11:59
【问题描述】:

我的应用程序在带有 FreeRTOS V9.0.0 和端口文件 Source\portable\RVDS\ARM_CM4F(通过 RTE Keil 导入)的 stm32F4 上运行。 main,调用一些初始化函数,创建任务然后调用vTaskStartScheduler。 该任务只需调用永远不会返回的 vTaskDelay(1000)。系统不是故障。故障报告不显示任何错误或问题。

代码是:

int main(void) 
{
 init_foo1()
 init_foo2()
 xTaskCreate(aTask, "name",1280, NULL, 6, NULL);
 init_foo3();
 vTaskStartScheduler();
 }
 void aTask()
 {
 vTaskDelay(1000);
 bar();
 }

怎么了? 谢谢大家

【问题讨论】:

  • 未知功能未知行为 - 正确提问
  • 函数定义与此问题无关。 vTaskDelay 函数在 FreeRTOS 文档中定义。行为被提及。还需要什么?
  • 如果不是(不要对我大喊大叫)自己寻找解决方案。投票暂停
  • 我没有喊你,只是重播你的评论:)
  • 请在FreeRTOSConfig.h 中检查您的configTICK_RATE_HZ 宏。之后试试这个:vTaskDelay(1000/portTICK_RATE_MS);.

标签: stm32 freertos


【解决方案1】:

你需要先放无限循环:

vTaskDelay函数的使用示例与documentation一致:

 void vTaskFunction( void * pvParameters )
 {
 /* Block for 500ms. */
 const TickType_t xDelay = 500 / portTICK_PERIOD_MS;

     for( ;; )
     {
         /* Simply toggle the LED every 500ms, blocking between each toggle. */
         vToggleLED();
         vTaskDelay( xDelay );
     }
}

也在xTaskCreate

中测试优先级
UBaseType_t uxPriority

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2018-01-11
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多