关于MDK绝对定位问题

2019-12-21 12:11发布

哥哥最近在玩STM32,编译器呢,IAR和MDK同时用,一直在比较两个编译器的优缺点。
今天在做把数据绝对定位到Flash中的问题,IAR和MDK都定位成功,且都比较方便,如下:

#if defined ( __CC_ARM   )      // MDK
const uint8_t Test_flash[] __attribute__((at(0x08030000))) = "Test Flash";
const uint32_t Test_Addr __attribute__((at(0x08030010))) = 0x12345678;
#elif defined ( __ICCARM__ )    // IAR
const uint8_t Test_flash[] @ 0x08030000 = "Test Flash";
const uint32_t Test_Addr @ 0x08030010 = 0x12345678;
#else
const uint8_t Test_flash[] = "Test Flash";
const uint32_t Test_Addr = 0x12345678;
#endif

我用的STM32F107VC,有256K的flash,而现在的测试程序10K左右。
IAR会很干脆的将我要定位的数据放到指定的位置,中间空白的地方保持0xFF;
而MDK则不干脆,在0x08030000附近,还有程序的其它const数据放进去了。
这还不是最重要的,最重要的是主程序和0x08030000之间的数据都清成ix00了。
这会导致两个问题,第一个问题是:我编译完毕后看到的信息,flash是很大很大的(本质是包括了那些0x00);
第二个问题是,我下载程序需要的时间长很多。

我的问题是:有没有办法让MDK不做这个中间数据不清零的动作?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
JESTER9
1楼-- · 2019-12-23 03:16
学习中
styleno1
2楼-- · 2019-12-23 05:03
Louis_Bright 发表于 2013-4-11 13:39
自己顶起来,网上搜了一圈没看到相关描述,在MDK自带的帮助文档中也没有找到(应该有才对,但帮助文档太庞 ...

官方文档没有提及,但从scatter文件出发,一个输出段应该从起始到最后,即使中间是空的,这样增大RO-data似乎就没那么奇怪了。
32MCU
3楼-- · 2019-12-23 10:47
标记!!!
jobwork
4楼-- · 2019-12-23 15:43
 精彩回答 2  元偷偷看……
464839941xql
5楼-- · 2019-12-23 20:36
mark
yan716
6楼-- · 2019-12-24 02:08
在玩儿STM32,MARK一下说不定能用到

一周热门 更多>