打印

GD32 Eclipse提示错误 undefined symbol `__Vectors_End'

[复制链接]
2673|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Chekey|  楼主 | 2024-6-25 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按照官方文档步骤,设置后编译提示undefined symbol `__Vectors_End' referenced in expression错误,感觉ld文件,但找不到文件的问题。/* memory map */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 256K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 48K
}

ENTRY(Reset_Handler)

SECTIONS
{
  __stack_size = DEFINED(__stack_size) ? __stack_size : 20K;

/* ISR vectors */
  .vectors :
  {
    . = ALIGN(4);
    KEEP(*(.vectors))
    . = ALIGN(4);
    //__Vectors_End = .;
    //__Vectors_Size = __Vectors_End - __Vectors;
  } >FLASH

  .text :
  {
    . = ALIGN(4);
    *(.text)
    *(.text*)
    *(.glue_7)
    *(.glue_7t)
    *(.eh_frame)

    KEEP (*(.init))
    KEEP (*(.fini))

    . = ALIGN(4);
    /* the symbol ‘_etext’ will be defined at the end of code section */
    _etext = .;
  } >FLASH

使用特权

评论回复
沙发
好几遍vh| | 2024-6-30 11:27 | 只看该作者
问题出现在链接脚本中找不到 __Vectors_End 符号的定义,这通常是因为在链接脚本中定义了 .vectors 段但没有正确定义 __Vectors_End。

定义 __Vectors_End 和 __Vectors_Size:这两个符号通常用来标识中断向量表的结束和大小。确保在 .vectors 段中正确定义和使用这些符号。


使用特权

评论回复
板凳
好几遍vh| | 2024-6-30 11:28 | 只看该作者
正确的 .vectors 段定义:保证 .vectors 段包含所有的中断向量,并且在向量表结束处正确定义 __Vectors_End。你可以尝试将下面的注释部分取消注释,看看是否能解决问题:
.vectors :
{
  . = ALIGN(4);
  KEEP(*(.vectors))
  . = ALIGN(4);
  __Vectors_End = .;
  __Vectors_Size = __Vectors_End - .;
} >FLASH

使用特权

评论回复
地板
好几遍vh| | 2024-6-30 11:28 | 只看该作者
这段代码确保在 .vectors 段结束时定义了 __Vectors_End 和计算了向量表的大小 __Vectors_Size。

使用特权

评论回复
5
好几遍vh| | 2024-6-30 11:28 | 只看该作者
确保在你的代码或链接脚本中正确定义了所有的中断向量,以确保 .vectors 段能够正确填充。

使用特权

评论回复
6
gaonaiweng| | 2024-6-30 16:27 | 只看该作者
错误信息提示了 undefined symbol '__Vectors_End' referenced in expression,这意味着链接器在链接过程中找不到 __Vectors_End 这个符号的定义。

使用特权

评论回复
7
gaonaiweng| | 2024-6-30 16:27 | 只看该作者
在你的链接脚本中,你尝试注释掉了设置 __Vectors_End 的代码,这可能导致链接器无法正确处理向量表的结束位置。

使用特权

评论回复
8
gaonaiweng| | 2024-6-30 16:27 | 只看该作者
/* ISR vectors */
.vectors :
{
  . = ALIGN(4);
  KEEP(*(.vectors))
  . = ALIGN(4);
  __Vectors_End = .;    /* 设置向量表结束位置 */
} >FLASH

使用特权

评论回复
9
gaonaiweng| | 2024-6-30 16:27 | 只看该作者
在上面的代码中,__Vectors_End 被定义为向量表的结束位置。这个符号是由编译器生成的,用于标记向量表的结束。在你的代码中,将其注释掉可能会导致链接器无法解析向量表的边界,从而出现错误。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