飞锐泰克 发表于 2014-9-24 14:38:01

【cw10.x使用分享】将变量定义在指定地址

用codewarrior(eclipse)调试Kinetis时,如何将某个变量定义在指定的地址上呢?

下面以codewarrior10.3调试KL05Z32为例说明,将变量放到0x900和0x20000000上。
1,修改连接文件

http://www.myhcs08.com/php/attachment/diary/Mon_1310/84343_b5f01b239a4c492.png

我的连接文件名字为MKL05Z32_flash.ld
在该文件中添加如下内容:
.myBufBlock 0x20000000 :{    KEEP(*(.myBufSection)) /* keep my variable even if not referenced */} > m_data.myRomBlock 0x900:{    KEEP(*(.myRomSection)) /* keep my variable even if not referenced */} > m_text
2,定义我们的变量
在main.c中添加如下代码:
unsigned char __attribute__((section (".myBufSection"))) buf;unsigned char __attribute__((section (".myRomSection"))) Data={0x68,0x89,065,};unsigned char __attribute__((section (".myRomSection"))) Data2={0x68,0x89,065,};

3,编译工程
4,查看map文件

http://www.myhcs08.com/php/attachment/diary/Mon_1310/84343_d1ce58aaa971ceb.jpg

从map文件看,变量被我们放到了指定的地址处。

工程下载地址:http://www.myhcs08.com/downloads.php?file_id=299


32MCU 发表于 2014-9-24 15:11:04

收藏.顶一下!

zndz410 发表于 2014-9-24 16:31:56

楼主这个经验好,又学习了一招。但是常量可以保存到指定地址吗?

mcucow 发表于 2014-9-26 12:50:13

变量定义在指定地址, 有什么应用的好处? 或者说能达到什么目的。

fengyunyu 发表于 2014-9-26 13:48:56

mcucow 发表于 2014-9-26 12:50
变量定义在指定地址, 有什么应用的好处? 或者说能达到什么目的。

变量定义在指定地址,可以用来判断复位原因等。函数定义在指定地址,做自升级的时候有用到。

mcucow 发表于 2014-9-27 14:42:47

fengyunyu 发表于 2014-9-26 13:48
变量定义在指定地址,可以用来判断复位原因等。函数定义在指定地址,做自升级的时候有用到。 ...

谢谢 学习了
自升级没玩过 有机会试试看
不过复位原因 是不是还可以借助写EEPROM 或一步一步调试
页: [1]
查看完整版本: 【cw10.x使用分享】将变量定义在指定地址