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.

[参考译文] TMS320F28377D:ST1中的 EALLOW

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1042694/tms320f28377d-eallow-in-st1

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

你(们)好

在我们的应用中、我们希望在更改之前通过"EALLOW;"和"EDIS;"查询 ST1中的 EALLOW 状态位。

我发现我只能通过"PUSH ST1"访问 ST1、但很遗憾、我找不到一个代码示例、无法查询它。

您能给我一个代码示例吗(最好用 C 语言)?

非常感谢 Adv。

kr

Vincenzo

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

    尊敬的 Vincenzo:

    让我与软件团队一起检查此查询。 TI 的某个人很快就会回来。

    此致、

    Nirav

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

    尊敬的 Vincenzo:

    下面是将 ST1保存到全局变量"savedst1"的示例 C 函数:

    uint16_t savedst1;

    void read_st1 ()

       asm (" PUSH AL"); //将 AL 保存在堆栈上
       asm (" PUSH ST1"); //将 ST1保存在堆栈上
       asm (" POP AL");//将 ST1移入 AL
       asm (" MOV DP、#_savedst1");//设置全局变量的 DP
       asm (" MOV @ savedst1、AL");//将 ST1值移动到全局变量中
       asm (" POP AL");//恢复 AL

    谢谢、

    Ashwini

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

    您好、Ashwini、

    对于返回参数(即没有全局变量)、这也是可行的吗?
    也许是绕过局部变量。
    还是编译器在这方面做不可预测的事情?

    再次感谢

    kr

    V易燃

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

    尊敬的 Vincenzo:

    由于局部变量被放置在堆栈上、因此不可能有嵌入式汇编引用局部变量。 最好使用 C 语言可调用的汇编代码、该代码返回 ST1的值、以使代码保持稳定、并且不受任何编译器优化效果的影响。

    有关如何创建 C 语言可调用汇编函数的信息、请访问:

    编译器指南

    https://www.ti.com/lit/spru514

    汇编器指南

    https://www.ti.com/lit/spru513

    C2000Ware 还具有以汇编语言编写的库函数、这些函数也可用作参考。 示例 DCL 库。

    谢谢、

    Ashwini

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

    您好!

    我做到了:

    静态 uint16_t GetEallow()

       asm (" PUSH ST1");
       asm (" POP AL");
       asm ("和 AL、#0060h");

    但我得到:警告#994-D:在非 void 函数"GetEallow"末尾缺少 return 语句。
    这是正确的、但在这种情况下、我不能使用 return-C 语句、相邻的 asm (" LRETR")正在工作。

    我该怎么做?

    格尔德

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

    您好、Gerd、

    我已经联系了编译器团队以了解情况、并将很快返回给您。

    谢谢、

    Ashwini

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

    您好、Gerd、

    请参阅第7.5节"使用汇编语言连接 C 和 C++"一节。 它提供了编写汇编函数的指南。 第7.5.2小节介绍了如何编写汇编函数、以及如何让 C 代码调用该函数并返回值。 如果将 GetEallow 作为汇编函数编写、则会更好。

    编译器指南

    https://www.ti.com/lit/spru514

    谢谢、

    Ashwini

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

    工作正常:

       .global _GetEallow
    GetEallow (_GetEallow):
       按   ST1
       弹出      AL
       和   AL、#0060h
       LRETR

    使用

    如果(0==GetEallow())
    (笑声)

    非常感谢。

    格尔德

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

    很高兴知道。 请将此主题标记为已解决。

    谢谢、

    Ashwini

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

    我几乎没有尝试过这么做、但我找不到这个函数。

    格尔德

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

    您好、Gerd、

    由于 Vincenzo 创建了该帖子、我相信只有他才能将其标记为已解决。 我将继续、在我结束时关闭该线程

    谢谢、
    Ashwini