如何将一个全局变量写到FLASH的固定位置上?

wwbinghai   2010-5-17 12:36 楼主
准备定义一个全局变量,内容为"1234567890",放在FLASH的某个地址上,如0x1b00。我希望是程序编译完后,生成的hex文件转换成bin文件之后,在0x1b00位置上,就有这串数据写在里头。这个要如何操作呢。

回复评论 (8)

unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。
点赞  2010-5-17 14:17
生产的时候可以通过编程器将这个数据和代码数据一起烧录进去,调试的时候你就暂时用代码写写吧,或者是调试的时候使用什么样的方法烧录代码进去,你也可以用同样方法将有这样数据的一个BIN文件烧录进去。
点赞  2010-5-17 14:31
引用: 引用 2 楼 veabol 的回复:
生产的时候可以通过编程器将这个数据和代码数据一起烧录进去,调试的时候你就暂时用代码写写吧,或者是调试的时候使用什么样的方法烧录代码进去,你也可以用同样方法将有这样数据的一个BIN文件烧录进去。

额~那还是比较麻烦的喔。生产之前还要修改BIN文件。编译器不知道是否有这样子的功能,再输出的时候在HEX里面增加这样一条记录。然后hex2bin的时候,就没问题了。
点赞  2010-5-17 14:46
没思路了喔~~~
点赞  2010-5-17 15:38
刚听同事说需要用汇编来搞。。。汗,C不能做么?
点赞  2010-5-17 15:52
必须让链接器将变量链接到这个地址!
例如:在ARM上,可以通过Scatter File指定~呵呵~
你那样做,有用处吗?还是只想玩一玩?
点赞  2010-5-23 20:21
引用: 引用 1 楼 areswry 的回复:
unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。

有的FLASH烧写工具有这样的功能,可以直接对FLASH进行读写。
另外,楼主你的这种方法也是可以的,你可以先运行一段只有对FLASH进行写操作的程序,然后FLASH里不就有数据了么。你下次烧其他程序,只要指定编译器的MAP文件,不要关联到上次写的FLASH地址,那么之前写的这些数据不会重新初始化的。
点赞  2010-5-24 09:42
引用: 引用 1 楼 areswry 的回复:
unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。

这种方法不安全. 因为LINKER无法为你保留这个地址,它可能把这个地址分配给某段代码.
点赞  2010-5-24 09:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复