历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2021年03月08日 | μC/OS-II就绪表算法在Cortex-M3架构上的适配设计

2021-03-08 来源:eefocus

μc/Os-Ⅱ的就绪表设置、清除、查找算法,是高效的、跨平台的程序。它使用了两个查找数组OSMapTbl[8]和OSUnMapTbl[256],以提高查找就绪表的速度,尽快获取就绪任务的最高优先级。


Cortex-M3是ARM公司较新的一种架构版本,主要应用在单片机领域。基于它生产的32位芯片日益增多;cortex-M3只支持Thumb-2指令集,在效能和代码密度间能取得更佳的表现。


1 在ARM上改动算法的因由利弊


由于就绪表操作是在关中断状态下运行的,其执行影响到系统的中断响应时间,因此就绪表操作算法的效率是衡量实时操作系统优劣的基准之一。


在Cortex-M3所用的指令集中,一些指令功能不可小觑,如前导零计数clz、字内位反转rbit、位清除bic。其中的clz和bic为μc/Os就绪表的高优先级获取算法指出了另一条道路。


(1)改动后的优势


①节省存储空间。不再使用查找数组OSMapTbl[8]和OSUnMapTbl[256]。设立这两个数组的目的,是为了提高查找就绪表的效率。


②提升查找效率。clz是单周期指令,使用带移位的加法指令,大幅缩短运算时间。


③增加了μc/Os-Ⅱ支持的任务数量,从64提升到了1 024(2.84版支持的任务数量已经到了256,不过效率有所下降)。


(2)存在的不足


①Realview MDK(这里使用的是3.20版及其指令模拟器)尚不支持在C语言程序中使用Thumb-2指令内联汇编。使用内嵌汇编函数时,函数的调用(跳转返回)降低了执行效率。


②C语言对clz指令的支持尚有不足,故新算法跨平台性差。但鉴于ARM芯片应用广泛,指令又被ARM9之后的芯片广泛兼容,所以应用空间还算广阔。


2 μc/Os-Ⅱ就绪表算法介绍与具体改动


μc/Os-Ⅱ就绪表是一个数组,数组元素一位的值(1或0)对应了一个任务就绪与否,该位在数组中的位置表示任务的优先级。当需要调度已就绪的最高优先级任务运行时,就在就绪表中查找该任务。


2.1 μc/Os-Ⅱ就绪表算法简介


一种解决方法是,对数组各项依次判断是否为0:若>O,进入该项查找最小权的置1位位置;若=0,优先级加一个基数,查下一项,直至查到该优先级。


μc/Os-Ⅱ技高一筹,设置了一个对就绪表各项判断是否为0的变量,称之为就绪表组。就绪表组一位为0或1,对应就绪表一项的值是否为0。通过查找就绪表组最小权位的置1位位置,就确定了对应首个>0的就绪表项的下标,从而避免了循环,大幅度提高了效率。


2.2改动方式与源码


clz算法接受了μc/Os-Ⅱ的思路,再通过使用clz指令来进行优化。不同的是,clz是从右往左查,二进制的高权位对应高优先级,而μc/Os-Ⅱ优先级以值小为高。


考虑到有时用不到很多任务,这时用数组作就绪表不免浪费。因此当任务总数小于32时,就用32位无符号整数变量作就绪表。注意,此时就绪表组变量OSRdyGrp被当作就绪表使用。


常量OS_LES_TSK表示是否使用较小任务数,0表示使用最多32个任务,1表示使用最多1 024个任务。


常量RdySt是将32位整数的最高权位置1,以便移位使用。


2.3 C语言实现


以下算法利用内嵌clz指令的函数编写,实现了指定优先级任务在就绪表的设置、清除,在就绪表中查找就绪任务的最高优先级。



程序中的bx r14,有些资料上要求必须写,不过查看反汇编代码,编译程序已经给加上了。看来是编译程序已升级,会不会出错要看使用的编译器,建议还是按规范写上。由于内嵌函数调用返回耗时,查找算法未能充分发挥,需改进编译后的汇编代码以实现更高的效率,或使用汇编代码重写这部分程序。


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-Ⅱ的过程中,发现其就绪表操作算法经过改动或许更好,于是就做了本文所述的试验。


推荐阅读

史海拾趣

飞虹(FeiHong)公司的发展小趣事

苏州锋驰深知知识产权的重要性,公司高度重视技术创新和知识产权保护工作。截至目前,苏州锋驰已拥有商标信息2条、专利信息13条,这些知识产权的积累为公司的持续发展提供了有力的保障。同时,公司还积极参与行业标准制定和技术交流活动,不断提升自身的技术水平和行业影响力。

Elcos AG公司的发展小趣事

在电子科技日新月异的21世纪初,Elcos AG由一群志同道合的电子工程师创立。他们看到了电子元器件市场中的机遇,决定专注于研发和生产高性能的电子元器件。初始阶段,公司面临着资金紧张、技术挑战和市场认知度低的困境。然而,凭借对技术的执着和对市场的敏锐洞察,Elcos AG逐步攻克了技术难题,并通过与几家小型电子产品制造商的合作,打开了市场的大门。

