首先肯定是因为内存问题导致的,如下:
#define AC_SW_VERSION_SIZE 10
#pragma DATA_SECTION(_AC_SOFTWARE_VERSION, ".APP_VER")
#pragma RETAIN(_AC_SOFTWARE_VERSION)
const unsigned char _AC_SOFTWARE_VERSION[AC_SW_VERSION_SIZE] = "01.01-V01"; // AC software version
#pragma DATA_SECTION(_AC_IDENTIFIER, ".APP_IDENT")
#pragma RETAIN(_AC_IDENTIFIER)
const unsigned char _AC_IDENTIFIER[30] = "AnesthesiaComputer_TAIHU";
定义了 _AC_SOFTWARE_VERSION 和 _AC_IDENTIFIER 数组是在物理内存的指定地址,但是需要在 HL_sys_link.cmd 相关的cmd文件中指定,如下:
MEMORY
{
VECTORS (X) : origin=APP_START_ADDRESS length=0x00000020
CRC (RX) : origin=(0x00000020 + APP_START_ADDRESS) length=0x00000080
KERNEL (RX) : origin=(0x000000A0 + APP_START_ADDRESS) length=0x00008000
SYSINFO (RX) : origin=(0x000080A0 + APP_START_ADDRESS) length=0x000000E0
FLASH0 (RX) : origin=(0x00008180 + APP_START_ADDRESS) length=0x001F7E80
FLASH1 (RX) : origin=(0x00200000 + APP_START_ADDRESS) length=(0x00200000 - APP_START_ADDRESS)
STACKS (RW) : origin=0x08000000 length=0x00012400
KRAM (RW) : origin=0x08012400 length=0x00000800
RAM (RW) : origin=(0x08012400+0x00000800) length=(0x0006dc00 - 0x00000800)
/* USER CODE BEGIN (2) */
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
GROUP > SYSINFO
{
.APP_VER
.APP_IDENT
}
/* USER CODE END */
就是因为一开始,没有在cmd文件中指定好相应数组的物理地址位置,所以已进入就会导致MCU跑到Data Entry的字段。