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

[求助]关于怎样在FLASH中开辟数据区!

[求助]关于怎样在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]
我是这样做的。定义一个变量在ROM中。
volatile unsigned char IDFlash @0x8000;
你上面说的方法我也试过,但不成功。也请教他人了。
学后而问
请问volatile是什么意思啊,主要用来做什么?可以这样定义数组吗?
表示变量是外部可改变的。即此变量可能会被此程序外的其他程序修改数值。编译时不用保存的数值而去直接读取地址。
至于数组,我没有试过,要是不长的话,就一个一个的定义吧。你自己试试。
学后而问
谢谢了,呵呵
请教楼上的,那我要定义好几个const常量在ROM中,怎么定义啊
是不是像如下:每定义一个就写一次#pragma啊
#pragma CONST_SEG APP_ROM
const unsigned char SystemConfig[10];
不断学习,摸索中进步!
不用,只写一次#pragma CONST_SEG APP_ROM就行了(APP_ROM是我自己定义的),只不过凡是定义的常数在程序中都要引用一下,不然的话会被编译器优化掉(有的可以,有的不行)
我在函数内部直接用unsigned const char定义的常量和#pragma有什么区别啊!
不断学习,摸索中进步!
在函数内部直接用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这个文档,讲编译器选项的
多谢楼上的!
在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
不断学习,摸索中进步!
哦,我也是刚刚知道这些,你可以看看我的帖子,这几天我问的
通过讨论,大家都取得了不小的进步,恭喜恭喜!
海纳百川  有容乃大
呵呵,版主终于露头了
非常感谢,顶。
谢谢版主了!
返回列表