您的位置:控制工程论坛网论坛 » 教程与手册 » [转帖]对FreeRTOS_v4.5.0的一些小理解

cqs0088

cqs0088   |   当前状态:在线

总积分:-390  2024年可用积分:0

注册时间: 2008-07-12

最后登录时间: 2012-05-30

空间 发短消息加为好友

[转帖]对FreeRTOS_v4.5.0的一些小理解

cqs0088  发表于 2008/9/15 8:41:57      567 查看 0 回复  [上一主题]  [下一主题]

手机阅读

[转帖]对FreeRTOS_v4.5.0的一些小理解

转自:group.ednchina.com  作者:gliethttp

1.taskYIELD()
  比如我创建了8个优先级一样的task,并且没有创建其他优先级的进程,
  而且8个task每个task都不会调用任何引起本task从就绪运行队列链表中被摘掉的系统函数,就像示例中
  vStartIntegerMathTasks()创建vCompeteingIntMathTask1(),vCompeteingIntMathTask2()...vCompeteingIntMathTask8()一样,
  每个task都是不会睡眠的不停的执行自己,当每个task觉得自己占用cpu的时间已经差不多的时候,
  就会调用taskYIELD(),主动让出cpu,让同优先级的其他task获得cpu,因为没有其他优先级的task,所以调度器不会切换优先级,

  而是采用轮转调度策略,运行同优先级的就绪运行队列链表中调用taskYIELD()函数的当前task的下一个task.

  就这样8个task轮流让出cpu给同优先级的下一个兄弟task,8个task都采用主动协作的方式,彼此安全顺利的跑了起来.
2.xLIST()
  虽然在vListInitialise()初始化时,将pxList->xListEnd初始化为了"双向循环链表",
  但是在诸多使用中,如:listGET_OWNER_OF_NEXT_ENTRY()中,都会以xListEnd作为双向循环链表的象征性结尾标志,
  所以看上去只是双向链表,而不是循环链表.

1楼 0 0 回复