这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
站长统计