STM32CubeIDE如何在偏移量处调试代码



由于引导加载程序和一些位于应用程序地址之前的配置数据,我的应用程序有一个偏移。当我调试没有引导加载程序的应用程序时,我只有占用一个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_STARTLD_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)

这可能不是你调试经验的全部问题,但这将是一个正确方向的开始。

相关内容

  • 没有找到相关文章

最新更新