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.

[参考译文] CCS/TMS320F28388D:在步进调试时、无法看到运行时库源文件 U_DIV 中使用的 U$$$DIV 的别名称为__c28xabi_divu

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/954179/ccs-tms320f28388d-unable-to-see-aliases-name-__c28xabi_divu-for-u-div-used-in-run-time-library-source-file-u_div28-asm-while-step-debugging

器件型号:TMS320F28388D

工具/软件:Code Composer Studio

大家好、

我使用 u_div28.asm 执行16位无符号除法运算、这是一个用于 eabi 格式编译器 v18.1.3.LTS 的运行时支持库文件。  调试时、   在步进调试期间无法看到别名_c28xabi_divu。

尽管对于16位模运算、函数 U$$MOD 被正确调用、其别名称为。  

当我检查它们之间的编码差异时、我发现  针对 U$$DIV 的指令缺少.page 助记符。 我在源文件中添加了内容、然后再次生成了库、并重复了相同的调试步骤。 我再次面临同样的问题。 出于测试目的、我们在执行调试时需要提供别名、以便在旧工程中进行文档记录。 请告诉我该问题、并检查代码文件 u_div28.asm 是否存在任何问题。

谢谢、此致、

Gurusha

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

    我认为问题的根源是对.asg 指令的工作方式的误解。

    RTS 源文件 u_div28.asm 有以下行...

    .if __TI_EABI
    .asg __c28xabi_divu,U$$DIV
    .asg __c28xabi_modu,U$$MOD
    .endif 

    也就是说、如果使用--abi=eabi 为 EABI 构建、那么这两个.asg 指令将生效。  ASG 指令不会创建新符号。  它只以类似于 C 语言中#define 的方式执行文本替换 。另一种思考方式... 它就像在文本编辑器中搜索和替换、只是在构建时发生。  无论在何处出现 U$$DIV、它都会被替换为_c28xabi_divu。  在创建符号之前、此文本替换发生在构建的很早的时候。  

    当为较旧的 COFF ABI 构建此文件时、会创建符号 U$DIV 和 U$MOD。  当为新 EABI 构建相同的文件时、会创建符号_c28xabi_divu 和_c28xabi_modu。  绝不会创建所有4个符号。

    所有这些都不受.page 指令的影响。

    要了解有关.asg 和.page 等汇编器指令的更多信息、 请在 C28x 汇编工具手册中搜索它们。

    此说明是否解决了问题?

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    我的问题相同。 如果使用了 AS 指令、我可以看到  U$$DIV 被 替换为_c28xabi_divu。  

    但对于 U$MOD、我无法看到它被其别名 _c28xabi_modu 所替换。  由于我们的 VNV 团队必须在测试时记录每个步骤、因此他们至少应该在步骤调试时显示此别名。

    如果可行、请尝试检查您的一侧。

    谢谢、此致、

    Gurusha

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

    [引用 USER="gurusha Nahar"]但是对于 U$MOD,我看不到它被其别名 __c28xabi_modu 替换。

    对于 U$$DIV 和__c28xabi_divu 的情况,如何知道它被其别名所取代?  您看了什么?  当您看看 U$MOD 和_c28xabi_modu 的情况时、有什么不同?

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    根据上述问题、我要提到的问题正好相反、 U$MOD 不会显示  _c28xabi_modu 、而  U$MOD 会在   反汇编中显示_c28xabi_modu。

    请参阅以下屏幕截图:

    如果您看到的是双精度数,则 UDIV_MAIN()将显示 UDIV,而不是  __c28xabi_divu。 为什么?

     

    对于  U$$MOD、请参阅 另一屏幕截图:

    _c28xabi_modu   和 U$MOD 之间没有区别、但出于文档目的、我们要求在反汇编时正确显示这些别名。

    由于 U$MOD 和 U$DIV 的代码没有区别、但为什么 U$DIV 不显示别名。

    希望您这次清楚地了解我的观点!

    谢谢  
    对此,

    Gurusha

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

    函数 UDIV_main 不进行任何函数调用。  它使用指令 RPT || SUBCU 计算除法表达式。  函数 umod_main 调用函数__c28xabi_modu。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    否,如果您看到不清楚,则也会调用 udvi_main()。

    这意味着它正在调用一些 Udiv 函数并执行除法运算。

    如果可行、请尝试在您的一侧进行测试。

    谢谢、此致、

    Gurusha

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

    查看编译器生成的汇编代码的更好方法是使用构建选项 --src_interlist。  它使编译器将汇编代码放入与源文件同名的文件中、扩展名更改为.asm。  添加-src_interlist、构建 rtl_udiv_vcast.c、然后检查 rtl_udiv_vcast.asm。  用于函数调用的指令是 LCR。  您将看到函数 UDIV_main 不包含任何 LCR 指令。

    谢谢、此致、

    乔治

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

    好的乔治!

    谢谢  

    我会检查!