原创 谈谈R8C/M16C的内存(section)分配

2011-2-25 14:09 1728 3 3 分类: MCU/ 嵌入式
来源:瑞萨单片机论坛

我们知道,编译器在编译程序的时候,会将程序按照一定的方式来预处理,编译,链接和重定位。
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条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条