我看了一下ble的ota 的app代码,其中LD配置为
FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 216K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
三个区域放满了448K (0x08000000 ~ 0x08070000)
/* FLASH定义 */
#define FLASH_PAGE_SIZE 256
#define FLASH_BLOCK_SIZE 4096
#define IMAGE_SIZE 216 * 1024
/* imageIAP定义 */
#define IMAGE_IAP_FLAG 0x03
#define IMAGE_IAP_START_ADD 0x08000000
#define IMAGE_IAP_SIZE 16 * 1024
/* imageA定义 */
#define IMAGE_A_FLAG 0x01
#define IMAGE_A_START_ADD (IMAGE_IAP_START_ADD + IMAGE_IAP_SIZE)
#define IMAGE_A_SIZE IMAGE_SIZE
/* imageB定义 */
#define IMAGE_B_FLAG 0x02
#define IMAGE_B_START_ADD (IMAGE_A_START_ADD + IMAGE_SIZE)
#define IMAGE_B_SIZE IMAGE_SIZE
那重点问题来了 ,LD中配置的是64K,那falsh只有448K才对呀,这个OTA_DATAFLASH_ADD的位置不是超出448K了吗
因为我配置的是64K的RAM那从下图中看,可变映射区确实是RAM,那flash就是最大448K,0x08077000这个位置理论上是越界了呀
/* 存放在DataFlash地址,不能占用蓝牙的位置 */
#define OTA_DATAFLASH_ADD 0x08077000