公司有要求,所有MCU必须支持升级,,CH32V203c8t6我APP中用的USB库,使用U盘读取文件给另一个MCU升级,,所以APP已经占用了53K的rom,,现在要使用bootloader用USB读取U盘给ch32v203c8t6自己升级,,但是因为要用USB库,,也会占用20K的rom,,ch32v203c8t6只有64K的rom,,使用正常的bootloader+app的双区方式20K+53K大于64K不行,,,rom不够用,因为加载了两次USB库,现在的想法只能使用一次USB库,,用跳转到地址执行,请问有没有这方面的例程???中断向量表重定向
您好,根据你的应用情况,可将MCU的FLASH分为三块区域:FLASH1、FLASH2、FLASH3,其中IAP程序放在FLASH1区域,APP程序放在FLASH2区域,IAP和APP共用的USB库放在FLASH3区域,其中IAP和APP程序在使用时都会用到FLASH3区域的USB库文件,整体就是这么一个思路。附件为参考该模式写的IAP和APP例程,可以简单参考一下,主要需要注意一下ld文件中关于FLASH的分配。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通
这个方法如何保证USB库在IAP编译的时候跟APP编译的时候,函数的入口地址是一样的?按理说链接的时候只保留用到的函数。IAP跟APP可能使用的不一样。
搞不定啊,,你给我的代码直接编译都通不过,,
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 12K
FLASH1 (rx) : ORIGIN = 0x0000D800, LENGTH = 10K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
HOST_IAP.elf section `.text' will not fit in region `FLASH',,,,,,,,,
HOST_IAP.elf section `.text' will not fit in region `FLASH1',,,,,,,,
region `FLASH' overflowed by 460 bytes,,,,,,,,,
region `FLASH1' overflowed by 8892 bytes
没有类似于IAR的那种分散链接吗?两个向量表,,可以把bootloader与app,,做成一个工程,,你这个方法,,感觉不靠谱啊,,,,,
编译通过了,,,我再研究研究,,您也帮忙看看,,,那种两个向量表,,可以把bootloader与app,,做成一个工程的方法
好了,不需要折腾了,,我优化了一下编译文件,没用的文件不编译了,,,flash空间腾出了20KB,,谢谢了
您好,关于提供的例程,后面测试了一下,确实存在一些问题,针对这类应用,这边会再看看是否有好的解决方法