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.

[参考译文] TIDM-BUCKBOOST-BIDIR:从 ISR 调用的汇编函数的上下文保存

Guru**** 657500 points
Other Parts Discussed in Thread: TIDM-BUCKBOOST-BIDIR
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1104637/tidm-buckboost-bidir-context-save-for-assembly-function-called-from-isr

器件型号:TIDM-BUCKBOOST-BIDIR

你(们)好

我 修改了 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)没有被压入。 那么、假设这些入栈操作是作为上下文保存完成的、是否不需要对上述宏中使用的其他寄存器执行相同的操作? 我肯定不了解汇编语言、也不完全理解在对汇编语言编写的函数的正常调用中会出现什么情况(这在某处解释过吗? 我的意思是为在汇编语言中编写的函数的正常调用保存上下文。)但此示例有一些奇怪的地方。 我觉得这种做法并不一致。 我提到的最后一件事是否是"错误"?

提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Roman、

    请参阅 《TMS320C28x 优化 C/C++编译器用户指南》的第7.5章,了解如何编写设计为由 C 函数调用的汇编函数。 XAR1、XAR2和 XAR3负责保存和恢复函数中正在修改的内容。 另一方面、XAR4-XAR7由调用函数(在您的情况下从生成的编译器)负责保存和恢复(如果它们的值预计在函数调用后保留)。 有关更多详细信息、请参阅第7.2.1章的表7-2。

    韩文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不能相信我错过了这个机会、因为我还考虑了该用户指南。 谢谢! 非常清楚。