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启用浮点功能,为什么中断服务函数上下文保存只保存了RB,R0H,R1H,R2H,R3H和STF部分浮点寄存器

Part Number: TMS320F28335

最近在移植OS到DSP28335,需要考虑CPU浮点寄存器的上下文保存,反汇编发现,中断服务上下文只保存了RB,R0H,R1H,R2H,R3H和STF。其他浮点相关寄存器未保存,这样不会影响浮点计算么?

CCS版本: Version: 12.1.0.00007,最新编译器,其他旧编译器也试过,都是这样。如下图所示某个中断服务函数反汇编代码:

我查看技术文档的涉及的浮点寄存器如图,红圈部分未保存:

  • 感谢您对TI产品的关注,为更好的解决您的问题,由于问题比较复杂,我需要询问更了解这款芯片的TI资深工程师,再为您解答,一旦得到回复会立即回复给您。

  • 其他浮点相关寄存器未保存,这样不会影响浮点计算么?

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