你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

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

举报

5个回答
小小超 回答时间:2020-7-4 15:40:20
充满有什么意义?加密用还是?用 winhex打开烧写文件,喜欢怎么填充都行,而且还快。
废鱼 回答时间:2020-7-4 16:29:06
烧录文件占用FLASH容量变大?楼主想做什么?大家都是在压缩代码。楼主最好说出你的想法,大家才能帮你出更合适的方案。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

奏奏奏 回答时间: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)部分,不管其功能。让上位机去升级最大空间的这个代码文件,不就可以测试烧录时间了么。至于填充方式,大部分烧录软件都有,设置好起始地址就可以了

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

DavidTan 回答时间:2020-7-17 11:18:27
你可以在代码里定义一个静态变量,把这个变量分配到固定的flash位置,例如438k这个位置

以下是网上搜到的,不保证完全正确,参考一下
1、定义一个数组比如value[],让数组的首地址指向特定的SRAM地址,比如0x20000100
1)__align(8) uint8_t value[20] __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蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版