这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 谈谈R8C/M16C的内存(section)分配 [转]

共5条 1/1 1 跳转至页

谈谈R8C/M16C的内存(section)分配 [转]

菜鸟
2009-07-22 15:49:05     打赏



我们知道,编译器在编译程序的时候,会将程序按照一定的方式来预处理,编译,链接和重定位。
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里面,可以选择一些编译或链接参数等。



关键词: 谈谈     内存     section     分配    

菜鸟
2009-08-22 20:49:48     打赏
2楼
555555555555555

居然没人看

助工
2009-08-22 21:10:08     打赏
3楼
不是没人看,单片机也搞分配,弄得也太复杂点了吧。一般DSP或ARM才讲究这个

菜鸟
2009-08-22 21:18:07     打赏
4楼
这个,,,楼上的。
搞单片机肯定要懂这些啊,要不然怎么建系统呢?

高工
2012-02-17 09:46:10     打赏
5楼
来学习下 谢谢咯

共5条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]