加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在FLASH中固定位置存入数据

发布时间:2020-12-15 07:16:43 所属栏目:百科 来源:网络整理
导读:方法二:先在程序中定义一个const? 类型的常量数组,并指定其存储位置(方便找到写入、读取位置),这样编译器就会分配你指定的空间将常量数组存入FLASH中。当你做擦除。读写操作时,只要在这个常量数组所在的地址范围就好。 const? uint8_t? table[10]? __a
方法二:先在程序中定义一个const?类型的常量数组,并指定其存储位置(方便找到写入、读取位置),这样编译器就会分配你指定的空间将常量数组存入FLASH中。当你做擦除。读写操作时,只要在这个常量数组所在的地址范围就好。

  const?uint8_t?table[10]?__at(0x08010000)?=?{0x55}?;   MDK3.03A开始就支持关键字?__at()?   需要加#include? 方法三:在程序中定义一个const?类型的常量数组,无需指定其存储位置。只要定义一个32位的变量存储这个数组的FLASH区地址就行。   uint32_t?address;//STM32的地址是32位的   const?uint8_t?imageBuffer[1024]?=?{0,1,2,3,4,5,6,7};

  address?=?(uint32_t)?imageBuffer;



方法二只能用在CARM编译器上,目前KEIL默认不支持。 RV下可以用以下方法来支持:

RV下绝对定位可以利用scatter做到
以RV的hello例子烧录0x1fc的0x87654321加密位为例
首先在hello.c中加入

const int????encrypt __attribute__((section("encrypt")))= 0x87654320;

其次修改scatter file
UV3会自动产生一个scatter file,默认位于 你的工程目录ojb你的工程名字.sct
可以在这个文件的基础上修改:
原来的hello.sct的内容

LR_IROM1 0x00000000 0x00040000??{??; load region
??ER_IROM1 0x00000000??{???????; load address = execution address
???*.o (RESET,+First)
???* (+RO)
??}
??RW_IRAM1 0x40000000 0x00004000??{??; RW data
???* (+RW +ZI)
}
另存为hello1.sct,并修改为:
???}
???ER_IROM2 0x000001fc FIXED
???{
????*.o (encrypt)
???ER_IROM3 0x200 FIXED
然后,修改设置
http://bbs.21ic.com/upfiles/img/2006724114655201.jpg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读