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

发布者:雅逸之风最新更新时间:2011-06-12 关键字:μc  Os-Ⅱ  就绪表算法  ARM架构 手机看文章 扫描二维码
随时随地手机看文章
  μ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,有些资料上要求必须写,不过查看反汇编代码,编译程序已经给加上了。看来是编译程序已升级,会不会出错要看使用的编译器,建议还是按规范写上。由于内嵌函数调用返回耗时,查找算法未能充分发挥,需改进编译后的汇编代码以实现更高的效率,或使用汇编代码重写这部分程序。[page]
  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-Ⅱ的过程中,发现其就绪表操作算法经过改动或许更好,于是就做了本文所述的试验。

 

 

关键字:μc  Os-Ⅱ  就绪表算法  ARM架构 引用地址:根据μc/Os-Ⅱ就绪表算法在ARM架构上的改动

上一篇:基于ARM的DIS采集系统设计
下一篇:基于ARM的LCD触摸屏系统设计

推荐阅读最新更新时间:2024-03-16 12:36

STC89C52RC单片机设计的FM收音机+自动搜台+存储电台
刚调试好的收音机,但是信号还不是很好,收音机模块用的TEA5767芯片,液晶1602显示,爱好者可以自己下载调试。 可以手动自动调节自动搜台电台 单片机源程序如下: #include reg52.h #include tea5767.h #include delay.h #include lcd1602.h //K1:上一台 K2:下一台 K3:从低向高搜索台 sbit K1 = P2 ^ 1; sbit K2 = P2 ^ 4; sbit K3 = P2 ^ 7; //当前频道号 从 0 开始 unsigned char ch = 0; void main() { //初始化 1602lcd lcd1602_init
[单片机]
STC89<font color='red'>C</font>52RC单片机设计的FM收音机+自动搜台+存储电台
S3C2440A智能小车可移动视频监控系统
  本文介绍的智能小车可移动视频监控系统,以“飞思卡尔杯”智能小车竞赛提供的车模装置为基础,利用ARM芯片S3C2440A控制图像采集、网络传输、速度采集干扰小的模块,利用FPGA芯片控制电机驱动、舵机控制、电量采集干扰大的模块,当上位机通过Internet访问智能小车服务器时,在监控界面上点击按钮来控制小车的运行、图像拍摄、速度采集。    1 系统总体设计   该系统采用三星公司的ARM芯片S3C2440A作为主控制芯片及Altera公司的FPGA芯片EP2C5T144C8作为辅助控制芯片,ARM上装有Windows CE5.0操作系统。S3C2440A内置丰富的外设资源包括中断控制器、GPIO、I2C、相机接口等接口电路