CMOS Sensor Inc公司的发展小趣事

随着技术的不断发展,CMOS Sensor Inc公司不断推出创新产品。其中,线型CMOS图像传感器的研发成功,为公司带来了重要的突破。这一产品具有更高的分辨率和更低的噪声,为工业质量保证、商业成像等领域提供了更优质的解决方案。此后,公司又不断对产品进行升级和优化,以满足不同客户的需求。

Block USA Inc.公司的发展小趣事

在发展过程中,Block USA Inc.也面临着来自竞争对手和行业变化的挑战。然而,公司始终保持着创新精神,不断调整和优化产品与服务,以适应市场的变化。例如,面对数据安全和隐私保护的日益严格要求,Block加强了其数据保护措施,并公开承认了数据泄露事件并积极采取措施进行补救。同时,公司还继续拓展其业务边界,探索新的增长点,以保持其在电子行业中的竞争优势。

这些故事只是Block USA Inc.在电子行业发展历程中的一部分,它们展示了公司如何通过不断创新和拓展业务领域,逐步成为一家具有影响力的综合性电子企业。然而,随着市场的不断变化和竞争的加剧,Block仍需保持警惕并持续努力,以应对未来的挑战和机遇。

e2v technologies公司的发展小趣事

为了进一步提升整体实力,e2v在发展过程中进行了多次收购与整合。这些收购不仅增强了公司的技术实力和市场竞争力,也为其带来了更多的客户资源。例如,e2v曾收购了一家专注于医疗成像技术的公司,这一举措使其在医疗成像领域取得了显著的进展。

Amaze Electronics Pte Ltd公司的发展小趣事

在激烈的市场竞争中,品牌建设成为Amaze Electronics提升市场影响力的关键。公司注重品牌形象的塑造,通过举办各类活动、参与行业展会等方式,提高品牌知名度和美誉度。同时,公司还注重产品质量的把控,确保每一件产品都能体现公司的专业水准和品质追求。这些举措有效提升了Amaze Electronics在市场上的影响力,吸引了更多客户的关注和信赖。

问答坊 | AI 解惑

智能家居离我们远吗?

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑   现在,家庭有多台电视是常见的,如果家庭成员在房间、客厅都想收看数字收费电视,该怎么办呢?有了综合布线之后,你就不会有这方面的困扰了,而且也可以轻易实现卫星电视和数字电视的交换 ...…

查看全部问答>

[分享]印制电路设计中的工艺缺陷

印制电路设计中的工艺缺陷   一、焊盘的重叠 1、焊盘(除表面贴焊盘外)的重叠,意味孔的重叠,在钻孔工序会因为在一处多次钻孔导致断钻头,导致孔的损伤。 2、多层板中两个孔重叠,如一个孔位为隔离盘,另一孔位为连接盘(花焊盘),这样 ...…

查看全部问答>

看看全球最小的摄像头

这款来自台湾的Misumi MO-R803摄像头号称全球最小的摄像头。镜头直径为4.4毫米,长为15毫米。后面连有一段可弯曲的蛇形把手,方便你拿取。 不过由于体积的限制,这款摄像头的分辨率只能达到320×240.目前还没有进一步的价格信息。…

查看全部问答>

CAN总线接口电路的硬件设计

CAN总线接口电路的硬件设计…

查看全部问答>

搞定串口驱动,明天上手SD卡驱动,大家给提供点资料吧!

如题所示,耗了我两个星期,今天终于搞定了串口的驱动,现在我的串口1的串口2都可以正常收发外界的数据了,明天准备上手SD卡驱动的编写。 我的环境:WinCE5.0+S3C2440 我的BSP是厂家由三星的4.2版本的SMDK2440改造而来的。 现在我的SD卡插插槽里 ...…

查看全部问答>

关于51与dac0832连接输出正弦波 非常郁闷

如题 利用延时可以输出正弦波了 但是改用中断方式 却无法输出波形 利用proteus仿真时 下列程序可以输出正弦波 但是频率只有大概40hz 与设计的100hz差很远 请求指教! 附上程序 FLAG BIT 70H DA_SC BIT P1.1 ORG 0000H LJMP MAIN ORG 000BH ...…

查看全部问答>

远程更新操作系统

    谁做过远程更新WINCE操作系统这方面的,这个大致怎样实现,有哪些方式?…

查看全部问答>

有句话不懂,求解释

看论文时候看到一句”将采集到的BIOS镜像文件计算其特征值,加入到标准特征库之中“ 怎么采集bios镜像文件,计算特征值又是什么意思? 求高手解释…

查看全部问答>

外设时钟没有势能,但是外设仍然能跑,???

    SYS_INIT();           ---> 这里面将外设时钟都disable了    /* GPIO Configuration */   &nbs ...…

查看全部问答>