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.

[参考译文] TMS320F28335:启用浮点的 TMS320F28335、为什么中断服务函数上下文保存只保存 Rb、R0H、R1H、R2H、R3H 和 STF 部分浮点寄存器

Guru**** 2585275 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1174965/tms320f28335-tms320f28335-with-floating-point-enabled-why-interrupt-service-function-context-save-only-saved-rb-r0h-r1h-r2h-r3h-and-stf-partial-floating-point-register

器件型号:TMS320F28335

大家好、

客户提出的问题需要您的帮助:

最近将 OS 移植到 DSP28335、需要考虑 CPU 浮点寄存器上下文保存、反汇编发现、仅中断服务上下文 RBS、R0H、R1H、R2H、R3H、 和 STF。 其他与浮点相关的寄存器未保存、这是否不会影响浮点计算?  

CCS 版本:12.1.0.00007,最新的编译器和其他较早的编译器也试用过,两者都是相同的。 反汇编中断服务函数的代码、如下图所示:

我查看图中所示的浮点寄存器技术文档、红色圆圈部分未保存:

请帮您检查此问题吗? 谢谢、

此致、

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

    您好 Ben、

    在这种情况下、由于 ISR 是用 C 语言编写的、编译器仅保存在 ISR 中使用的寄存器、或在 ISR 中可用的寄存器(无需保存其他寄存器)。 我将把这个转发给编译器团队、看看他们是否可以确认这个。

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="534511" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1174965/tms320f28335-tms320f28335-with-floating-point-enabled-why-interrupt-service-function-context-save-only-saved-rb-r0h-r1h-r2h-r3h-and-stf-partial-floating-point-register ]\n 其他与浮点相关的寄存器未保存、这是否会影响浮点计算?  [/报价]

    否  例如、考虑寄存器 R4H。  它不像 R3H 那样被显式保留。  这是因为编译器观察到的寄存器惯例保留了 R4H。  请在 C28x 编译器手册中搜索 标题 为 TMS320C28x 寄存器使用和保留的子章节。  了解术语"输入时保存""呼叫时保存"之间的区别。  当一个中断发生时、所有被修改的寄存器必须被保存。  如果中断函数调用另一个函数、例如 TaskT、它不必保留每个寄存器。  它只需保留调用寄存器的保存。  如果 TaskT 修改 R4H、寄存器惯例要求 TaskT 保留 R4H、而不是调用 TaskT 的函数。  其他寄存器也是如此、例如 XAR1

    谢谢、此致、

    乔治