是否必须为我的(C函数)中断/异常处理程序指定 __ 属性 __ ((中断))?
据我所知,在Cortex-m3中,处理器将自动执行堆叠BEFORE分支到异常处理程序,并且还会从异常处理程序返回取消堆栈,而不依赖于异常处理程序内容。
在这种情况下,异常处理程序就像泛型函数调用一样。那么为什么我们需要专门告诉编译器例程是异常/中断处理程序?
谢谢。答案 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