新闻中心

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

8051 与 AndesCoreTM 的软件差异与移植

作者:时间:2015-07-29来源:收藏

1. 与 AndesCoreTM

本文引用地址:http://www.eepw.com.cn/article/277992.htm

本文将介绍使用 与 AndesCore™差异事项,并对两种 CPU 系统相关事 项做说明,后面再介绍从 移植到 AndesCore™上注意事项,举中断向量表 及异常处理函数的例子说明差异及移植,最后简要介绍 AndesCore™在 应 用的三款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™8051Notes
char8-bit signed8-bit signed
short16-bit16-bit
int32-bit16-bitint is smaller on 8051
long32-bit32-bit
long long64-bitN/A
float32-bit32-bit
double64-bit32-bit8051 has no 64-bit floating point type
long double64-bitN/A

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

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

F8H






FFH
F0HB *





F7H
E8H






EFH
E0hACC *





E7H
D8H






DFH
D0HPSW *





D7H
C8HT2CON *
RCAP2LRCAP2HTL2TH2
CFH
C0h






C7H
B8HIP *





BFH
B0hP3 *





B7H
A8hIE *





AFH
A0HP2 *





A7H
98HSCON *SBUF




9FH
90HP1 *





97H
88hTCON *TMODTL0TL1TH0TH1
8FH
80HP0 *SPDPLDPH

PCON87H

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

2.7.  指针使用差异

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

通用指针:
通用指针的声明和标准 C 语言中一样
char *s;    /* string ptr */
int *numptr; /* int ptr */ long *state; /* long ptr */
存储器指针:
char data *str;    /* ptr to string in data */
int xdata *numtab; /* ptr to int(s) in xdata */              

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

2.8.  函数声明差异

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

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

存储器相关文章:存储器原理



上一页 1 2 3 下一页

关键词: andes andescore 8051 MCU

评论


相关推荐

技术专区

关闭