由于引导加载程序和一些位于应用程序地址之前的配置数据,我的应用程序有一个偏移。当我调试没有引导加载程序的应用程序时,我只有占用一个flash页(0x800)的配置数据的偏移量,因此应用程序位于0x08000800。
我的链接器脚本以及我的矢量标签偏移量已相应配置。
LD_DEVICE_SIZE = 512K;
LD_DEVICE_START = 0x08000000;
LD_BOOTLOADER_START = LD_DEVICE_START;
LD_BOOTLOADER_SIZE = 0x8000;
LD_MFG_DATA_START = LD_DEVICE_START;
LD_MFG_DATA_SIZE = 0x800;
LD_APP_START = LD_DEVICE_START + LD_MFG_DATA_SIZE;
LD_APP_SIZE = LD_DEVICE_SIZE - LD_MFG_DATA_SIZE;
LD_FLASH_START = LD_APP_START;
LD_FLASH_SIZE = LD_APP_SIZE;
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 160K
RAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = 32K
MFGDATA (rx) : ORIGIN = LD_MFG_DATA_START, LENGTH = LD_MFG_DATA_SIZE
FLASH (rx) : ORIGIN = LD_FLASH_START, LENGTH = LD_FLASH_SIZE
}
和
#ifdef DEBUG
#define VECT_TAB_BASE_ADDRESS FLASH_BASE
#define VECT_TAB_OFFSET LD_MFG_DATA_SIZE
#else
#define VECT_TAB_BASE_ADDRESS FLASH_BASE
#define VECT_TAB_OFFSET LD_BOOTLOADER_SIZE + LD_MFG_DATA_SIZE
#endif
我无法使用此偏移量调试应用程序。我可以进入调试模式,但当我恢复时,调试器终止。
我正在看&;startup &;在"调试配置"中,试图更改"设置程序计数器"。以及"设置向量表"。但这也行不通。我也不确定这些值是否应该来自0x00000000或0x08000000。
如何在偏移量处调试应用程序?
您在链接器脚本中的定义不一致。您已将LD_BOOTLOADER_START
和LD_MFG_DATA_START
设置为相同的值。
我建议你设置:
LD_BOOTLOADER_START = LD_DEVICE_START;
LD_BOOTLOADER_SIZE = 0x8000;
LD_MFG_DATA_START = LD_DEVICE_START + LD_BOOTLOADER_SIZE;
LD_MFG_DATA_SIZE = 0x800;
LD_APP_START = LD_DEVICE_START + LD_BOOTLOADER_SIZE + LD_MFG_DATA_SIZE;
LD_APP_SIZE = LD_DEVICE_SIZE - (LD_BOOTLOADER_SIZE + LD_MFG_DATA_SIZE);
那么你所需要做的就是将LD_BOOTLOADER_SIZE
设置为零或非零,在调试和非调试之间进行选择。
另外,您还需要始终在包含操作符的宏定义周围放置父级:
#define VECT_TAB_OFFSET (LD_BOOTLOADER_SIZE + LD_MFG_DATA_SIZE)
这可能不是你调试经验的全部问题,但这将是一个正确方向的开始。