STM32
直播中

而无返还

9年用户 1320经验值
擅长:光电显示
私信 关注
[问答]

Keil5提示__segment_end未定义是哪里的问题?

编译后的错误信息如下:

.ObjectsGD_LiteOSTest.axf: Error: L6218E: Undefined symbol __segment_end (referred from los_init.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 1 error messages.
".ObjectsGD_LiteOSTest.axf" - 1 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed:  00:00:01

问题代码在这里:
  #pragma segment="HEAP"
  #define LOS_HEAP_MEM_BEGIN    (__segment_end("HEAP"))
  #define LOS_HEAP_MEM_END      BOARD_SRAM_END_ADDR

目前使用的芯片是M23内核的,换M3内核的是可以正常编译的。查了下map和s文件,HEAP段都是有的。

回帖(2)

施稚惇

2024-4-3 09:39:02
会不会是相关的头文件没有包含进来?
举报

孙成红

2024-4-3 15:59:12
从错误信息和代码中可以看出,问题出在los_init.o这个目标文件中,该文件引用了一个未定义的符号__segment_end。

在Keil5中,__segment_end是一个由编译器生成的符号,表示一个段的结束位置。通常情况下,用户不需要直接使用这个符号,而是由编译器自动处理。

出现这个错误的原因可能是由于编译器设置的问题,或者代码中存在一些错误导致编译器无法正确处理段的结束位置。

为了解决这个问题,可以尝试以下几个步骤:

1. 检查代码中是否存在语法错误或者其他编译错误。确认代码中没有错误后重新编译。

2. 检查编译器设置是否正确。确保选择了正确的目标设备和编译器版本,并且相关的编译器选项、链接脚本等设置正确。

3. 尝试重新生成工程文件或者创建一个新的工程。有时候工程文件某些设置不正确可能会导致这个问题,重新生成或者创建一个新的工程文件可以解决问题。

4. 如果使用了其他库或者外部模块,检查这些库或者模块是否与工程兼容。有时候不兼容的库或者模块也会导致类似的错误。

如果尝试了以上步骤还没有解决问题,建议查看编译器的官方文档或者寻求Keil技术支持的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分