历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2018年02月19日 | μC/OS-II操作系统在不同处理器上的应用

2018-02-19 来源:eefocus

    μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效紧凑的特点。它执行效率高,占用空间小,可移植性强,实时性能良好且可扩展性强。采用μC/OS-II实时操作系统,可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应;采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。μC/OS-11非常适合应用在一些小型的嵌入式产品应用场合,在家用电器、机器人、工业控制、航空航天、军事科技等领域有着广泛的应用。
    单片机、ARM、FPGA与μC/OS-II操作系统相结合,实现一些具体功能,是目前嵌入式应用中比较常见的。在这些应用中,基础性的工作就是操作系统的移植。本文选取使用较多的51单片机、LPC2210、NiosII三种处理器进行介绍。
 

    1 μC/OS-II操作系统移植条件
    μC/OS-II操作系统的大部分源代码都是用C语言书写的,但仍需使用汇编语言来完成一些和处理器相关的操作,例如读写处理器、寄存器时只能使用汇编语言来实现。因此,将μC/OS-II操作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。
    硬件方面,目标处理器需满足以下条件:
    ①处理器的C编译器能产生可重入代码;
    ②用C语言可以开/关中断;
    ③处理器支持中断,并且能够产生定时中断(通常在10~1 000 Hz之间);
    ④处理器能够支持容纳一定量数据的硬件堆栈;
    ⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。
    软件方面,主要关注的是一些与处理器相关的代码移植,其分布在OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM这3个不同的文件中。
 

    2 目标处理器硬件支持
    51单片机、LPC2210、NiosII三种处理器在硬件方面均能满足μC/OS-II操作系统的移植要求。
    51单片机:选择Keil公司的集成开发环境作为开发工具,因为该集成开发环境的C51编译器能产生可重入型代码,且用C语言就可以开/关中断。同时具有一定数量的堆栈和操作相关寄存器的指令。
    LPC2210:采用ARM7微控制器可以满足上述②、④、⑤,而ADS1.2的C编译器可以满足①、③的要求。
    NiosII处理器:Nios处理器可以配置成最多支持64个中断,包括外部硬件中断、内部中断以及TRAP(调试中断)。Nios II处理器可以配置使用32位内部定时器,通过用软件控制写入几个控制寄存器的内容来获得定时工作,与一般的定时器工作原理相同,可以产生定时中断。Nios处理器可以外接存储器。以使用的DE2开发板为例,外接512 KB SRAM资源,可提供足够的数据硬件堆栈。NioslI 8.0 IDE采用GNU编译器,支持C/C++的编译、链接产生重入代码,允许在C语言中嵌入汇编语言。
 

    3 软件移植过程
    3.1 OS_CPU.H的实现
    OS_CPU.H文件包括了用#define语言定义的与处理器相关的常数、宏以及数据类型。
    在上述三种处理器采用的不同编译器中,数据类型的定义是相同的,在此不做具体介绍。
    在OS_CPU.H中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL()和退出临界区的OS_EXIT_CRITICAL()。
    在Keil编译器中,EA是总中断。
    #define OS_ENTER_CRITICAL() EA=0;//关中断
    #define OS_EXIT_CRITICAL() EA=1;//开中断
    在ADS编译器中定义为软件中断函数,并编写软件中断处理代码实现开/关中断。
    _swi(0x00)viod OS_TASK_SW(viod);//任务级任务切换函数
    _swi(0x00)viod OS_ENTER_CRITICAL(viod);//关中断
    _swi(0x00)viod OS_EXIT_CRITICAL(viod); //开中断
    在NiosII 8.0 IDE编译器中:
    #define OS_ENTER_CRITICAL() asm(“PFX 8\n WRCTL%g0;”) //关中断
    #define OS_EXIT_CRITICAL() asm(“PFX 9\n WRC TL%g 0;”) //开中断
    堆栈的增长方向通过设置OS_STK_GROWTH为0或者1来确定。51单片机中只能设置为0,表示堆栈是从下往上增长的。LPC2210中则可以设置成0或者1。NiosII中则只能设置成1,表示堆栈是从上往下增长的。
    3.2 OS_CPU_C.C的实现
    OS_CPU_C.C中,主要应改写堆栈初始化函数OS-TaskStkIint()。必须根据移植时统一定义的任务堆栈结构进行初始化,其他9个钩子函数只需说明即可。也可根据移植时用户自己的需要,编写相应的操作代码。
    以LPC2210为例,堆栈空间从高到低依次存放着PC,LR,R12,R11,…,R1,R0,CPSR,OsEnterSum。每个任务都有独立的OsEnterSum,在任务切换时保存和恢复各自的OsEnterSum值。各个任务开/关中断的状态可以不同,这样实现了开/关中断的嵌套。


