我们知道,编译器在编译程序的时候,会将程序按照一定的方式来预处理,编译,链接和重定位。
R8C/M16C使用的是nc30系列编译器,这个编译器被集成到HEW里。当我们使用HEW来调试时R8C/M16C芯片时,会调用NC30来编译,链接等工作,最后生成一些可执行文件,包括仿真文件.x30和可执行的二进制文件.mot。
下面讲的是NC30的内存分配,也就是我们在程序里经常看到的section关键字。
当我们新建一个R8C的汇编工程后,可以在sect30.inc看到整个代码的内存分配。
NC30的内存分配如下:
SBDATA SBDATA区
near RAM 低地址RAM区
far RAM 高地址RAM区
near ROM 低地址ROM区
far ROM 高地址ROM区
stack 栈
heap 堆
Initial data of "data" section 初始化了的数据区
switch table section 跳转表
code 代码区
variable vector section 可变的向量区
fixed vector section 固定的向量区
我们分别讲讲他们的含义。
SBDATA
这个区域从内部RAM的起始地址开始,一般用来存放经常使用的数据,比如volatile变量等,这样可以提高程序执行速度。
使用#pragma SBDATA指令,告诉编译器将变量重定位到SBDATA区域。比如:
#pragma SBDATA cc
int cc;
near RAM
低地址RAM区。利用关键字_near或者__near可以将变量申明到此区域,比如:
int _near cc;
Stack
栈
Heap
堆
near ROM
低地址ROM区,存放常量
far RAM
高地址RAM区,一般用来扩展外部RAM
far ROM
高地址ROM区,存放常量等
Initial data of 'data' section
初始化数据段,位于ROM,里面都是初始化好了的数据
switch table section
跳转表
code
代码区,存放二进制可执行代码
variable vector section
可变的向量区,存放中断向量
fixed vector section
固定的向量区,存放系统异常向量,例如复位,断点等
提示:
在HEW的build--toolchain里面,可以选择一些编译或链接参数等。
文章评论(0条评论)
登录后参与讨论