搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2011-1-23 15:14:57 | 显示全部楼层 |阅读模式
论坛的各位大神么,请教个问题。
我在程序初始化时,在FLASH 定义一个数组,
在.ICF中定义
place at address mem:0x08002000 { ro section .ImageTest };

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





先谢谢大伙了!~


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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-1-24 01:39:36 | 显示全部楼层
IAP  先到sram中,然后写入一个page

出0入0汤圆

 楼主| 发表于 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 .有用过的高人请不吝赐教。在此先谢了。

出0入0汤圆

发表于 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:[from 0x08035000 size 0x4B000]; // 将FLASH 512kB空间中最后的307200个字节的空间用来存放一张480x320的图片
place in PIC_region   { section DemoPic};                        // 定义划分段

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

出0入0汤圆

发表于 2012-3-9 21:03:24 | 显示全部楼层
回复【3楼】Austin_Hsu  
-----------------------------------------------------------------------

我想再问下

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

出0入0汤圆

发表于 2012-12-22 16:44:48 | 显示全部楼层
我用怎么报错。Error[Lc020]: "mem" must be either a memory name or a region name
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表