在FLASH中固定位置存入数据

方法二:先在程序中定义一个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,并修改为:
LR_IROM1 0x00000000 0x00040000  {  ; load region
  ER_IROM1 0x00000000  {       ; load address = execution address
   *.o (RESET, +First)
   }
   ER_IROM2 0x000001fc FIXED
   {
    *.o (encrypt)
   }
   ER_IROM3 0x200 FIXED
   {
   * (+RO)
  }
  RW_IRAM1 0x40000000 0x00004000  {  ; RW data
   * (+RW +ZI)
  }
}
然后,修改设置
http://bbs.21ic.com/upfiles/img/2006724114655201.jpg

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值