工具/软件:TI C/C++编译器
大家好,
我一直在研究TI C++编译器,当我发现关键字“interrupt”以及它应该用于声明中断服务例程这一事实时。
我的应用程序是在C++下开发的,大多数时候,我使用静态类成员函数来抓取中断(它们被放置在中断向量表中),似乎一切都正常。 有人能解释一下,使用此关键字的优缺点是什么? 为什么我的代码在没有它的情况下工作...
此致,
Norbert
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
大家好,
我一直在研究TI C++编译器,当我发现关键字“interrupt”以及它应该用于声明中断服务例程这一事实时。
我的应用程序是在C++下开发的,大多数时候,我使用静态类成员函数来抓取中断(它们被放置在中断向量表中),似乎一切都正常。 有人能解释一下,使用此关键字的优缺点是什么? 为什么我的代码在没有它的情况下工作...
此致,
Norbert
总之,您很幸运。 您确实需要使用interrupt关键字。
主要区别在于登记公约。 正常函数不会保留每个已修改的寄存器。 登记册惯例只要求保留某些登记册。 其他寄存器可以修改而不能保留,因为根据惯例,调用函数的点期望这些寄存器发生变化。 另一方面,需要中断函数来保留每个被修改的寄存器。 我不知道你如何避免这里的问题。 运气必须是其中的一部分。 我不是ARM架构的专家。 当发生中断时,某些寄存器可能会自动保留,而您的中断函数只使用这些寄存器。
谢谢,此致,
-George
您好,
我可以接受您的回答,但在这种情况下,有几件事我不理解。
您能帮助/解释我理解这些观察结果吗? 我想了解这个关键字的方式或缺失。
此致,
Norbert
Cortex-M4设备通用用户指南中的例外条目和返回部分显示整数寄存 器xPSR, PC, LR, R12, R3, 出现 异常时,处理器将R2,R1和R0推入堆栈(中断处理程序)。 使用浮点例程时,Cortex-M4处理器会自动堆叠异常条目上的架构浮点状态。为什么我的代码不使用它也能正常工作...
TI ARM优化C/C++编译器用户指南的“寄存器惯例”部分显示寄存器R0,R1,R2,R3和R12由调用函数保留,而其它寄存器由子函数保留。
由于在异常条目时Cortex-M4处理器会自动推送C编译器要求由调用函数保留的寄存器,这解释了为什么在Cortex-M4上不需要在中断服务例程中使用"interrupt (中断)"关键字。