奏奏奏 发表于 2020-7-3 19:51:31

如何快速可控将编译生成的烧录文件占用FLASH容量变大?

因为需要测试STM32做的串口OTA升级功能,
就希望通过修改代码,快速填充满指定的FLASH区域?
是在代码中查表,将表格内的数据反复重复复制粘贴快?
还是弄一个条件判断调用的函数,函数里重复没有实际意义的赋值乘法运算好?
还是大佬们有试过的诀窍可以传授给我?
在这里先谢谢专门点进来看的各位!

ts2000 发表于 2020-7-4 15:40:20

充满有什么意义?加密用还是?用 winhex打开烧写文件,喜欢怎么填充都行,而且还快。

发表于 2020-7-4 16:29:06

烧录文件占用FLASH容量变大?楼主想做什么?大家都是在压缩代码。楼主最好说出你的想法,大家才能帮你出更合适的方案。

奏奏奏 发表于 2020-7-4 17:58:31

我可能没有表述完善
是这样的
OTA升级需要用串口接收升级数据包,
而这些升级数据包是通过上位机读取HEX烧录文件分包传给MCU的,
所以我希望自己写的bootloader跳转后的APP运行程序尽量占用满我分配的FLASH区间(例如分配的是456K字节)
补充贴一下我之前的OTA升级流程图的 帖子会比较能说明:
https://www.stmcu.org.cn/module/forum/thread-621471-1-1.html
用来评估最极限情况下,升级所需要的总时间,在bootloader中设置超时时间,如果超过超时时间还没有完成升级,则重启恢复运行升级前的版本的APP代码

butterflyspring 发表于 2020-7-17 11:10:07

那就把APP部分的HEX文件填满,或者直接填满所有空间(APP)部分,不管其功能。让上位机去升级最大空间的这个代码文件,不就可以测试烧录时间了么。至于填充方式,大部分烧录软件都有,设置好起始地址就可以了

tgw860910 发表于 2020-7-17 11:18:27

你可以在代码里定义一个静态变量,把这个变量分配到固定的flash位置,例如438k这个位置

以下是网上搜到的,不保证完全正确,参考一下
1、定义一个数组比如value[],让数组的首地址指向特定的SRAM地址,比如0x200001001)__align(8) uint8_t value __attribute__((at(0x20000100))); MDK中定义2)int value[] __attribute__((section(".ARM.__at_0x20000100"))) = {0x01, 0x02}; GCC中定义2、指定函数的存放地址void func (void) __attribute__((section(".ARM.__at_0x00000200")));
页: [1]
查看完整版本: 如何快速可控将编译生成的烧录文件占用FLASH容量变大?