来源:本站整理 作者:佚名 2010-04-27 15:39:44
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-Ⅱ的过程中,发现其就绪表操作算法经过改动或许更好,于是就做了本文所述的试验。
上一页 [1] [2]