微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 8051 与 AndesCoreTM 的软件差异与移植

8051 与 AndesCoreTM 的软件差异与移植

时间:07-29 来源: 点击:
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 机制,编译器处理底层的寄存器及堆栈相 关机制。对于上层用户来说是透明的。

3. 系统相关事项说明

3.1.  操作模式

8051 只有一种 mode,AndesCore?有两种 mode,分别是 superuser mode 和 user mode,当系统上电启动时是在 superuser mode,或者当系统进入到中 断或者异常时也进入到 superuser mode,当从中断或者是异常返回后,会返回到 user mode。由于 8051 没有 mode 切换的问题,所以在移植的时候只需要理 解 AndesCore?在 mode 方面的机制就可以。

3.2.  系统的启动

8051 和 AndesCore?的系统启动过程类似,通常在 0 地址存放中断向量表, 第一个向量表是 reset,当系统上电或者是 reset 后,经过该向量会跳转到一个 启动函数中,该启动函数会完成系统启动所必要的步骤,比如设置 CPU,初始 化 SoC,清理内存,初始化 C 运行环境等, 最后完成所有的准备后跳转到 main 函数。

3.3.  中断处理

8051 有 5 个中断源,通常中断向量表只是一个跳转,会跳到真正的中断处理 函数,8051 只能设置成两级的中断优先级。

中断源中断向量
上电复位0000H
外部中断 00003H
定时器 0 溢出000BH
外部中断 10013H
定时器 1 溢出001BH
串行口中断0023H

AndesCore?包含了 9 个内部异常,中断向量号对应于从 0 到 8, 9 之后对应于外部中断,在 Internal VIC (IVIC)mode 时可支持 32 个外部中断,

Entry  numberEntry point
0Reset/NMI
1TLB fill
2PTE not present
3TLB misc
4TLB VLPT miss
5Machine Error
6Debug related
7General exception
8Syscall
9HW0
10HW1
11HW2
12HW3
40HW31

当 External VIC(EVIC) mode 时由外部中断控制器决定,最多有 64 个。

Entry  numberEntry point
0Reset/NMI
1TLB fill
2PTE not present
3TLB misc
4TLB VLPT miss
5Machine Error
6Debug related
7General exception
8Syscall
9-72VEP 0-63

中断的处理由以下几部分组成:

1.  实现中断处理函数

可以用汇编实现 8051 的中断处理函数,也可以用 C 来实现,在 8051中 C 实现

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top