首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

μc/Os-Ⅱ就绪表算法在ARM架构上的改动 04

μc/Os-Ⅱ就绪表算法在ARM架构上的改动 04

  2.4  THUMB-2汇编指令实现
  用汇编语言写程序时的技巧:在最高优先级任务的设置、清除函数中,C语言运算符“︱=”对等汇编指令“orr”,“&=~”对等汇编指令“bic。这两条指令都可以进行预移位操作,大幅提高执行效率。可以查看反汇编源码,看C编译器是否利用了这一便利。
  在查找函数中,可以省去C语言程序中的内嵌汇编调用,减少冗余指令。示意伪代码如下:
  ldr rO,  =OsRdyGrp;加载就绪表组变量OSRdyGrp地址

  可以看出,除了数据加载指令外,查找的核心算法仅3条指令(使用<32个任务时,仅1条指令)。不过在实际设计算法的时候,还需要考虑指令流水线停顿,方能达到最佳的效果。
  2.5  μC/OS-Ⅱ2.84版相关源码介绍
  以下是翻译整理后的μC/OS-Ⅱ优先级查找算法源码(2.84版),较长的注释是添加的算法说明。

  clz最高优先级查找算法,与μC/OS-Ⅱ的新算法有所不同:返回的结果分别是8位、16位整数。这是因为8位已经不能表示>255的值;过程中clz算法更多地使用16或32位整数,以充分利用芯片性能。
  3  适用范围
  等待任务列表使用了与就绪表操作相似的过程,注意要同时更改其数据类型和算法。算法虽然是在Cortex—M3上执行的,但适用于ARM9及其以后芯片。支持arm指令集的芯片,可以在C语言中使用内嵌汇编,不必再编写汇编查找函数。
  本文所叙述的算法适用于下述两种情况。
  ①使用μC/OS-Ⅱ系统:
  ◆要求更多的任务优先级;
  ◆要求产品性能优越或是时间关键的应用,想进一步提高效率;
  ◆学习、研究或希望优化μC/OS-Ⅱ以扩展其应用范围。
  ②未使用μC/OS-Ⅱ系统:
  ◆移植改造其他操作系统的就绪表算法;
  ◆编写新操作系统或执行调度程序;
  ◆编程爱好者借鉴、改进编程方法。
  结  语
  Cortex-M3推出时,笔者就认定它是单片机过渡到arm的有力工具,其小存储量使得它更适合用小型实时系统。在学习μC/OS-Ⅱ的过程中,发现其就绪表操作算法经过改动或许更好,于是就做了本文所述的试验
返回列表