kekele 发表于 2011-1-23 15:14:57

IAR FOR ARM 关于运行时修改FLASH数据的问题

论坛的各位大神么,请教个问题。
我在程序初始化时,在FLASH 定义一个数组,
在.ICF中定义
place at address mem:0x08002000 { ro section .ImageTest };

在主函数里
__root const unsigned char vSetRate_pre @".ImageTest" =
{
    1,2,3
};
我想在运行时改变 vSetRate_pre数组内容并保存到FLASH中,掉电后开机,就是改变后的数组内容。
怎么能实现这个功能,请高手指教!
~~~





先谢谢大伙了!~


难道这个问题很难?
或者是我的思路错了?

tyou 发表于 2011-1-24 01:39:36

IAP先到sram中,然后写入一个page

kekele 发表于 2011-1-29 16:27:17

我补充一下。
你可以在片内flash中高地址划出一段空间做数据保存,例如片内flash对应地址0x00000000-0x00007FFF这样有32k如果你的程序代码是20k,那你还有高12k可以用。对这12k操作,建议如果你需要5k那你可以高地址中选一段。最简单的是用memcpy()这个C函数,怎么用你去查C的标准库里有,可直接对地址操作,即把某地址开始的一段数据整个半到某地址开始处,所以就是在arm上电重映射后你要看手册他个外设内部flash,sram等对应的地址,在程序中假如你通过串口收到数据在RAM中,那取这段数据首地址和长度把它用memcpy()存到flash之前说的那5k的首地址开始往后该长度存放。记住重映射后对应的地址,不同处理器有不一样。
还有一种方法我不会,在启动代码里划分flash,这是一种最根本的方法,难度是要研究启动代码,这需要非常熟悉开发环境如ADS,IAR的手册对启动代码的配置,和对目标处理器的启动的熟悉。

我不会再启动代码中划分flash,我用的是IAR FOR ARM .有用过的高人请不吝赐教。在此先谢了。

Austin_Hsu 发表于 2011-6-5 13:02:38

回复【2楼】kekele
我补充一下。
你可以在片内flash中高地址划出一段空间做数据保存,例如片内flash对应地址0x00000000-0x00007fff这样有32k如果你的程序代码是20k,那你还有高12k可以用。对这12k操作,建议如果你需要5k那你可以高地址中选一段。最简单的是用memcpy()这个c函数,怎么用你去查c的标准库里有,可直接对地址操作,即把某地址开始的一段数据整个半到某地址开始处,所以就是在arm上电重映射后你要看手册他个外设内部flash,sram等对应的地址,在程序中假如你通过串口收到数据在ram中,那取这段数据首地址和长度把它用memcpy()存到flash之前说的那5k的首地址开始往后该长度存放。记住重映射后对应的地址,不同处理器有不一样。
还有一种方法我不会,在启动代码里划分flash,这是一种最根本的方法,难度是要研究启动代码,这需要非常熟悉开发环境如ads,iar的手册对......
-----------------------------------------------------------------------

我回答一下。
在STM32F103xE片上FLASH中划分SECTION的代码示例如下:

define region PIC_region   = mem:; // 将FLASH 512kB空间中最后的307200个字节的空间用来存放一张480x320的图片
place in PIC_region   { section DemoPic};                        // 定义划分段

为防止发生错误,前面由IAR生成的定义量应该修改
define symbol __ICFEDIT_region_ROM_end__   = 0x08034FFFF; // 0x807FFFF;   // 为避免IAR编译时将程序段放到末尾307200字节中,将程序ROM段地址与图片存储空间重合的部分去掉。

Silent_Higher 发表于 2012-3-9 21:03:24

回复【3楼】Austin_Hsu
-----------------------------------------------------------------------

我想再问下

请问如何在IAR上的Debug或Release处设置成 Flash 或 RAM等格式啊?本来想截下图的,可是不知为什么传不上去,所以只能这么讲了。如哪位好心人想帮我但不明白的 请加我QQ :1634779959我详细说明下! 在此, 小生,先谢过了!

liubinghui 发表于 2012-12-22 16:44:48

我用怎么报错。Error: "mem" must be either a memory name or a region name
页: [1]
查看完整版本: IAR FOR ARM 关于运行时修改FLASH数据的问题