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.

[参考译文] TMS320F2800157:如何为 filename 生成预处理器宏

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1253882/tms320f2800157-how-to-generate-a-preprocessor-macro-for-filename

器件型号:TMS320F2800157

我们希望仅使用日志中的文件名、而不是使用__FILE__提供的整个文件路径。 借助 GCC、我们可以:

#define __FNAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)

我们如何使用 C2000的 C28x 编译器完成类似任务?

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

    Dan、您好!

    我能够使用这个宏构建一个项目而不会出现任何问题、是否出现了您遇到的特定错误、或者 程序在您运行这个宏时是否未按预期使用这个宏?

    此致、

    阿米尔·奥马尔

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

    我看到:

    "../empty_driverlib_main.c", line 208: warning #225-D: function "__builtin_strrchr" declared implicitly

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

    Dan、您好!

    您能向我展示代码中使用它的部分吗? 这样、我就可以尝试在我这边复制它。

    此致、

    阿米尔·奥马尔

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

    没什么好说的

        #define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
    
        printf("FILENAME: %s\r\n", __FILENAME__);
        printf("FILE: %s\r\n", __FILE__);

    和误差

    **** Build of configuration CPU1_LAUNCHXL_FLASH for project empty_driverlib_project ****
    
    "C:\\ti\\ccs1240\\ccs\\utils\\bin\\gmake" -k -j 12 all -O 
     
    Building file: "../empty_driverlib_main.c"
    Invoking: C2000 Compiler
    
    ...
    
    "../empty_driverlib_main.c", line 212: warning #225-D: function "__builtin_strrchr" declared implicitly
    "../empty_driverlib_main.c", line 212: warning #43-D: operand types are incompatible ("int" and "char *")
    Finished building: "../empty_driverlib_main.c"

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

    Dan、您好!

    当我按照你显示的那样尝试使用宏时、没有 builtin_strrchr 函数。 您在其中包含了哪个头文件? 我使用了 stdio.h 和 string.h、但我找不到哪个头文件有这个确切的函数名(我使用了 strchr、它构建没有问题)。 如果您不了解相关情况、可以按住 Ctrl 键并单击函数名称以查看调用函数的来源。

    此致、

    阿米尔·奥马尔

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

    是的、我同意此内置函数在 C2000编译器中似乎不存在。 这是由 gcc 提供的函数、不包含在任何标头中。 我不一定需要这个函数、我只需要一种方法来获取预处理器来生成文件名、以便在我们的日志中使用。  

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

    Dan、您好!

    您能否改为尝试使用 TI 提供的函数的备用版本或 CCS 提供的通用库/头文件? 如果您有任何问题、请告诉我。

    此致、

    阿米尔·奥马尔

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

    是的、我使用替代方法很好、但我不确定它们是什么。 您能给他们指出一下吗?

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

    Dan、您好!

    以下是我在 string.h 中找到的两个外观类似的函数:

    此致、

    阿米尔·奥马尔