新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8051与AndesCore的软件差异与移植

8051与AndesCore的软件差异与移植

作者:时间:2015-07-29来源:电子产品世界收藏

  1. TM

本文引用地址:http://www.amcfsurvey.com/article/277989.htm

  本文将介绍使用™差异事项,并对两种CPU系统相关事项做说明,后面再介绍从 移植到 ™上注意事项,举中断向量表及异常处理函数的例子说明差异及移植,最后简要介绍AndesCore™在MCU应用的三款CPU: N705,N801 和N968A。

  2. 8051与AndesCore常见差异事项

  2.1. 位宽的差异

  位宽是指处理器一次执行指令的数据带宽。8051 是8 位宽的处理器, 而AndesCore™是32位宽的处理器,支持32位与 16位的混合指令集,位数越宽,在数据的处理方面就更有效率。

  2.2. 指令差异

  8051 汇编语言共有111 条指令集,AndeStar™的V3m指令集有 157 条,AndeStar™的V3指令集有 200 多条,两种 CPU的指令集大概可以分为以下几类:算术运算,如加,减,乘,除等操作;数据传送,如数据在寄存器,内存间的传送,赋值等;逻辑跳转,如函数呼叫,无条件跳转,条件跳转,中断返回等;在AndesCore ™中还有特权模式的指令部分,关于两种指令集的具体差别,可以分别参考对应的指令集介绍文档。

  2.3. 地址空间映射差异

  AndesCore™使用memory map 方式映射地址空间,主要有两种,内存的空间映射,如其中的RAM或ROM地址,它们用于存放程序运行时的代码和数据,在AndesCore™上代码在link 后,程序运行的代码和数据地址会最终确定,Andes 提供了一个简便的 link script 工具sag ,可以很方便的对系统中可用的内存空间进行分配设定。

  另一个是外设所对应的地址空间,可以通过查看SoC 对应的手册了解对应的外设映射的空间范围及相应的使用方法。

  2.4. 堆栈设置差异

  8051的堆栈的起始位置是固定的(部分衍生 8051可以做程序设定),它通常固定在片内的RAM中,8051 内存空间有限,非常小,程序中所使用的变量存放于特定的数据空间中,并不会放在堆栈空间,所以在 8051中所需要的堆栈空间很小。而对于 And esCore™来说,堆栈可以设置在任意合适的 RAM上。程序运行时所有的局部变量都存放在堆栈中,只需要确保在设计系统的时候有足够的堆栈空间。在 AndesCore™中有$ sp寄存器表示栈顶位置,这需要在系统上电或者是系统reset 后初始化时进行设置。

  2.5. 代码和数据的存储差异

  在8051 系列单片机中,数据存储区可以分为内部数据存储区以及外部数据存储区。

  内部数据存储区有几个区别:data ,bdata,idata。

  data : 片内RAM直接寻址区。bdata: 片内RAM位寻址区。idata: 片内 RAM间接寻址区。

  外部数据存储区又有:xdata,pdata。

  xdata 和pdata:是外部存储区,有些芯片会带有 XRAM 。

  在有些开发工具中,如K eil,可以通过设置存储模式来处理,存储模式决定了默认的存储器类型, 此存储器类型将应用于函数参数, 局部变量和定义时未包含存储器类型的变量。

  SMALL 所有的变量存放在片内 RAM(data 区间)

  COMPACT 所有的变量存放在外部存储区(pdata 区间)

  LARGE 所有的变量存放在外部存储区(xdata 区间)

  AndesCore™以内存映射的方式,内存空间不会有特别的限制,就是说不会像8051那样需放在某处区间,这样的设计更方便灵活,允许程序代码和数据在可用的空间里自由放置。

  有时候需要将某段代码或者数据存放在指定的位置上,在8051 中,可以在代码中使用"at" 关键字,但该关键字是 8051 中所特有的,会造成可移植性和维护的问题,在 AndesCore™上,提供了一种简便的 link script 工具,如上所提到的sag 工具,在 C 代码中使用GNU标准的语法格式,在 link 之后相应的代码和数据将存放于指定的位置,这样可以避免在代码中使用"at" 该平台相关的属性设置。

  2.6. 数据类型及对齐差异

  8051和AndesCore ™是不同类型的CPU,它们所使用的数据类型所对应的宽度也不同,如下表所示:

  在链接完成后数据通常都会按照本身的属性对齐,比如int 类型则会4 bytes对齐,short则会2 bytes对齐。这样的存放方式可以提高 CPU对数据读取时的效率。虽然AndesCore™是32bit的CPU, 在只需要8bit 和16bit的数据时能节省存储空间,但在处理16bit 和32bit的数据上则有更高效。

  在8051中有sbit 关键字用于设置对特殊功能寄存器 SFR的直接访问,8051的特殊功能寄存器分布在内存地址0x80到0xFF处,如下表:

  sbit 是8051扩展的变量类型,非标准 C 语法,移植的时候需要将其修改成标准C 操作语法,另外在AndesCore™中,所有的寄存器都是单独存在的,不会占用内存的空间。

  2.7. 指针使用差异

  8051中两种类型的指针,分别是存储器指针和通用指针,通用指针由3 个字节组成,第一个字节用来指明对应的内存类型,所以这种类型的指针类型占用空间更大也更慢,存储器指针只能用来访问指定类型的存储器空间。

  而在AndesCore™上指针不会有这方面的限制,它是一个 32bit的数据,普通的寄存器就可以存放指针内容,可以访问到系统4G 范围内的空间(N705,N801地址空间只有 16M,N968A以上的 CPU地址空间可达4G)。

  2.8. 函数声明差异

  在8051中由于堆栈空间有限,如果有函数是可重入的,需要在函数声明的时候用关键字reentrant 做说明。8051 的中断处理函数则需要使用关键字interrupt 声明,中断处理函数有时也需要用 using 关键字指明哪一寄存器组会被使用到。

  在AndesCore™中,都采用标准的 C 语法,在声明函数时并不需要这些附加的声明。AndesCore™遵行底层的ABI 机制,编译器处理底层的寄存器及堆栈相关机制。对于上层用户来说是透明的。


上一页 1 2 3 下一页

关键词: 8051 AndesCore

评论


相关推荐

技术专区

关闭