8051 与 AndesCoreTM 的软件差异与移植
1. 8051 与 AndesCoreTM
本文将介绍使用 8051 与 AndesCore?差异事项,并对两种 CPU 系统相关事 项做说明,后面再介绍从 8051 移植到 AndesCore?上注意事项,举中断向量表 及异常处理函数的例子说明差异及移植,最后简要介绍 AndesCore?在 MCU 应 用的三款CPU:N705,N801 和 N968A。
2. 8051 与 AndesCoreTM 常见差异事项
2.1. 位宽的差异
位宽是指处理器一次执行指令的数据带宽。8051 是 8 位宽的处理器, 而 AndesCore?是 32 位宽的处理器,支持 32 位与 16 位的混合指令集,位数越宽, 在数据的处理方面就更有效率。
8051 指令例子: MOV A, Rn ; 寄存器传送到累加 INC A ; 累加器加 1 AndesCore?指令例子: 1. 32 位指令 MOVI Rt, imm20s ; 将一个立即数 imm20s 赋于寄存器 Rt ADDI Rt, Ra, imm15s ; 将一个立即数 imm15s 与 Ra 相加结果赋于 Rt 2. 16 位指令: 在操作数范围较小时,可以被编译成 16 位指令 MOVI55 Rt5, imm5s ; ADDI333 Rt3, Ra3, imm3u ; |
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 中所需要的堆栈 空间很小。而对于 AndesCore?来说,堆栈可以设置在任意合适的 RAM 上。程 序运行时所有的局部变量都存放在堆栈中,只需要确保在设计系统的时候有足够 的堆栈空间。在 AndesCore?中有$sp 寄存器表示栈顶位置,这需要在系统上电 或者是系统 reset 后初始化时进行设置。
2.5. 代码和数据的存储差异
在 8051 系列单片机中,数据存储区可以分为内部数据存储区以及外部数据 存储区。
内部数据存储区有几个区别:data,bdata,idata。
data : 片内 RAM 直接寻址区。bdata: 片内 RAM 位寻址区。idata: 片内 RAM
间接寻址区。
外部数据存储区又有:xdata,pdata。
xdata 和 pdata:是外部存储区,有些芯片会带有 XRAM。
在有些开发工具中,如 Keil,可以通过设置存储模式来处理,存储模式决定 了默认的存储器类型,此存储器类型将应用于函数参数,局部变量和定义时未包含 存储器类型的变量。
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,它们所使用的数据类型所对应的宽 度也不同,如下表所示:
Type | AndesCore? | 8051 | Notes |
char | 8-bit signed | 8-bit signed | |
short | 16-bit | 16-bit | |
int | 32-bit | 16-bit | int is smaller on 8051 |
andes andescore 8051 MCU 相关文章:
- EDM安全访问机制应用方案(02-12)
- 在晶心平台运行具 OSC 的 FreeRTOS(01-08)
- Andes SAG应用实例(12-04)
- Andes 的分散聚合(SAG)机制(09-22)