【问题标题】:.size operator in assembly ( stm32 )汇编中的 .size 运算符( stm32 )
【发布时间】:2021-02-07 22:01:59
【问题描述】:

我的问题是关于在 ARM CORTEX M 启动文件中使用 .size 运算符,例如 startup script

我已阅读有关 .size 运算符的其他问题,我的理解是以下行:

.size X,.-X

允许通过当前位置 (.) 与符号 X 的定义之间的距离来定义 X 的大小。

在 X 定义的末尾使用此行时可以。没问题。 但是在符号之前使用它怎么会起作用呢?

在启动脚本的第 94 行,您可以阅读:

    .section    .isr_vector,"a",%progbits
    .type   g_pfnVectors, %object
    .size   g_pfnVectors, .-g_pfnVectors

g_pfnVectors:
    .word   _estack
    .word   Reset_Handler
    [...] 

它不应该定义-1的大小吗????它怎么能工作?我想这不是错误,因为您可以在所有 STM32 启动代码中找到它^^

谢谢,

【问题讨论】:

  • 你是对的,它不应该工作。然而,也许没有什么取决于该尺寸信息是否正确。 PS:这应该定义一个大小为零,而不是-1。
  • 这看起来像个缺陷。
  • 糟糕!是的,你是对的,它将定义一个零。既然您这么说,确实没有什么明确取决于该大小信息。我只是没想到 CubeMX 生成的代码会出错。非常感谢。
  • @Sebastien 这不是错误。它设置正确链接所需的必要信息。
  • @fuz 不是缺陷

标签: assembly stm32 cortex-m eabi


【解决方案1】:

答案很简单。 .(点)表示当前地址。所以表达式(来自github)

.size   Reset_Handler, .-Reset_Handler

将Reset_Handler节的大小设置为当前地址减去节的开头。

【讨论】:

  • 我对 Reset_Handler 没意见,我想我理解点符号。我的问题在第 94 行,当 .size 运算符放在 before g_pfnVectors 符号之前(如问题所示)。
  • 第 96 行,不是第 94 行。抱歉
猜你喜欢
  • 2014-07-02
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多