CH58x BackupUpgrade_OTA内存只给18K问题

1、编译BackupUpgrade_OTA

搜狗截图20211111163530.jpg

如上如编译结果所示,内存已占用94%还剩余1100字节,对于我的工程来说是远远不够的。


2、我修改了一下Link.ld文件   RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K

3、编译是通过了

搜狗截图20211111164107.jpg

但是确无法合并固件,提示无效的HEX文件!

搜狗截图20211111164302.jpg

4、改回Link.ld,注释部分代码使已用ram小于18K,可以编译通过且可以合并固件。

请问CH58x BackupUpgrade_OTA官方工程例子 内存为什么只给18K?是否可以增加到全部的32K?

这个是写错了,明天更新。

image.png
上图一起改就行了。


按上图改了,但是合并固件的时候还是提示无效的HEX文件。


image.png
改了以后要重新编译

image.png

这个3个文件都要改


测试了一下,发现应该是AssemblingFileTool这个工具有问题,该工具无法转换超过一定大小的hex文件

请按以下操作,应该能复现。

1、用官方的BackupUpgrade_OTA例子,先不做任何改变,编译且转换成bin没问题

2、在peripheralmain.c文件中定义数组

u8 test_code[4];

在int main( void )函数中,Main_Circulation();前面加入以下代码

uint32 i;
  for (i = 0; i < 4; ++i) {
      test_code[i] = i;
  }
  test_func();

定义函数

void test_func() {
    uint8 i=0;
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
    for(i=0;i<2;i++) PRINT("STR arry:%x\n", test_code[i]);
   //一直重复
   //一直重复
}

重复增加那一行,直到编译后的FALSH大于187852 B(大概在这个位置)

image.png

3、用AssemblingFileTool工具去转换HEX文件,报错:无效的HEX文件。

4、减小代码量,使编译后的FALSH小于187852 B(大概在这个位置),工具又可以转换HEX文件了。



咨询了技术,是工具的问题

推荐用下面的工具合并固件

https://gitee.com/iot-fan/iot-fan_at_cnblogs/tree/master/Tools/hex_tools



刚好遇到这个问题 插旗


工具已经更新,留个邮箱可以先发给你。
下次会随着EVT一块更新。


麻烦发一份 个人信息保护,已隐藏  谢谢!!!


只有登录才能回复,可以选择微信账号登录