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.

[参考译文] 编译器/TMS320F28374S:CPU 寄存器 ST0和 ST1、在这种情况下、它们需要 POP 和 PUSH

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/811241/compiler-tms320f28374s-cpu-registers-st0-and-st1-in-which-case-they-need-pop-and-push

器件型号:TMS320F28374S

工具/软件:TI C/C++编译器

您好!  

客户正在使用 C2000计时器来运行 uCOS。  

在 ISR 中、一些代码位于 asm 中。 他们发现、如果 st0和 st1不是手动 POP 和 PUSH、代码就无法正常运行。  

其他 CPU 寄存器不需要进行 POP 和手动推入。  

_interrupt 关键字用于 ISR。  

问题可能出在哪里?

非常感谢。

BR、Jordan

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

    在 C28x 器件上、当一个中断发生时、几个寄存器被自动保存在堆栈上。  这些寄存器中有 ST0和 ST1。  这些寄存器由指令 IRET 恢复。   编译器使用 IRET 从中断返回。  请在 C28x CPU 手册中搜索 IRET

    因此、无需手动保留 ST0和 ST1。

    谢谢、此致、

    乔治

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

    乔治

    在 dis 中、我们找到了 IRET。

    BR、Jordan

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

    [引用 user="Jordan Zhou "]在 ds-asm 中、我们找到了 IRET。

    这正是我所期望的。  请解释为什么这很重要。

    谢谢、此致、

    乔治

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

    以下是代码:

    OSTickISR:
    0925d3:761B ASP
    141按 Rb
    0925d4:FFF0按 RB
    142 MOV32 *SP++,STF
    0925d5:E20000BD MOV32 * SP++,STF
    143 MOV32 *SP++,R7H
    0925d7:E20307BD MOV32 * SP++,R7H
    144 MOV32 * SP++、R6H
    0925d9:E20306BD MOV32 * SP++,R6H
    145 MOV32 *SP++,R5H
    0925db:E20305BD MOV32 *SP++,R5H
    146 MOV32 * SP++,R4H
    0925dd:E20304BD MOV32 *SP++,R4H
    147 MOV32 * SP++,R3H
    0925df:E20303BD MOV32 * SP++,R3H
    148 MOV32 * SP++,R2H
    0925e1:E20302BD MOV32 * SP++、R2H
    149 MOV32 * SP++,R1H
    0925e3:E20301BD MOV32 * SP++,R1H
    150 MOV32 *SP++,R0H
    0925e5:E20300BD MOV32 * SP++,R0H
    152按 DP:ST1
    0925e7:7609按 DP:ST1
    153按 AR1H:AR0H
    0925e8:0005按 AR1H:AR0H
    154按下 XAR2
    0925e9:AABD MOVL *SP++,XAR2
    155按 XAR3
    0925ea:A2BD MOVL *SP++,XAR3
    156按 XAR4
    0925eb:A8BD MOVL *SP++,XAR4
    157按 XAR5
    0925ec:A0BD MOVL *SP++,XAR5
    158按 XAR6
    0925年版:C2BD MOVL *SP++,XAR6
    159按 XAR7
    0925ee:C3BD MOVL *SP++,XAR7
    160按 XT
    0925ef:ABBD MOVL *SP++,XT
    161推送 RPC
    0925f0:0004推送 RPC
    163 LCR _OSTimerTick
    0925F1:76492B91 LCR OSTimerTick
    168 LCR _OSIntExit
    0925f3:764929A6 LCR OSIntExit
    170 POP RPC
    0925f5:0007 POP RPC
    171 POP XT
    0925f6:87BE MOVL XT、*- SP
    172 POP XAR7
    0925f7:C5BE MOVL XAR7、*- SP
    173 POP XAR6
    0925f8:C4BE MOVL XAR6、*- SP
    174 POP XAR5
    0925f9:83BE MOVL XAR5、*- SP
    175 POP XAR4.
    0925fa:8ABE MOVL XAR4、*--SP
    176 POP XAR3
    0925fb:82BE MOVL XAR3、*- SP
    177 POP XAR2
    0925fc:86BE MOVL XAR2、*--SP
    178 POP AR1H:AR0H
    0925fd:0003 POP AR1H:AR0H
    179 POP DP:ST1
    0925fe:7601 POP DP:ST1
    181 MOV32 R0H、*--SP
    0925ff:E2A00BE MOV32 R0H、*- SP、UNCF
    182 MOV32 R1H、*--SP
    092601:E2A01BE MOV32 R1H、*- SP、UNCF
    183 MOV32 R2H、*--SP
    092603:E2A02BE MOV32 R2H、*- SP、UNCF
    184 MOV32 R3H、*--SP
    092605:E2A03BE MOV32 R3H、*- SP、UNCF
    185 MOV32 R4H、*--SP
    092607:E2A04BE MOV32 R4H、*- SP、UNCF
    186 MOV32 R5H、*--SP
    092609:E2A05BE MOV32 R5H、*- SP、UNCF
    187 MOV32 R6H、*--SP
    09260b:E2A06BE MOV32 R6H、*- SP、UNCF
    188 MOV32 R7H、*--SP
    09260d:E2AFE07BE MOV32 R7H、*- SP、UNCF
    189 MOV32 STF、*- SP
    09260f:E28000BE MOV32 STF、*- SP
    190持久性有机污染物 RB
    092611:FFF1 POP RB
    192个 NASP
    092612:7617 NASP
    193 IRET
    092613:7602 IRET      

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

    我认为中断服务例程是在 C 代码中实现的。  您显示的代码似乎来自手动编码的汇编、并且不是由编译器生成的。  是这样吗?

    如果它是由编译器生成的、那么我需要一个测试用例、允许我重现此行为。  对于该源文件、请按照文章 如何提交编译器测试用例中的说明进行操作

    谢谢、此致、

    乔治

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

    乔治

    你是对的。 编译器不会生成代码。

    客户无法提供测试用例。  

    BR、Jordan

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

    约旦

    乔治是正确的。  ST0和 ST1自动是上下文保存/恢复的一部分。  http://www.ti.com/lit/spru430中对此进行了说明 

    客户将需要单步执行代码并进行一些调试、然后确定问题所在。  

    此致

    Lori

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

    约旦、您好!

    我已经听过几天了, 希望这有助于回答您的问题,或者您能够解决问题。

    如果问题已解决、请单击绿色的"验证答案"按钮。

    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。

    • 如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。
    • 如果您有新问题、请单击"提出新问题"按钮。

    此致、
    Lori