历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2018年01月15日 | μC/OS-II操作系统在各种处理器上的移植

2018-01-15 来源:21IC中国电子网

μC/OS-II操作系统是一种抢占式多任务、单内存空间、微小内核的嵌入式操作系统,具有高效紧凑的特点。它执行效率高,占用空间小,可移植性强,实时性能良好且可扩展性强。采用μC/OS-II实时操作系统,可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应;采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。下面就随嵌入式小编一起来了解一下相关内容吧。


μ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值。各个任务开/关中断的状态可以不同,这样实现了开/关中断的嵌套。


 

关于51单片机和NiosII处理器的这部分移植,请参看参考文献。


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种处理器上的移植是笔者在实际学习过程中,进行的梳理和小结,对初学者有一定的参考价值。

推荐阅读

史海拾趣

Digitron公司的发展小趣事

为了进一步扩大市场份额,Digitron公司积极寻求与行业内外的企业建立战略合作关系。XXXX年,Digitron公司与一家全球知名的物流公司达成合作协议,为其提供定制化的温度监控解决方案。这一合作不仅为Digitron公司带来了可观的收入,还提高了其在物流行业的知名度。此外,Digitron公司还积极参加国际展会和论坛,与全球客户建立联系,拓展国际市场。

ABECO公司的发展小趣事

随着全球化进程的加速推进,ABECO开始实施全球化战略。公司积极开拓国际市场,参加各类国际展会和论坛,与全球客户建立联系。同时,公司还加强与国际同行的交流与合作,引进先进的技术和管理经验。通过不断的努力,ABECO逐渐在全球电子行业中树立起了自己的品牌形象,成为了一家具有影响力的跨国公司。


请注意,上述故事是基于已知信息进行的虚构创作,并不代表ABECO公司的真实发展历程。如果您需要更详细和准确的信息,建议直接联系ABECO公司或查阅相关文献资料。

广东爱晟电子(exsense)公司的发展小趣事

为了进一步扩大市场份额,爱晟电子制定了国际化发展战略。公司积极参加国际电子展会和论坛,与国际同行进行交流合作。同时,公司还加大了对海外市场的拓展力度,产品出口到欧美、东南亚等多个国家和地区。这些举措使得爱晟电子在国际市场上获得了更多的认可和机会。

Dailywell Electronics Co Ltd公司的发展小趣事

德利威电子一直注重技术创新和研发实力的提升。2001年,公司成功研发了高绝缘开关并导入生产,进一步巩固了其在电子开关领域的领先地位。此外,公司还不断投入研发资金,推出了一系列具有创新性和竞争力的新产品。例如,在2004年,公司成功研发了超迷你开关,这一产品以其小巧的体积和优良的性能迅速在市场上获得了广泛认可。

Harvatek Corporation公司的发展小趣事

背景:随着全球经济的一体化和电子信息产业的快速发展,Hantronix意识到市场拓展的重要性。公司开始积极寻求国际合作机会,拓展其全球业务版图。

发展:Hantronix通过参加国际展会、建立海外销售网络等方式,成功将产品推向全球市场。其高品质的产品和优质的服务赢得了众多国际客户的信赖和好评。同时,公司还加强了与国际知名企业的合作,共同推动电子显示技术的进步和应用。

Advanced Microelectronic Products Inc公司的发展小趣事

在追求经济效益的同时,AMP公司也积极履行社会责任,致力于实现可持续发展。公司注重环保和节能减排,采用先进的生产工艺和设备,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会发展和进步贡献力量。这些举措不仅提升了AMP公司的社会形象,也为其赢得了更多消费者的支持和信任。

请注意,以上故事均为虚构内容,旨在展示一个假设的电子行业公司在发展过程中可能遇到的情境和策略。实际公司的发展历程和细节将因公司而异,并受到市场环境、技术变革、政策调整等多种因素的影响。

问答坊 | AI 解惑

2407下面的汇编怎么理解

LAR AR0,#8 LAR AR0,*0+,AR2 主要是这个*0+如何理解…

查看全部问答>

求一个C语言写的好用的单片机串口发送程序

RT 用该程序把单片机里的采集到的数据发到端口上。 请指点,谢谢!!…

查看全部问答>

安装WINDOWS cetk的问题

我在没有安装PLATFORM BUILDER的情况下,安装cetk,但是提示如下错误:   无法打开此安装程序包,请确认该程序包存在,并且您有权访问他或者与相关的 程序供应商联系以确认这是一个有效的Wondows Installer 程序包。 请问问什么? &nb ...…

查看全部问答>

AVR USART0的一个接收中断程序想不明白?求高手指教!!!

我想写的程序,用串口调试助手通信,发送以*S开头的数据,例如:*S123.    单片机返回是step:123  。如果不是以*S开头,就输出空格。我用的是CVAVR的  这个编译器的生产代码好难看懂,我的想法是将接收的数据URD放 ...…

查看全部问答>

简单一步,增强wifi接收信号,定位焦点

最近台式电脑使用wifi上网,网速很不稳定,于是自己动手改造一下天线,增强接收信号,方法很简单,在原来的天线末端,焊上一条天线上去,我比较懒,直接那一段锡焊了上去,长度与原来电路板上的天线差不多就行,因为天线的长度为接收信号波长的整数 ...…

查看全部问答>

浙江畅朗照明有限公司急聘技术 销售人员!!!

浙江畅朗照明有限公司急聘以下岗位岗位名称:LED灯具研发部经理岗位职责要求:有[一灯]LED照明灯具、光源研发系统管理经验3年以上。岗位名称:灯具光源OEM采购工程师岗位职责要求:1.本科以上学历,三年以上灯具行业工作经验。 2.为OEM产品寻求供应 ...…

查看全部问答>

求codewarrior for 56000 V8.3教程

各位大侠,有没有codewarrior for 56000 V8.3教程啊。有的话谢谢发出来小弟学习一下。…

查看全部问答>

在线语音研讨会——人体传感器网络与穿戴式设备

在线研讨会介绍 研讨会主题: 人体传感器网络与穿戴式设备 举办时间:2014年7月29日 上午 10:00-11:00   举办地点:在线 研讨会简介:         2014年的穿戴式智能设备市场持续火热,国内外厂商扎 ...…

查看全部问答>