打印
[STM8]

STM8怎样能够将数据存放在指定的FLASH地址内

[复制链接]
2682|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fuqiang4343|  楼主 | 2014-10-9 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我要做遥控器滚码烧录,需要将遥控器地址存放在指定地址
沙发
mmuuss586| | 2014-10-9 12:45 | 只看该作者
读写内部FLASH数据,就是读写指定地址数据
24-Flash_eeprom.zip (306.79 KB)

使用特权

评论回复
板凳
fuqiang4343|  楼主 | 2014-10-9 13:28 | 只看该作者
我的意思是否能在定义数据的时候就制定存储地址。这样就能够保证该位置没有被程序覆盖

使用特权

评论回复
地板
grant_jx| | 2014-10-9 21:29 | 只看该作者
1、在COMSIC下,开一个数组,将你的数据作为数组申明,同时定义不可优化 和Const属性,类型前加上强制地址指针 @Flash 地址,这种方法最简单。
2、在COSMIC下,用#pragma,来限定申明的数组。在然后去ikf文件中,修改Code segment ,增加该申明的部分。

使用特权

评论回复
5
fuqiang4343|  楼主 | 2014-10-10 08:44 | 只看该作者
grant_jx 发表于 2014-10-9 21:29
1、在COMSIC下,开一个数组,将你的数据作为数组申明,同时定义不可优化 和Const属性,类型前加上强制地址 ...

好的,谢谢,我试一下

使用特权

评论回复
6
fuqiang4343|  楼主 | 2014-10-10 09:42 | 只看该作者
grant_jx 发表于 2014-10-9 21:29
1、在COMSIC下,开一个数组,将你的数据作为数组申明,同时定义不可优化 和Const属性,类型前加上强制地址 ...

COMSIC是否就是ST Visual Develop编译器,小弟不才没理解“类型前加上强制地址指针 @Flash 地址”这句话的意思,能否举例说明下

使用特权

评论回复
7
grant_jx| | 2014-10-10 09:57 | 只看该作者
ST Visual Develop只是ST 8bit单片机的通用集成开发环境,仅自带汇编编译器。COSMIC是其支持外部扩展的C编译器的一种。

上面我说的是绝对地址的一种申明方式,其实你已经在使用这种方式,不过是没注意而已。在COSMIC的C Language Manual文档里有这样的说明的。
Absolute Addressing
The COSMIC compiler allows an object to be declared along with its
address when it is known at compile time (I/O registers). The address is
specified just after the declaration and is replacing the initialization
part. It is prefixed by the @ character:
volatile char PORTB @0x10;
Such a declaration is in fact equivalent to an extern declaration so it is
not possible to initialize such a variable. This can also be applied to a
function declaration if such a function already exists at a known address
in the application. This cannot be used to locate a function defined in
the application at a predefined address.
A bit variable can also be declared at an absolute location by defining
its byte address followed by a colon character and the bit position:
_Bool PB3 @0x10:3
or, if the variable PORTB has been previously declared as before:
_Bool PB3 @PORTB:3

最典型的就是硬件寄存器的申明了。不过它们的地址都是RAM中,如果你要申明的地址是在Flash的话,要使用 code/const 类型。

使用特权

评论回复
8
fuqiang4343|  楼主 | 2014-10-10 10:28 | 只看该作者
本帖最后由 fuqiang4343 于 2014-10-10 10:32 编辑

我试过volatile const char Number @0x8100;只是将Number地址设为0x8100,
0x8100这个地址还是被程序所用,不能用于滚码烧录

使用特权

评论回复
9
fuqiang4343|  楼主 | 2014-10-10 10:35 | 只看该作者
我现在做法是定义FLASH数组 volatile const char Number[2] = {0, 1};
然后将数组地址读出 Number_address = (unsigned int)&Number;
滚码烧录时修改读出的地址,我怕以后修改程序后数组地址会变,引起不必要的麻烦,所以想将数组地址固定

使用特权

评论回复
10
a2b3c4ddd| | 2014-10-10 20:40 | 只看该作者
提供一种方式:通过修改链接文件,将你要放数据的那块剃除出来,再用楼上说的方式。另一个是下载的时候要选择,只擦除所用的块

使用特权

评论回复
11
hwwss| | 2014-10-10 22:00 | 只看该作者
找我们,必须用烧录器,我们提供这种功能的烧录器,q q 2247627868

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:本人什么都会!就两样不会,这也不会那也不会。

5

主题

35

帖子

1

粉丝