Microchip
直播中

陈连香

8年用户 207经验值
私信 关注
[问答]

在简单的ISR中产生大量开销

您好,我正在为PIC32编写代码,并且发现即使是简单的ISR的开销也是荒谬的。这是我的ISR……我的拆卸列表显示……现在,要么我根本不理解它是如何工作的,要么C编译器放入了大量的垃圾。首先,我使用的是免费编译器,所以垃圾的情况可能是这样。考虑到这一点,我想知道是否有人愿意用优化的编译器编译上面的代码并发布最终的汇编代码。如果编译得很紧,我可能不得不购买编译器。除此之外,我想知道是否有任何精通汇编的人能给我或指出我在汇编中使用的代码行来完成这项工作。我已经用其他的PIC控制器编写了汇编,这看起来应该只是几根线。谢谢。

回帖(19)

唐红菊

2019-9-26 10:59:37
“垃圾”是编译器保存寄存器上下文,并设置嵌套中断。如果你想要一个简短的序幕/结尾,你可以使用影子寄存器。PIC32 MZ有足够的寄存器集,每个优先级可以使用单独的一个。-仅使用优先级7。当编译器知道ISR不能被抢占时,编译器使用较短的序言。-不要调用ISR中的其他函数。编译器是足够聪明的,如果不需要的话,可以保存更少的寄存器。如果使用程序集,则不必遵守C调用约定。对于它实现的功能,编译器生成的序言中没有赘肉。
举报

程娇

2019-9-26 11:11:31
从编译器手册:ISR代码…如果ISR调用普通函数,那么编译器将保存所有工作寄存器,即使它们不是在ISR本身中明确使用的。必须这样做,因为编译器无法知道被调用的函数使用了哪些资源。
举报

李维嘉

2019-9-26 11:27:42
欢迎来到MIPS架构。你认为那32个寄存器是个好东西吗?C编译器生成的代码不再是必需的。您注意到,ISR的一个很好的部分是推/弹出编译器认为非阻塞的所有寄存器。你不会在组装上做得更好,因为信不信由你,这已经被优化了。这是一个知道的事情,一个33英尺的ISR比PIC32花费更少的时间,即使一个运行在80MHz,另一个在一半,我们将不会谈论ARM(它大约和一个33 F一样)。
举报

李凤英

2019-9-26 11:33:27
我想我在一本书中看到INTClearFlag是一个宏。也许我错了。不过,看看这一切简单的NOP。我不知道为什么它认为它需要存储所有这些。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分