搜索
bottom↓
回复: 10

【经验分享】KL25在IAR中将函数指定到flash地址

[复制链接]

出0入0汤圆

发表于 2014-8-7 17:08:59 | 显示全部楼层 |阅读模式
【经验分享】KL25在IAR中将函数指定到flash地址
一,        经验分享描述
          在之前的经验分享中写了些在KE02下,CW,IAR以及keil的编译环境中,如何定义constant到指定的flash地址。但是实际上,大家在使用我们kinetis的过程中,可能也希望能够灵活的将某个函数直接定义到指定的flash地址,这样,如果改变这个函数,实际上,只需要改变函数所在的flash,而不需要更新所有的flash。所以,为了方便大家操作,我们论坛里已经推出了在CW下,如何指定函数到具体的flash地址,本文就讲解下,在IAR的环境下如何实现指定函数到具体的flash地址。
二,        经验分享IAR环境下实现
1.在.icf文件中定义函数要存放的地址
可以使用如下格式定义这个地址:
place at address mem:(flash地址) { readonly section .(段名) };
例如,在本次试验中,希望将函数定义到flash地址:0x0001E000这个地址,靠近flash空间的尾部。
实际我们的定义如下图:

当然,实际上也可以定义为:
place at address mem: 0x0001e000 { readonly section .funflash };
2.    在主函数中定义函数
接下来要做的就是将所定义的函数放到1里面所定义的flash地址段中。
举例定义如下:
char funcInROM(int flag) @ ".funflash"
{
        if (flag > 0)
        {
            return 1;
        }
        return 0;
}
此时,这个函数就直接放到了0x001e000地址。
3,测试结果
        本次试验的平台是FRDM_KL25,所使用的IAR平台版本为:7.20.2。代码修改是基于KL25_SC的platinum工程上修改的。
测试结果分两部分进行,第一部分是在进入debug的状态下,查看memory。
第二部分是在生成的hex文件中查看。
        在测试之前,首先讲一下IARhex文件生成配置,以及hex文件格式。
(1) IAR环境下hex生成配置
           在工程中选择option-> output converter,勾选generate additional output,选择output format为intel extended,然后勾选overidde default,写入你要生成的hex文件名,点击ok。如下图:

(2)hex文件格式
文件格式为:
起始符“:”        数据长度(1B)        存储地址(2B)        数据类型(1B)        数据(16B)        校验码(1B)

这里举个例子:
       :1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:  :表示一行的开始
10:表示这一行包含的数据长度,一个字节
00C0:表示存储的地址,两个字节,这里是在flash的地址0x000000c0.
00:表示数据类型,一个字节,00为数据记录;01文件结束记录;02扩展段地址记录;04扩展线性地址记录。
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:代表具体的数据,这里数据都是FF,16个字节。数据的存储是高位地址在前,低位地址在后。
40:表示校验码,一个字节。校验码是0x100-这一行数据总和的低字节,然后取低一个字节。

(3)debug 的memory查看测试
进入debug后,调出memory窗口,方法为:view->memory, 然后在goto中输入要查询的flash地址:0x0001e000,然后按下enter键。结果如下:
      
可以看到在0x0001e000这个地址的数据为:
0001b500 db012901 e0002001 bd002000

(4)查看对应的hex文件。
编译工程之后,Hex文件在工程的build\iar\platinum\FLASH_128KB\Exe中,打开后可以看到具体的hex内容,找到地址为E000的地方,可以看到结果如下:




即结果为:
00B50100 012901DB 012000E0 002000BD
和窗口memory中的数据:
0001b500 db012901 e0002001 bd002000
相比hex的数据正好是高位地址在前,低位地址在后。
其实这一串数据就是上面定义的char funcInROM(int flag)的十六进制码,可以看到确实是在我们指定的flash地址中,实现了IAR环境下,函数的flash地址指定。


三,        附件
附件提供了本文的PDF,以及测试代码。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-8-7 17:10:44 | 显示全部楼层
CW下指定函数到flash地址的链接是这个:http://www.amobbs.com/thread-5569768-1-1.html
不足之处,欢迎大家指正。
后续争取再出一篇keil下的。

出0入0汤圆

发表于 2014-8-7 17:46:36 | 显示全部楼层
感谢楼主分享,讲的很详细啊。
希望后面再推出keil的

出0入0汤圆

发表于 2014-8-7 18:09:11 | 显示全部楼层
挺好,现在飞思卡尔分论坛挺缺这种经验分享帖的

出0入0汤圆

发表于 2014-8-8 09:15:59 | 显示全部楼层
这个好,学习了

出0入0汤圆

 楼主| 发表于 2014-8-8 09:21:25 | 显示全部楼层
lzl000 发表于 2014-8-7 18:09
挺好,现在飞思卡尔分论坛挺缺这种经验分享帖的

后面还想写个keil的,这样我们产品目前用的三个常用编译器,函数flash位置指定的问题解决方案就都有了。
你们如果感兴趣哪些方面的问题,也可以和我讲,这样我以后写经验分享也会尽量往这边靠,写你们需要的。

出0入0汤圆

发表于 2014-9-26 14:18:23 | 显示全部楼层
实用贴,顶了!               

出0入0汤圆

发表于 2014-9-26 14:28:04 | 显示全部楼层

出0入13汤圆

发表于 2015-3-24 07:13:21 来自手机 | 显示全部楼层
学习了,有空试试

出0入0汤圆

发表于 2015-5-7 16:54:58 | 显示全部楼层
感谢楼主分享,讲的很详细
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 20:59

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

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