我看了一下ble的ota 的app代碼,其中LD配置為
FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 216K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
三個(gè)區(qū)域放滿了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
那重點(diǎn)問題來了 ,LD中配置的是64K,那falsh只有448K才對(duì)呀,這個(gè)OTA_DATAFLASH_ADD的位置不是超出448K了嗎
因?yàn)槲遗渲玫氖?4K的RAM那從下圖中看,可變映射區(qū)確實(shí)是RAM,那flash就是最大448K,0x08077000這個(gè)位置理論上是越界了呀
/* 存放在DataFlash地址,不能占用藍(lán)牙的位置 */
#define OTA_DATAFLASH_ADD? ? ? 0x08077000