问FreeRTOS里面一点C语言用法的问题

2019-07-20 05:26发布

本帖最后由 赤诚 于 2018-10-30 12:18 编辑

void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION;
如上函数定义,函数名后面为什么加了一个之前宏定义过的关键词PRIVILEGED_FUNCTION?搞不懂呀,谢谢大佬们。
还有一个问题就是创建两个任务后,其中一个任务死循环,整个程序就卡了,除非在那个死循环的函数里面添加vTaskDelay()函数。如下程序
void task1_task(void * pvParameters)
{
  while(1)
        {
           LED0=~LED0;
           vTaskDelay(500);
        }
}


void task2_task(void * pvParameters)
{
  while(1)
        {
           vTaskDelay(500);//后来添加的Delay函数
        }
}


这是为什么呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
为人很低调
1楼-- · 2019-07-20 09:40
第一个,我没用freeRTOS,没法回答。
第二个,因为死循环的话这个task就一直占用CPU,当然就卡了。delay才会让这个task暂停并让出CPU给其他线程。当然,你的例子里面,task1_task的优先级比task2_task高的话,也是可以抢过去的。实际上idle task也是最低优先级的一个死循环task。
赤诚
2楼-- · 2019-07-20 12:51
为人很低调 发表于 2018-10-30 16:26
第一个,我没用freeRTOS,没法回答。
第二个,因为死循环的话这个task就一直占用CPU,当然就卡了。delay才 ...

我按你的启发,吧Task1优先级提高的确也不会卡程序了。说明你是对的。那我这样子理解:1,优先级高的任务可以抢正在执行的低优先级的任务CPU资源。
2,只有更高优先级的任务执行完了,或者有类似vTaskDelay();这种函数来释放CPU,低优先级才有被执行的可能。这样对不对呢?大佬是不是用UCOS 呢?谢谢大佬:D
为人很低调
3楼-- · 2019-07-20 15:11
 精彩回答 2  元偷偷看……

一周热门 更多>