你(们)好
我 修改了 TIDM-BUCKBOOST-BIDIR 参考设计提供的代码、 遇到了一些我不理解的问题。 我的疑问与从 ISR 调用的汇编函数的上下文保存有关。 让我们看一下以下代码片段:
... _DPL_Func: ; full context save - push any unprotected registers onto stack PUSH XAR1 PUSH XAR2 PUSH XAR3 ...
这 是在 BuckBoostBiDir-DPL.asm 文件中找到的一部分代码。 基本上,我怀疑为何要进行这些推动呢?
我已经看到"TMS320C28x CPU 和指令集-参考指南"以及 这个问题的答案 、 并且我了解到当一个中断 由 一个写入汇编代码的函数提供时、自动运行环境保存只针对某些特定的寄存器完成、然后、 保存其他使用的寄存器取决于程序员。 另一方面、当用 C 语言编写的函数处理中断时、编译器会自动保存所有上下文。 这是一种边界用例、因为中断由 C 函数处理、但随后调用汇编函数... 我本以为汇编代码不需要上下文保存、但这些推入操作看起来正好是这样。 这是有道理的、除了这样一个事实、 当控制 宏 CNTL_3P3Z 被执行时、使用的其他寄存器(特别是 XAR4)没有被压入。 那么、假设这些入栈操作是作为上下文保存完成的、是否不需要对上述宏中使用的其他寄存器执行相同的操作? 我肯定不了解汇编语言、也不完全理解在对汇编语言编写的函数的正常调用中会出现什么情况(这在某处解释过吗? 我的意思是为在汇编语言中编写的函数的正常调用保存上下文。)但此示例有一些奇怪的地方。 我觉得这种做法并不一致。 我提到的最后一件事是否是"错误"?
提前感谢!