Assembly .部件中的大小运算符(stm32)
我的问题是关于在ARM CORTEX M启动文件中使用.size操作符的问题,如下所示 我已经阅读了关于.size运算符的其他问题,我的理解是以下行:Assembly .部件中的大小运算符(stm32),assembly,stm32,cortex-m,eabi,Assembly,Stm32,Cortex M,Eabi,我的问题是关于在ARM CORTEX M启动文件中使用.size操作符的问题,如下所示 我已经阅读了关于.size运算符的其他问题,我的理解是以下行: .X尺寸,-X 允许通过当前位置(.)与符号X定义之间的距离定义X的大小 当在X定义的末尾使用这一行时,这是正常的。没问题。 但是,当它在符号之前使用时,它如何工作呢 在启动脚本的第94行,您可以阅读: .section .isr_vector,"a",%progbits .type g_pfnVec
.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启动代码中找到这一点^^
谢谢,答案很简单<代码>(点)表示当前地址。因此,表达式(来自github)
将节重置处理程序的大小设置为当前地址减去节的开头。你说得对,它不应该工作。然而,可能没有什么取决于大小信息是否正确。PS:这应该定义一个零的大小,而不是-1。这看起来像是一个缺陷。哎呀!是的,你是对的,它将定义一个零。既然你这么说了,确实没有任何东西明确地依赖于这个尺寸信息。我只是没想到CubeMX生成的代码会出错。非常感谢。@Sebastien这不是一个错误。它设置了正确链接所需的必要信息。@fuz不是缺陷我对重置处理程序的信息没有意见,我想我理解点符号。我的问题是在第94行,当.size操作符放在g_pfinvectors符号之前(如问题所示)。第96行,而不是94行。很抱歉
.size Reset_Handler, .-Reset_Handler