看了这些帖子:
CH573 CH582 OTA例程讲解二(方式二:使用固定库+扩大APP程序空间) - WCH蓝牙应用分享 - 博客园 (cnblogs.com)
CH582OTA升级带图修改流程 - 编程猎人 (programminghunter.com)
蓝牙BLE从机Peripheral讲解七(CH582OTA升级/空中升级使用说明) - SweetTea_lllpc - 博客园 (cnblogs.com)
感觉很繁琐,准备自己在一个工程里把IAP的功能集成进去, 这样就不需要蓝牙断开再连。
第一步,把工程和lib库分开(以Peripheral为例):
增加工程预处理:
LIB_FLASH_BASE_ADDRESSS=0x00040000
CH58xBLE_ROM=1
把OnlyUpdateApp_Peripheral工程的Ld和Startup文件夹拷到自己工程,先在Linked Resources里面把Ld和Startup的link先删掉, 如果编译出错(我一开始报_start找不到),把两个文件夹右键点Include/Exclude from build, 消失后再ctrl+z变回来编译就不报错了。
Link.ld改FLASH大小, RAM大小24K(原始代码是32K):
startup_CH583.S改最后的跳转地址:(不知道为什么要填LIB的地址)
合成文件(编译后工程只有48376B,原来有180K左右,不过算上LIB库,又比不分开大),LIB要选CH48xBLE_ROMx.hex:
USB烧录进去,成功启动