[单片机]
基于AT89C2051单片机的智能家居报警系统方案设计
引言 随着电子信息技术和计算机网络技术的发展,实现家居信息化、网络化是当前智能家居系统发展的新趋势。报警系统作为智能家居系统的一个重要组成部分,其性能的好坏直接关系到整个智能家居系统的优劣。把无线网络技术应用到家居报警系统中,通过各种传感器实时采集家居的环境信息,通过无线的方式将信息传输给家居控制中心, 能够弥补有线设备的缺陷, 具有价廉、可靠性高、等优点。 笔者根据无线网络技术和智能家居的特点,设计了一种基于无线网络技术的家居无线报警系统。该无线报警系统可以对整个家居的安全环境进行实时监控。 系统结构 本报警网络采用了星型拓扑结构,由中心节点和无线报警网络节点组成。中心节点是一个与计算机相连的无线通信模块,可以和网络中的
[单片机]
基于AT89<font color='red'>C</font>2051单片机的智能家居报警系统方案设计
Diodes 公司的 USB Type-C及线性ReDriver讯号中继器提供更强大性能
Diodes 公司的 1.8V 10Gbps USB Type-C 及 DisplayPort 线性ReDriver讯号中继器提供更强大的讯号完整性效能及低功耗运作 【2021 年05月18日美国德州普拉诺讯】Diodes 公司 (Nasdaq:DIOD) 推出 1.8V PI2DPX1066、PI2DPX1217及PI2DPX1263,巩固了其在线性ReDriver™ IC 市场中的地位。这些零件适用于一系列产品应用项目,包括笔记本电脑、台式机、智能型手机、平板计算机、扩充坞、游戏机、显示器及虚拟现实设备,使用较低的电源电压,与竞争产品相比耗电量较小,可满足消费性电子、运算及通讯领域对 USB Type-C®及 Displa
[模拟电子]
Diodes 公司的 USB Type-<font color='red'>C</font>及线性ReDriver讯号中继器提供更强大性能
稳定可靠的I2C通信的设计计算
许多系统需要可靠的非易失性存储,对于这些系统,可选择EEPROM存储器技术。EEPROM技术具有稳定可靠的架构,供应商较多,并且经过了多年的改进。EEPROM器件可用于各种工业标准串行总线,包括I2C™、SPI、Microwire和UNI/O®总线。其中,I2C总线在单片机和其他芯片组中具有广泛的硬件支持,并且信号传递方式简单,可采用极小的硅片有效实现,因此占据了非易失性存储器市场约70%的份额。但是,I2C总线拓扑要依赖于阻值合适的上拉电阻才能实现稳定可靠的通信。电阻值选择错误不仅会造成电能浪费,还可能导致总线状态和传输过程由于噪声、温度变化、工作电压变化以及器件间的制造差异而出错。   I2C是二线同步总线,使用总线主器件S
[模拟电子]
稳定可靠的I2<font color='red'>C</font>通信的设计计算
ST9+系列单片机I2C总线驱动程序实现
    摘要: 串行扩展总线技术是新一代单片机技术发展的一个显著特点,其中Philips公司推出的I2C总线最为著名。ST9+系列是意法半导体公司的单片机产品,能够很好地支持I2C总线协议。本文以ST9+单片机为例阐述I2C总线协议,并给出在ST9+单片机上实现I2C总线驱动程序的流程和方法。     关键词: I2C总线 串行扩展总线 ST9+ 总线驱动 串行扩展总线技术是新一代单片机技术发展的一个显著特点,其中Philips公司推出的 I2C总线最为著名。I2C总线最显著的特点是规范的完整性、结构的独立性和用户使用时的简单化。 I2C总线有严格的规范,如接口的电气特性、信号时序、信号传输的定
[工业控制]
S3C2440—10.代码重定位
本文主要介绍ARM裸机代码重定位的相关知识,以及重定位的实现过程。 下面将由ARM裸机(S3C2440)的启动方式开始分析,引入段的概念,随后介绍链接脚本的使用以及代码重定位的操作,首先会使用汇编语言验证代码重定位的可行性,最后将使用C语言实现代码重定位。 一.启动方式 S3C2440的启动方式有俩种: NOR FLASH启动 NAND FLASH启动 说起ARM裸机的启动方式,就是将程序的bin文件烧写在ARM的存储空间中,ARM从这些地址中读取指令到CPU中执行,需要数据的时候去数据的存储地址取数据。说白了启动方式的不同就是bin文件烧写地址的不同,可以烧在NOR FLASH中,也可以烧在NAND FLASH中,俩种F
[单片机]
S3<font color='red'>C</font>2440—10.代码重定位
RSA算法的TMS320C54x DSP实现
摘要:RSA算法是基于数论的公钥密码体制,是公钥密码体制中最优秀的加密算法。本文介绍RSA算法的基本原理以及用以TMS320C5402芯片为核心的硬件去实现RSA算法;提供了应的硬件、软件的接口设计,取得了较好的安全性和速度性能。 关键词:DSP RSA算法 公钥密码体制 模运算 引言 在当今的电信时代,由于采用大规模的电子计算机对数据进行处理,使得信息的传递大大加速,但是,也随之出现了令人最为担心的问题,就是信息的安全性。对信息进行保护的方法就是数据加密,通过对网络上传输的数据和系统内存储的数据进行加密,可以大大提高网络和信息的安全性。以较高的安全性而被广泛采用的RSA公钥密码体制,在现代安全性制中占有重要地位。RSA算
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved