Board logo

标题: [求助]关于怎样在FLASH中开辟数据区! [打印本页]

作者: zihongshu    时间: 2005-5-10 15:59     标题: [求助]关于怎样在FLASH中开辟数据区!

我想在Flash中定义一段数据区,用来存储一些参数,然后可以通过串口来读写它们,即使掉电之后这些参数还能保存。现在我直接用地址可以了,如直接引用地址0x1AA0,对它读写可以,另外我想能不能把分配地址的任务扔给编译器,比如定义const常数是这样的
#pragma CONST_SEG APP_ROM
const unsigned char SystemConfig[10];
这样编译器就自动给SystemConfig[10]分配一段空间,我引用SystemConfig[10]它时只要引用SystemConfig做首地址就行了,不用关心它具体是什么,但是这样声明是个常数,不能改变,我试着写了一下,变是变了,变的不对,呵呵。我用
#pragma DATA_SEG APP_ROM
unsigned char SystemConfig[10];
说APP_ROM不是读写的区域,当然不是了,我用
#pragma INTO_ROM
unsigned char SystemConfig[10];不好使,不能读写
请问有别的办法吗?还是我上面这些用的不对?
[em06][em06][em06][em27][em27][em27][em28][em28][em28]
作者: 8808beter    时间: 2005-5-10 16:24

我是这样做的。定义一个变量在ROM中。
volatile unsigned char IDFlash @0x8000;
你上面说的方法我也试过,但不成功。也请教他人了。
作者: zihongshu    时间: 2005-5-10 16:30

请问volatile是什么意思啊,主要用来做什么?可以这样定义数组吗?
作者: 8808beter    时间: 2005-5-10 16:38

表示变量是外部可改变的。即此变量可能会被此程序外的其他程序修改数值。编译时不用保存的数值而去直接读取地址。
至于数组,我没有试过,要是不长的话,就一个一个的定义吧。你自己试试。
作者: zihongshu    时间: 2005-5-10 16:41

谢谢了,呵呵
作者: 流浪远方百合    时间: 2005-5-10 16:55

请教楼上的,那我要定义好几个const常量在ROM中,怎么定义啊
是不是像如下:每定义一个就写一次#pragma啊
#pragma CONST_SEG APP_ROM
const unsigned char SystemConfig[10];
作者: zihongshu    时间: 2005-5-10 17:26

不用,只写一次#pragma CONST_SEG APP_ROM就行了(APP_ROM是我自己定义的),只不过凡是定义的常数在程序中都要引用一下,不然的话会被编译器优化掉(有的可以,有的不行)
作者: 流浪远方百合    时间: 2005-5-11 09:25

我在函数内部直接用unsigned const char定义的常量和#pragma有什么区别啊!
作者: zihongshu    时间: 2005-5-11 09:40

在函数内部直接用unsigned const char定义的常量编译器就把它放到默认的数据区,但是用#pragma的话,#pragma告诉编译器把const的常量放到#pragma定义的区域,比如
#pragma CONST_SEG APP_ROM
const unsigned char SystemConfig[10];
就是把SystemConfig[10]放到APP_ROM中了,你可以看看Manual_Compiler_HC08.pdf这个文档,讲编译器选项的
作者: 流浪远方百合    时间: 2005-5-11 10:13

多谢楼上的!
在prm文件中有关于存贮空间的一段代码:自己定义会不会与其它默认的发生冲突啊
SECTIONS /* here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
  Z_RAM  = READ_WRITE 0x0080 TO 0x00FF;
  RAM    = READ_WRITE 0x0100 TO 0x01FF;
  ROM    = READ_ONLY  0xBA00 TO 0xF9FF;
END

PLACEMENT /* here all predefined and user segments are placed into the SECTIONS defined above. */
  DEFAULT_ROM                   INTO ROM;
  DEFAULT_RAM                   INTO RAM;
  _DATA_ZEROPAGE, MY_ZEROPAGE   INTO Z_RAM;
END
作者: zihongshu    时间: 2005-5-11 10:45

哦,我也是刚刚知道这些,你可以看看我的帖子,这几天我问的
作者: strongchen    时间: 2005-5-12 10:40

通过讨论,大家都取得了不小的进步,恭喜恭喜!
作者: zihongshu    时间: 2005-5-12 15:14

呵呵,版主终于露头了
作者: weihuawen    时间: 2005-5-31 15:17

非常感谢,顶。
作者: hapyhu    时间: 2005-6-23 18:06

谢谢版主了!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0