3.3 OS-CPU-A.S的实现
    这部分需要对处理器的寄存器进行操作,所以必须用汇编语言编写。μC/OS-II移植要求用户编写4个简单的汇编语言函数:OSStartHighRdy()、OSCtxSw()、OS-INTCtxSw()、OSTICkISR()。
    OSStartHighRdy()的任务是进行任务调度和切换;OSCtxSw()的任务是强制CPU进行寄存器和程序计数器的切换;OSIntCtxSw()的任务是在中断返回时进行任务切换;OSTickISR()是时钟节拍中断服务程序,用来实现时间的延迟和超时功能。
    以OSStartHighRdy()任务调度和切换函数为例,介绍3种处理器移植代码。
    (1)51单片机
    OSStartHighRdy:


 

    

    

结 语
    51单片机、LPC2210,NiosII三种处理器在目前的嵌入式应用方面有着广阔的市场前景。将μC/OSs-II操作系统移植到这三种以及其他处理器上,能够更好地保证系统运行时的稳定性和实时性,而且该操作系统代码少,易于掌握和移植。
    本文所介绍的μC/OS-II操作系统在3种处理器上的移植是笔者在实际学习过程中,进行的梳理和小结,对初学者有一定的参考价值。


推荐阅读

史海拾趣

Circuit Assembly公司的发展小趣事

由于Circuit Assembly公司的发展故事涉及具体的公司案例和数据,而这些信息往往涉及公司的内部运营、市场策略等敏感内容,且不同公司的发展经历也各有差异,因此我无法直接为您提供5个具体的电子行业里面Circuit Assembly公司的发展起来的相关故事。但我可以根据您提供的背景和要求,给出一些可能的发展趋势和挑战,帮助您理解该行业的整体状况。

在电子行业中,Circuit Assembly公司的发展通常与几个关键因素密切相关,包括技术创新、市场需求、供应链管理以及国际合作等。随着5G、物联网、智能制造等技术的快速发展,Circuit Assembly公司面临着前所未有的机遇和挑战。

一方面,新技术的出现推动了电子产品的小型化、集成化和智能化,对Circuit Assembly公司的工艺水平和生产能力提出了更高的要求。那些能够紧跟技术潮流,不断提升自身技术水平和创新能力的公司,往往能够在市场中脱颖而出,实现快速发展。

另一方面,随着全球市场竞争的加剧,Circuit Assembly公司需要更加注重成本控制和供应链管理。通过建立稳定可靠的供应链体系,优化生产流程和管理,降低生产成本,提高产品质量,这些公司能够更好地满足客户需求,提升市场竞争力。

此外,国际合作也是Circuit Assembly公司发展的重要推动力。通过与国内外同行企业的交流与合作,可以引进先进的技术和管理经验,共同推动行业发展。同时,通过参与国际市场竞争,也能够拓宽公司的业务领域,提高公司的国际影响力。

综上所述,电子行业中的Circuit Assembly公司面临着多方面的机遇和挑战。那些能够抓住机遇、应对挑战的公司,有望在市场中取得更大的成功。但具体的公司发展故事需要根据不同的公司背景和实际情况来具体分析和描述。建议您查阅相关行业报告、公司年报或新闻报道,以获取更具体的信息。

Advanced Pressure Technology公司的发展小趣事

随着技术的不断进步和市场的不断扩大,APT公司的产品逐渐应用于半导体制造和其他清洁行业,如太阳能电池板、LCD、LED、平板显示器等。2000年,APT公司决定创建高纯度产品系列,并成功推出了HP特种气体应用和AK产品线。这一举措不仅进一步丰富了APT公司的产品线,也使其能够更好地满足高端市场的需求。此后,APT公司不断拓展其市场版图,产品远销全球各地,赢得了广泛的客户认可。

Allen Avionics Inc公司的发展小趣事

随着销售量的持续增长,APT公司很快便超出了其初始设施的产能。为了满足市场需求,公司于1992年迁至加利福尼亚州纳帕市的一座占地36,000平方英尺的工厂,并配备了2,000平方英尺的100级洁净室。新工厂的启用为APT公司提供了更大的发展空间,也进一步提升了其产品质量和产能。同时,APT公司始终致力于技术创新,不断推出适应市场需求的新产品,进一步巩固了其在气体输送领域的领先地位。

