器件型号: MSPM0C1105
define FLASH_STARTUP_ADDRESS 0x00000000U
Can we use the definitons from the linker file rather than hardcoding address here
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号: MSPM0C1105
define FLASH_STARTUP_ADDRESS 0x00000000U
Can we use the definitons from the linker file rather than hardcoding address here
你好、Santhosh、
您能提供更多背景信息吗? 我不确定我是否完全理解您的要求。 您认为是否可以将定义用作 MEMORY 指令内的值?
MEMORY
{
FLASH (RX) : origin = 0x00000000, length = 0x0000FFF8
SRAM (RWX) : origin = 0x20000000, length = 0x00001000
BCR_CONFIG (R) : origin = 0x41C00000, length = 0x000000FF
BSL_CONFIG (R) : origin = 0x41C00100, length = 0x00000080
}
此致、
Owen
你好、Santhosh、
链接器文件中没有可 在 C 文件中使用的原点和长度定义。 对这些定义进行硬编码可能是最佳选择、因为在开发过程中很少更改内存布局、并且需要对项目进行最少的更改。
如果要在链接器文件中创建定义、仍需要对其进行硬编码。 此外、您必须在.syscfg 文件中禁用链接器文件生成、以便在构建工程时不会擦除这些定义。 我个人不会推荐这里。 但是、如果要遵循此方法、下面是一个需要添加到链接器文件中的示例:
__FLASH_START = 0x00000000; __FLASH_END = 0x0000FFF7; /* 0x00000000 + 0x0000FFF8 - 1 */ __FLASH_SIZE = 0x0000FFF8; __SRAM_START = 0x20000000; __SRAM_END = 0x20000FFF; /* 0x20000000 + 0x00001000 - 1 */ __SRAM_SIZE = 0x00001000;
用户需要制作链接器文件的副本并将其移动到 Debug 文件夹之外。
构建时、您可以在.map 文件中观察全局符号。 然后、您可以在 C 文件中访问它们、如下所示:
extern const uint32_t __FLASH_START; extern const uint32_t __FLASH_END; extern const uint32_t __FLASH_SIZE; extern const uint32_t __SRAM_START; extern const uint32_t __SRAM_END; extern const uint32_t __SRAM_SIZE; #define FLASH_STARTING_ADDRESS ((uint32_t)&__FLASH_START) // 0x00000000 #define FLASH_ENDING_ADDRESS ((uint32_t)&__FLASH_END) // 0x0000FFF7
如您所见、这比对.c 或.h 文件中的定义进行硬编码要做得多。
此致、
Owen
你好、Santhosh、
我理解对于“全局变量“的混淆、但链接器符号与常规全局变量有着根本的不同。
外部声明不会创建全局变量。 它们告诉编译器如何访问链接器创建的符号。 这是所有嵌入式系统中使用的业界认可的标准方法。
没有其他方法可以访问 C 代码中由链接器定义的存储器区域。
您不想使用硬码定义的原因是什么吗? 这基本上是可维护的、就像在链接器文件中定义符号一样。
此致、
Owen