首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]

[求助]

在codewarrior中用c写的#define存放在RAM还是ROM里面?
要像c51中code怎样定义???[em06]
不断学习,摸索中进步!
问题1:define只是一种指代的定义,并不占用存储空间
问题2:不太理解你的意思,能否给出例子?
比如:在c51中:uchar code a;则a变量就存放在rom中,
我现在想把  DEFAULT_SYS_SET:                                                  DB        83H,00H,00H,00H        用c在motorola中实现!!
不断学习,摸索中进步!
明白了,你是要放常数在ROM中。在freescale方面,通过汇编和C都可以实现。
在Codewarrior中,如果用汇编,就这样写:
   org  $2000    ; 存放的起始地址
DEFAULT_SYS_SET:   DC.B   $83,$00,$00,$00   ;常量

如果用C, 可以在prm中开辟出一段地址空间比如从0x2000-0x2003,命名为My_const
在c文件中,这样写:
#pragma CONST_SEG My_const
const  unsigned char DEFAULT_SYS_SET[4]={0x83,0x00,0x00,0x00};

这样就可以了。不过,要提醒的是,Codewarrior在编译的时候会做一个优化,有时候如果你定义的这些常数没有在程序中被引用的话,Codewarrior会不生成相应的代码。所以你最好在定义后在程序中引用一下你的常量。
怎样申请空间啊!!!
是不是在prm中开辟空间以后,其它的代码就会自动再不会占用,这样就不发生空间冲突?
不断学习,摸索中进步!
seuafu2005,我记得CONST变量,CODEWARRIOR的编译器是把它直接放在ROM里面的啊!
下面的英文说的:
The Declaration const is apllied to any variable, and it tells the commpiler to store it in ROM code.
当然要把CONST放到指定的地方去,就用你的方法啊!我也是刚学会,谢谢哦
是的,prm中申请了,其他的code就不会占用了。

恩,const有可能是直接放在rom中的,可以试一下看看
也不见得,
如果是这样
#define MYVAL volatile *(byte *)(0x80)
则会将0X80地址直接指定给MYVAL
oceanx 按照你的方法,为什么连续有几个const定义的时候编译,第二个会出现错误,如:
const unsigned char DEFAULT_SYS_SET[4]={0x83,0x00,0x00,0x00};
const unsigned char DEFAULT_REC_PARA[3]={0x00,0x00,0x00};
不断学习,摸索中进步!
出现错误应该是存储空间分配的问题。我试了一下,直接定义const是可以的,会放到ROM中
返回列表