位置:51电子网 » 技术资料 » 测试测量

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

发布时间:2008/5/27 0:00:00 访问次数:675

        

    

    

    本文详细介绍了把μ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-ⅱ的任务栈时,需要了解所用微处理器数据存储空间尤其是堆栈空间的组

&

        

    

    

    本文详细介绍了把μ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-ⅱ的任务栈时,需要了解所用微处理器数据存储空间尤其是堆栈空间的组

&

相关IC型号

热门点击

 

推荐技术资料

音频变压器DIY
    笔者在本刊今年第六期上着重介绍了“四夹三”音频变压器的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!