历史上的今天
返回首页

历史上的今天

今天是:2025年02月21日(星期五)

正在发生

2018年02月21日 | μC/OS-II在几种处理器上的移植介绍

2018-02-21 来源: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 8n WRCTL%g0;”) //关中断

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


推荐阅读

史海拾趣

Glenair公司的发展小趣事
电压比较器、继电器、可控硅等元件可能因老化、过流、过热等原因损坏,导致电路无法正常工作。
无锡友达公司的发展小趣事

无锡友达深知技术创新的重要性,因此不断加大对研发团队的投入。公司拥有一支经验丰富、技术实力雄厚的研发团队,以及一流的成套设计工具和测试设备。这些团队和工具为公司开发具有自主知识产权的产品提供了有力保障。在数模混合信号处理领域,无锡友达拥有自己的系统设计体系和核心技术,产品研发技术和量产能力处于国内前列。

BERNSTEIN公司的发展小趣事

在BERNSTEIN公司的发展过程中,家族传承和企业管理一直是一个重要的主题。Hans-Joachim Bernstein作为Hans Bernstein的长子,在塑造公司的成功故事中发挥了重要作用。在他的管理下,“SpezialFabrik für Schaltkontakte”公司发展成为当今在国际上活跃的技术集团。这家家族企业现已进入第三代,Nicole和Achim Bernstein作为新一代领导人,继续传承着家族的优良传统和企业文化,推动着公司的持续发展。

City_Technology公司的发展小趣事

1977年,伦敦大学内,四个富有远见的科学家怀揣着梦想,创立了City Technology公司。他们利用Wolfson研究所开发的电化学技术,着手研发新型氧气感应技术。这一创新技术的诞生,标志着City Technology在气体传感领域的初步尝试,并为其日后的腾飞奠定了坚实的基础。在接下来的几年里,公司不断突破技术瓶颈,其铁罐氧气传感器技术于1982年获得了英国皇后奖技术成就奖,这一荣誉不仅肯定了公司的技术实力,也为其在市场上赢得了良好的声誉。

Electron Products Inc公司的发展小趣事

在快速发展的同时,EPI也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,EPI还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了公司的社会责任感,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构,旨在为您提供关于Electron Products Inc公司发展起来的可能故事。如有需要,请参考公司官方发布的信息或相关新闻报道。

台湾富致(FUZETEC)公司的发展小趣事

自1983年Futaba的VFD产品被福特汽车公司采用后,其在美国三大汽车厂的市场占有率迅速达到100%。这一成就不仅证明了Futaba VFD产品在汽车行业的卓越性能和广泛应用,还推动了其在全球汽车市场上的快速扩张。VFD的抗震性能、良好的温差适应性以及高可靠性,使其在汽车仪表盘和抬头显示器等关键部件中扮演了重要角色。随着新能源汽车的兴起,Futaba的VFD技术也进一步适应市场需求,为新能源汽车提供了更加先进的显示解决方案。

问答坊 | AI 解惑

听说会做这个设计就能拿六千块月薪哦,大家来看看,看看你们会不会!

用一个自复位型常开点按钮, 可以用任意个继电器, 控制一个灯泡, 要求按一下按钮,\\ 灯亮, 再按一下, 灯灭, 如此反复. 这是某大型企业招聘电气工程师时的一道题目,要求三十分钟, 大家是不是觉得很简单,但真的,三十分钟做不出来的人,好多好多…

查看全部问答>

单片机的C语言设计

关于嵌入式方面的我进场用…

查看全部问答>

关于sram的讨论

假设有块片内sram: 2kbyte, single port. 现在有两种形式: 1。做成一块:sram_2048x8 2。做成两块,每块各1kbyte: sram_1024x8  (x2) 现在从三个反面分析这两种形式的优缺点: 面积:哪个大一些? 功耗:哪种功耗大一些?(当然前 ...…

查看全部问答>

S3C6410+wince6.0 怎么实现在视频窗体显示半透明按钮?

S3C6410+wince6.0 怎么实现在视频窗体显示半透明按钮?…

查看全部问答>

谁有《一个操作系统的实现》的源代码

如题,于渊写的 也就是《自己动手写操作系统》的第二版 哪位有请发到我的邮箱: 346921212@qq.com 谢谢…

查看全部问答>

power pcb5.0.1中

power pcb5.0.1中 使用copper pouer命令画了两个长方行框,其中的一个在另一个里面,如何让里面的长方形里面敷铜而不是在他俩之间敷铜.高手指点一下!!!!!!!!!也就是说让里面的type为hatch outline,外面的type为copper pouer,不管采取哪样的敷铜方式.…

查看全部问答>

window7触摸屏驱动及触摸IC接口

请问各位大大,windows7支持哪些接口的触摸屏芯片,usb、I2C、spi还是PS2? 另外,对于多点触摸,windows需要从触摸屏控制芯片得到哪些数据以及数据格式? 以前的单点触摸,触摸屏芯片只要送坐标给系统就可以了,跟鼠标一样,不知道多点触摸跟普 ...…

查看全部问答>

WIN CE开发问题启蒙,希望得到帮助

谁有好的WIN CE的书籍或课程视频资料,介绍一下,我用VS2005的!最好都有链接地址,可以看看,简介也好!…

查看全部问答>

STM32RTC时钟好差劲

                                 不知道为什么,STM32 的RTC时钟那么差劲,我制作了10个装置,时间11个样,运行一个月,时间居然相差不靠谱, ...…

查看全部问答>

PIC单片机的特点及应用

Microchip公司生产的PIC16C72是一款基于EPROM的8位高性能微控制器。与其它价格相当的微控制器相比,它在执行速度和代码压缩方面都有很大的改进。由于随时可以买到需要的OPT(一次性编程)产品,因而缩短了利用PIC16C73进行产品设计开发的周期。 PI ...…

查看全部问答>