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.

[参考译文] 编译器/TMS320F2.803万:$strtod(x)-如何使其在标签上工作,而不是在字符串文字上工作

Guru**** 2539430 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/575483/compiler-tms320f28030-strtod-x---how-to-make-it-work-on-a-label-than-with-string-literal

部件号:TMS320F2.803万

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

我要使用内置函数$strtod(x)。要在可变时间从字符串中计算变量,该字符串是另一个结构的一部分。

我的问题是使用内置函数是:

1.在哪里可以找到所有内置函数的完整列表? 例如,有“$PI”,而在spre513j.pdf中的任何地方都看不到。 可以列出无法通过记录的内置函数实现的大量组装时间字符串/编号处理要求。

2.例如,具体地说,$strtod(x)。  

我想将其用作 $strtod (person.age),而不是 $strtod ("40")。  

其中:

角色结构

名称.string 30.
Age .string 2.
strlen .endstruct;大小=32

人员  .tag  角色结构

我在新标签(变量ageNumber)下进行类似评估

ageNumber:    .word  $strtod (person.age)

如何实现我想要的目标?

是否有任何帮助?

谢谢

Sayee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,$strtode()内置运算符不支持除直接常量参数之外的任何内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的反馈。 这是否因为它是单路的,而且可能是两路汇编器可以做到的?

    那么,您能建议如何使用内置函数和宏实现我想要的目标吗? 此处不需要工作代码。 任何指针都足够了。

    我还注意到,如果我写了以下行:
    myAge:.string perso .age

    我看到"myAge"中填充了结构成员的地址(结构基地址+ 30,来自前面讨论的示例案例),而不是str成员的内容。 如何获取str成员的内容而不是地址?

    还可以帮助我查找内置函数和其他字符串处理指令的列表。

    谢谢

    Sayee
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所有编译器文档都位于
    processors.wiki.ti.com/.../TI_Compiler_Information

    请参阅C28x汇编语言工具用户指南(SPRU513)的4.9 “内置函数和运算符”部分

    如果要在字段Person.age中存储一个Age并在运行时读取它,则不能使用$strtod运算符。 但是,在这种情况下,您不需要$strtod,因为该值已经是一个整数。

    如果您想定义装配时间常量并在装配时将其转换,则可能应该使用.ASG或.qu之类的方法来为符号指定所需的值。 但是,在这种情况下,您仍然不需要$strtod;您可以直接使用符号名称,汇编程序会将其扩展到其定义。

    如果您需要表示浮点常量,您可能也不需要$strtod。 汇编程序可以直接处理大多数浮点值。 例如,3.141.5926万 被识别为浮点常量。

    只有当您有需要表示为即时常量的浮点值,但需要在运行时将其用作浮点值,并且汇编器尚未将其识别为浮点值时,才应使用$strtod。 例如,$strtod ("inf")或$strtod ("0x1.1234p56")
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,perso.age给你一个地址,而不是那个地址的内容。 有多种方法可以获取内容,包括直接寻址:
    MOV DP, #perso。age
    MOV AL,@perso,age
    有关寻址模式,请参见CPU指令集。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的信息。

    我正在尝试使用内置宏/函数来评估ROM数据的某些配置类型-因此它是在汇编时间和.econst区域而不是在.text区域中完成的。因此没有汇编指令,也没有运行时代码和罚分! 这使得事情变得很棘手。

    尽管如此,我还是完成了其中一项任务。

    现在是所有人都需要的另一个主要要求:

    自动递增计数器并将其嵌入闪存...例如产品序列号。

    每次下载.out文件时,主机PC的序列号应自动递增并嵌入闪存区。除此之外,所有ROM映像都相同。
    这种方法应当是防错,防欺骗和最不繁琐的。

    实现这一目标的最佳方式是什么? 有什么建议?

    谢谢

    Sayee
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这真的超出了编译器工具的范围。 在设备论坛上提问可能会更幸运。