DB Lectro Inc公司的发展小趣事

为了进一步扩大市场份额,DB Lectro Inc积极寻求与国际知名企业的合作。通过与多家国际公司的技术交流和合作,公司成功地将自身的气体检测技术应用于更多领域,如天然气开采、食品饮料生产等。同时,公司还积极参与国际展览和交流活动,展示了其先进的技术和产品,赢得了国际市场的广泛认可。

DRI Relays Inc公司的发展小趣事

随着全球环保意识的提高,DRI Relays Inc公司积极响应环保号召,践行绿色环保理念。公司采用环保材料和节能技术,减少生产过程中的能源消耗和废弃物排放。同时,公司还注重产品的回收和再利用,为客户提供环保解决方案。这些举措不仅提升了公司的社会形象,还为公司带来了更多的商业机会和发展空间。

Entegris公司的发展小趣事

2019年1月底,Entegris与Versum Materials宣布合并。合并后的公司由Entegris占据五席董事,而Versum占四席。Versum是一家主要生产半导体的化学、气体及输送系统的公司,两家公司的前三大客户均为台积电、英特尔、三星电子。合并后,新公司在半导体材料市场的影响力显著增强,同时也面临着来自德国默克等竞争对手的挑战。

问答坊 | AI 解惑

运算放大器技术几大趋势

虽然早先有关“分立元件运算放大器产品将与其它产品进行更高级别的集成或其市场将有所收缩”这一预言令人忧心忡忡,但这类产品仍旧保持着勃勃生机。   事实上,目前运算放大器显示着前所未有的良好势头。而且,在未来几年内,分立元件运算放大器 ...…

查看全部问答>

安检门原理及常见问题和维修方法

一、安检门原理由晶振产生3.5-4.95M的正弦振荡,由分频器分频为7.8K左右正弦波,经三极管与线圈进行功率放大后输入门板(7区)大线圈进行电磁波发射,由门内1-6区线圈分别进行接收。接收后,将接收到的信号与基准信号进行了比较,发现变化后,改变采 ...…

查看全部问答>

一张电路图

研究了半天同学的电路图没有弄懂哇,帮我呀扭一下哇…

查看全部问答>

使用BSP建立的SDK所写的程序

各位前辈好! 目前我在练习的一些CE的程式 是套用我PB所建立的SDK所写! 这SDK的project是使用厂商的BSP所创 请问这样我程序撰写出来可用的平台是所有CE平台都可用吗? 还是会有所限制! 因为我目前 有一个对话盒的程序,在别块母板上执行会出现 ...…

查看全部问答>

【关注】《ARM嵌入式常用模块与综合系统设计实例精讲》练习题与答案

本文转引自 广告,被过滤 ARM技术讨论版 广告,被过滤 非常详细的问题集锦,相信朋友们看过之后会对整个嵌入式ARM有一个更高远更深刻的认识。 第1章: 填空题 1.ARM内核有四个功能模块,即______、______、______、______,可供生产厂商根据不 ...…

查看全部问答>

NAND FLASH坏块检测时不同块的检测时间不同

    pxa255+wce4.2系统,nand flash一共8192个block,开机检测坏块时,前面1000个左右非常慢,后面的非常快,不知道什么原因?我把FMD_GetBlockStatus设置为固定值还是同样的结果...是不是FAL层对不同的block处理过程不一样,导致检测时 ...…

查看全部问答>

如何获取进程内各句柄的属性

在使用process explorer时,发现它能够显示出某个进程的所有句柄,例如该进程打开的所有文件句柄,请问这是怎么实现的。使用了哪个api函数…

查看全部问答>

招人STMCU马达控制FAE

ST代理商招马达控制应用FAE 一人。如有兴趣的可将简历发到我的邮箱(grant_jx@163.com),会帮忙推荐的。简历需注明薪资要求。 要求: 1、熟悉电机控制应用(PMSM、BLDC...); 2、至少使用过一种MCU、DSP开发过电机控制应用的产品, ...…

查看全部问答>

单片机C语言程序设计实训100例

单片机C语言程序设计实训100例…

查看全部问答>

量变到质变的道理,在fpga学习的过程中,同样适用

从去年接触fpga到现在,也有近一年的时间了,虽然这一年中乱七八糟的事很分心,真正拿来学习fpga的时间也不是很多,但是,还是收获不小……也不记得当初为什么选择fpga了,反正现在的感觉就是,我喜欢这东西,虽然我很笨,但是,我就是想学好这东西 ...…

查看全部问答>