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.
你(们)好
在我们的应用中、我们希望在更改之前通过"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