哥哥最近在玩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不做这个中间数据不清零的动作?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
官方文档没有提及,但从scatter文件出发,一个输出段应该从起始到最后,即使中间是空的,这样增大RO-data似乎就没那么奇怪了。
一周热门 更多>