您的位置 首页 芯闻

μC/OS-Ⅱ在ATmega128上的移植Step by Step

本文详细介绍了把μC/OS-Ⅱ移植到ATMEL公司的8位微控制器ATmega128上的全过程。所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。在

本文具体介绍了把μC/OS-Ⅱ移植到ATMEL公司的8位微操控器ATmega128上的全过程。所谓移植,便是使一个实时内核能在

某个微处理器或微操控器上运转。在移植之前,期望读者能了解所用微处理器和C编译器的特色。

1 ATmega128的内核特色

之所以要先介绍ATmega128 MCU内核特色,是因为在μC/OS-Ⅱ的移植过程中,仍需求用户用C言语和汇编言语编写一些与微

处理器相关的代码。这儿首要介绍ATmega128与μC/OS-Ⅱ移植相关的内核特色。假如读者现已对ATmega128 比较了解了,

那就不用阅览这一部分了。

1.1微操控器 (MCU)

ATmega128的MCU包含一个算术逻辑单元(ALU),一个状况寄存器(SREG),一个通用作业寄存器组和一个仓库指针。状况

寄存器(SREG)的最高位I是大局中止答应位。假如大局中止答应位为零,则一切中止都被制止。当体系呼应一个中止后,I位将由硬件主动清“0”;当履行中止回来(RETI)指令时,I位由硬件主动置“1” ,然后答应体系再次呼应下一个中止请求。

通用作业寄存器组是由32个8位的通用作业寄存器组成。其间R26~R31这6个寄存器还能够两两合并为3个16位的直接地址寄存器。这些寄存器能够用来对数据存储空间进行直接寻址。这3个直接地址寄存器的名称为:X寄存器、Y寄存器、Z寄存器。其间Z寄存器还能用刁难程序存储空间进行直接寻址的寄存器。有些AVR C言语编译器还把Y寄存器作为软件仓库的仓库指针,比方ICC- AVR,CodevisionAVR。

仓库指针(SP)是一个指示仓库顶部地址的16位寄存器。在ICCAVR中,它被用作指向硬件仓库的仓库指针。AVR单片

机上电复位后,SP指针的初始值为0x0000,因为AVR单片机的仓库是向下成长的(从高地址向低地址成长),所以体系程序

一开始有必要对仓库指针SP进行初始化,行将SP的值设为数据存储空间的最高地址。ICCAVR编译器在链接C程序文件的时 候,会主动在程序头链入startup文件。startup文件里边的程序将会去做初始化SP指针的作业。链入startup文件是ICCAVR 这个编译器的特色,在用其它编译器的时分,期望读者承认所运用的编译器是否带有主动初始化SP的功用,若没有,应在 用户程序中初始化SP。

1.2 数据存储空间(仅内部)

AVR单片机的数据存储器是线形的,从低地址到高地址依次是CPU寄存器区(32个通用寄存器),I/O寄存器区,数据存储区ICCAVR编译器又将数据存储区划分为大局变量和字符串区,软件仓库区和硬件仓库区三个空间。

高地址

硬件仓库区

软件仓库区

大局变量和字符串区

I/O寄存器区

CPU寄存器区

低地址

ICCAVR编译器将仓库分成了两个功用不同的仓库来处理(这一点与8051系列的单片机编译器处理方法不同)。硬件仓库用于贮存子程序和中止服务子程序调用时的函数回来地址。这块数据区域由仓库指针SP进行寻址,数据的进栈和出栈有专门的汇编指令(pop,push等)支撑,所以叫做硬件仓库区。软件仓库用于传递参数,贮存暂时变量和局部变量。这块数据区域是用软件模仿仓库贮存数据的方法进行数据存储,对该区域寻址的指针由用户自己界说,所以叫做软件仓库区。AVR单片机的硬件仓库的成长方向是向下的(从高地址向低地址成长),所以软件仓库在界说的时分,也采纳相同的 成长方向。

这儿没有用ATmega128而选用AVR单片机的提法是因为ATmega128归于AVR系列单片机中的一种,而一切的AVR单片机的数据存储器安排方法都是共同的。在创立μC/OS-Ⅱ的使命栈时,需求了解所用微处理器数据存储空间尤其是仓库空间的组 方法及相关的操作。读者应参看所用微处理器的材料和编译器的协助文档,了解该部分知 识。

1.3 ATmega128的中止呼应机制

ATmega128有34个不同的中止源,每个中止源和体系复位在程序存储空间都有一个独立的中止向量(中止进口地址)。每个中止源都有各自独立的中止答应操控位,当某个中止源的中止答应操控位为“1”且大局中止答应位I也为“1”时,体系才呼应该中止。

当体系呼应一个中止请求后,会主动将大局中止答应位I清零,此刻,后续中止呼应被屏蔽。当体系履行中止回来指令RETI时,会将大局中止答应位I置“1”,以答应呼应下一个中止。若用户想完结中止嵌套,有必要在中止服务子程序中将大局中止答应位I置“1”。(这一点与8051系列的单片机不同)中止向量表中,处于低地址的中止具有高的优先级。优先级高仅仅标明在多个中止一起发生的时分,体系先呼应优 先级高的中止,并不含有高优先级的中止能打断低优先级的中止处理工程的意思。这与8051系列单片机的中止优先级概念

不同。

因为μC/OS-Ⅱ的使命切换实际上是模仿一次中止,因而需求知道CPU的中止呼应机制。中止发生时,ATmega128按以下

过程次序履行:

A. 大局中止答应位I清零。

B. 将指向下一条指令的PC值压入仓库,一起仓库指针SP减2。

C. 挑选最高优先级的中止向量装入PC,程序从此地址持续履行中止处理。

D. 当履行中止处理时,中止源的中止答应操控位清零。

中止完毕后,履行RETI指令,此刻

A. 大局中止答应位I置“1”。

B. PC从仓库推出,程序从被中止的当地持续履行。

特别要注意的是:AVR单片机在呼应中止及从中止回来时,并不会对状况寄存器SREG和通用寄存器主动进行保存和康复操作,因而,对状况寄存器SREG和通用寄存器的中止维护作业有必要由用户来完结。

1.4 ATmega128的定时器中止

ATmega128有三个定时器:T0,T1,T2;它们三者都有计数溢出中止功用,并且T1和T2还有匹配比较中止,即定时器计数到设定的值时,发生中止并主动清零。若体系选用这种中止方法,其优点是在中止服务程序ISR中不需求从头装载定时器的值。但本文出于通用性的考虑,仍选用定时器计数溢出中止方法

2 μC/OS-Ⅱ的移植

2.1移植条件

要完结μC/OS-Ⅱ的移植,所用的处理器和编译器有必要满意必定的条件:

(1) 所用的C编译器能发生可重入代码。

可重入代码是指能够被一个以上的使命调用,而不用忧虑其数据会被损坏的代码。可重入代码任何时分都能够被中止,一段时间今后又能够从头运转,而相应的数据不会丢掉,不可重入代码则不可。本文所运用ImageCraft公司的ICCAVR V6.29编译器能发生可重入代码。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/297903.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部