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.

[参考译文] 编译器/F28M35H52C:F28M35H52C

Guru**** 2538950 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/722265/compiler-f28m35h52c-f28m35h52c

器件型号:F28M35H52C

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

您好!

我知道如何使用在 C 语言中显示扩展宏、例如在 Visual Studio 中  

#define STRINGIFY(s) XSTRINGIFY(s)

#define XSTRINGIFY(s) #s

#pragma message ("AVAIL_TIME =" STRINGIFY(AVAIL_TIME))

第一个问题:CCS 编译器中用于 ARM 的#pragma 消息的等效项是什么?

第二个问题、我对如何显示宏的计算值感兴趣。

为了执行#if (a>b)语句、预编译器肯定会计算宏值(示例在 Visual Studio 中工作):

#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ONE_BYTE_Tx_Time 11
#define NUM_OF_BYTES     16
#define BUSY_TIME        132
#define TOTAL_TIME       300
#define AVAIL_TIME       (TOTAL_TIME-BUSY_TIME)
#define RESP_TIME        (ONE_BYTE_Tx_Time * NUM_OF_BYTES)

#pragma message ("AVAIL_TIME =" STRINGIFY(AVAIL_TIME))
#pragma message ("RESP_TIME =" STRINGIFY(RESP_TIME))

#if (AVAIL_TIME <= RESP_TIME)
  #error "not enough time"
#endif

编译期间的输出为:

    AVAIL_TIME =(300-132)
    RESP_TIME =(11 * 16)
    fatal error C1189: #error :  "not enough time"

因此、预编译器计算了两个整数、对它们进行了比较并输出了错误。

 遗憾的是、CCS 只能在调试期间将鼠标悬停在宏上、从而扩展和评估宏的值。

我的问题是:是否可以在编译期间显示宏计算的实际结果?即

   AVAIL_TIME = 168 // which is (300-132)
   RESP_TIME = 176  // which is (11 * 16)

公式扩展可能相当复杂、因此在编译期间查看结果而不加载(需要几分钟!)非常有用。 和运行代码:

   AVAIL_TIME_in_SysTicks =(((75000000/1000000) * (1000000/2500)) - 2 * ((((75000000/1000000) * ((1000000000/900000) + 1)*(10 + 0x00000000/0x00000008) + 2)/1000) * 16)) 

谢谢、Igor

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

    [引用 user="Igor Kordunsky"] CCS 编译器中用于 ARM 的#pragma 消息的等效项是什么?[/quot]

    遗憾的是、没有等效项。

    [引用 user="Igor Kordunsky"]我对如何显示宏的计算值感兴趣。

    使用编译器选项 --gen_preprocessor_listing。  请在 C28x 编译器手册中搜索它

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、George。
    实际上、我问的是 ARM 编译器、而不是 C28
    那么,是否有办法或没有办法强制预编译器显示其内部计算的针对诸如#if (a>b)语句的宏值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没有与#pragma 消息完全等效的消息。  但您可以使用--gen_preprocessor_listing 解决相同的问题。  请在 ARM 编译器手册中搜索该选项

    谢谢、此致、

    乔治

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

    只要您提到 #pragma、 就会将您的概念链接到实现详细信息。
    混用 Unix Like 和 MS #pragma 概念是头痛的制造者、需要大量的读数、检查和资源杀手。