__attribute __((中断))用于GCC(ARM)中的异常处理程序

时间:2014-03-15 05:04:24

标签: gcc exception-handling attributes interrupt-handling cortex-m3

是否必须为我的(C函数)中断/异常处理程序指定 __ 属性 __ ((中断))?

据我所知,在Cortex-m3中,处理器将自动执行堆叠BEFORE分支到异常处理程序,并且还会从异常处理程序返回取消堆栈,而不依赖于异常处理程序内容。

在这种情况下,异常处理程序就像泛型函数调用一样。那么为什么我们需要专门告诉编译器例程是异常/中断处理程序?

谢谢。

2 个答案:

答案 0 :(得分:2)

  

为什么我们需要专门告诉编译器例程是异常/中断处理程序?

我们不需要。我对Contex M3的中断处理程序工作正常,没有任何属性, 例如,见Systick handler

但是,将此属性添加到处理函数中并不是错误。

答案 1 :(得分:2)

异常处理程序负责在调用ISR后对齐堆栈。这绝对是一件好事,因为如果不是这种情况,64位类型(double,long long int)的后续调用可能会失败。

有关对齐的更多详细信息: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0046b/IHI0046B_ABI_Advisory_1.pdf