zoukankan      html  css  js  c++  java
  • FreeRTOS之taskYIELD()

    摘自:http://www.mcuchina.com/article/2007/1227/article_59.html

    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作为双向循环链表的象征性结尾标志,
      所以看上去只是双向链表,而不是循环链表.

  • 相关阅读:
    每日日报
    HTML相关
    60-Shiro功能扩展(记住我)
    60--Shiro安全框架
    服务器项目部署简单操作
    61--DB项目--修改密码模块设计
    59-SpringAOP --Cache操作(注解)
    58-Spring AOP 异步操作
    58-Spring-AOP事务管理
    Terminal 执行 java 命令
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007536.html
Copyright © 2011-2022 走看看