OTA的APP程序keil的ROM起始地址设置问题
单片机型号:STC32G12K128。ISP烧写工具EEPROM空间配置范围1K-128K。
按照官方的OTA教程,APP程序ROM空间起始地址是0xFE0000,大小是0x20000,一共128K。
而用户的ISP程序使用0xFF0000-0xFF1000的地址空间,虽然和APP程序重合了地址,但是可以通过设置让keil编译器在编译的时候跳过这个地址范围。因此是没有问题的!
但是有个问题:
如果用户在程序中需要使用EEPROM,比如说设置1K或者2K的空间,那么需要修改APP程序的起始地址吧?一般是修改起始地址?当然也可以通过设置keil不编译的地址范围来控制,但是按照起始地址设置是最方便的!
因为默认的EEPROM起始地址是从0xFE0000开始,1K空间就是到0xFE0400,2K就是0xFE0800。
所以如果APP程序依然想要专门的EEPROM空间,那么在keil中,ROM的起始地址就不应该是0xFE0000吧?应该根据需要的EEPROM空间来设计?
虽然ISP烧写工具里面烧写ISP程序时需要配置EEPROM空间是128K,但这种设置是为了用户自己烧写APP程序而做的选择!而特定于用户需要的EEPROM空间,则APP程序中应该偏移首地址?
比如说将官方的APP首地址从0xFE0000偏移到0xFE0400,大小从0x20000改为0x1FC00。则此时预留了1K的EEPROM空间,可以防止APP程序在接近124K(128-4)时占用EEPROM的空间!或者编译器在编译的时候占用了EEPROM的空间!
当然了对于已经设置了128K都是EEPROM空间来说,任意地址都可以做IAP编程,但是设置起始地址+固定空间=是最方便的!
请问我的理解对吗?
可能为
设置EEPROM大小
APP首地址 = APP原地址 + EEPROM大小 狂热主宰 发表于 2026-4-20 11:13
可能为
设置EEPROM大小
APP首地址 = APP原地址 + EEPROM大小
我也是这样觉得 还有个问题:STC32G12K128的ROM一共是128K,如果程序实际空间小于128K,多余的空间会被填充为0xFF吧?那么这里的0xFF烧写工具检测到之后是可以选择跳过不烧写吧?只烧写非0xFF的地址数据? 水水水木木木 发表于 2026-4-21 09:43
还有个问题:STC32G12K128的ROM一共是128K,如果程序实际空间小于128K,多余的空间会被填充为0xFF吧?那么 ...
具体得看手册描述
数据可能为随机数据
可能数据在ROM中按照固定的地址存放
存储器可支持读写x万次
部分烧录工具有擦除的功能 结贴。让后来者阅读。
首先我的理解没问题。其次FF区域最好擦除,使用了哪一块区域就擦除哪一块区域。
页:
[1]