尊敬的香槟:
我是为我们的客户提出这个问题的。
用户如何读取 C 代码中的寄存器程序计数器(PC)?
如果无法用 C 代码读取、用户如何在 asm 代码中读取?
韦恩·黄
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.
尊敬的香槟:
我是为我们的客户提出这个问题的。
用户如何读取 C 代码中的寄存器程序计数器(PC)?
如果无法用 C 代码读取、用户如何在 asm 代码中读取?
韦恩·黄
您好、Wayne、
您可以参考 《C28x 指令集参考指南》中的"C28x 汇编语言指令"一章、但我其实是在尝试指导您参考 MOV 指令、该指令允许将 XARn 寄存器写入32位位置(MOVL loc32、XARn)。 您可以参阅此文档、了解如何使用此汇编指令。
此致、
阿米尔·奥马尔
尊敬的 Omer:
用户询问在这些指令之间是否存在中断?
例如、在下面的伪代码中、
ASM (" MOV XAR5、PC");
优先级较高的 ISR 就在这里...
ASM (" MOVL loc32、XAR5")
读 loc32
当在 ISR 中使用 XAR5时、用户需要考虑。
进入 ISR 并离开 ISR 时、XARn 是否始终由 CPU/C 编译器保存上下文(推入/弹出)?
或者用户应该使用 EINT;DINT;
赞
Dint;
ASM (" MOV XAR5、PC");
ASM (" MOVL loc32、XAR5")
读 loc32
EINT;
您好、Wayne、
从我在已测试的项目中看到的内容来看、如果使用了 ISR、它会始终推送 其中直接使用的任何寄存器(即、如果在用于 ISR 的汇编中使用了 XAR0、 ISR 将确保在进入例程时将 XAR0推入堆栈);然而、我不知道这是否可以肯定编译器始终会对任何函数调用执行此操作、例如从 ISR 内调用函数的情况。 我会与另一位专家确认这一点。
此致、
阿米尔·奥马尔
如果使用 ISR,它总是推送 其中直接使用的任何寄存器
没错。 有关更多详细信息、 请在 C28x 编译器手册 中搜索标题为 __interrupt 关键字的子章节。
谢谢。此致、
-乔治