完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
由于从F转到V,keil变为MounRiver,用gcc编译器。原先keil中的定位语句无法使用了。
1、keil在地址0x08005400位置定位一个变量用于存放程序版本号: #define FW_APPVERSION_BASE 0x08005400 const uint16_t FW_wAppVersion __attribute__((at(FW_APPVERSION_BASE))) = VERSION_APP; 改成MounRiver不能这么写了,按照gcc方法改为: const uint16_t FW_wAppVersion __attribute__((section (".myBufSection"))) = VERSION_APP; 然后在连接文件.ld的section段中增加下面红色部分,这样做对吗?好像跑起来程序有问题: SECTIONS { .init : { _sinit = .; . = ALIGN(4); KEEP(*(SORT_NONE(.init))) . = ALIGN(4); _einit = .; } >FLASH AT>FLASH /* placing my named section at given address: */ .myBufBlock 0x00005400 : { KEEP(*(.myBufSection)) /* keep my variable even if not referenced */ } >FLASH AT>FLASH |
|
相关推荐
2个回答
|
|
|
你好,可按照上图定义,代码如下: .flag : { . = ORIGIN(FLASH) + 0x800; KEEP(*(SORT_NONE(.myBufSection))) }>FLASH AT>FLASH 测试如下: 定义了一个dat_test变量,放在0x800位置。 |
|
|
|
|
|
谢谢,搞定了,是我傻了,拷贝的时候等号=前面的一个·点忘记拷贝了。 另外有个问题: 我程序有2个常量(uint32_t)在Flash中绝对定位,且两个地址相距比较远,大概有12K左右。用这种方法做的绝对定位,中间12K链接程序直接给你全空了,没有放代码进去,等于这12K白白浪费掉了,剩下空间又不够。KEIL MDK就不会有这情况,C中用at指令绝对定位后,常量与代码可以混合在一起。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
326 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
848 浏览 0 评论
1452 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3413 浏览 2 评论
2820 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1459浏览 1评论
342浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
860浏览 0评论
467浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:07 , Processed in 1.049243 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
847