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.

Control Suite里面代码例程中#ifdef导致的编译错误问题



我在Control Suite中下载了28377s的代码例程,在建工程添加源代码的过程中先后出现了几次编译错误,都和ifdef有关。#ifdef的限定条件导致变量未被定义或者定义冲突等问题。 

因此,我想了解这些限定条件的含义和配置方法

1. #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000   这个限定条件是编译器的版本,查资料说这个限定是因为对can寄存器的定义文件有两个,通过编译器版本来决定使用哪个定义。()那为什么要有两个定义?

2.#ifdef CPU1   

这里的CPU1或者CPU2指的是处理核吗?我用的是单核28377s,为什么也需要选择处理核?我要怎么配置使得限定条件通过呢?

3.#ifdef _FLASH

这个限定条件成不成立分别代表什么意思?怎么配置?

4.#ifdef _LAUNCHXL_F28377S

问题同上..

问题有些多,期待您的解答,多谢!

  • 我在Control Suite中下载了28377s的代码例程,在建工程添加源代码的过程中先后出现了几次编译错误,都和ifdef有关。#ifdef的限定条件导致变量未被定义或者定义冲突等问题。 

    因此,我想了解这些限定条件的含义和配置方法

     

    1. #ifdef __TI_COMPILER_VERSION__
            #if __TI_COMPILER_VERSION__ >= 15009000   这个限定条件是编译器的版本,查资料说这个限定是因为对can寄存器的定义文件有两个,通过编译器版本来决定使用哪个定义。()那为什么要有两个定义?

    ERIC: 就我的理解,最新的编译器和以前的编译器还是有点不一样,所以有些定义如CMD就需要有不同的写法,你可以查看一下最新编译器的说明文档了解一下。

    你工程里面选择了不同的编译器,它自动去进行条件编译。

    2.#ifdef CPU1   

    这里的CPU1或者CPU2指的是处理核吗?我用的是单核28377s,为什么也需要选择处理核?我要怎么配置使得限定条件通过呢?

    Eric: 这里的CPU1, 或CPU2都是指的内核。因为TI提供的工程最早是基于F2837xD来开发的,考虑到兼容性的问题,所以才有了这些定义。你只要定义为CPU1就好了。或者你看看这些条件编译是哪些内容,自己把这个条件编译删掉也可以。

    3.#ifdef _FLASH

    这个限定条件成不成立分别代表什么意思?怎么配置?

    ERIC: 如果是FLASH的话,你可以查找一下程序,是会增加多FLASH的初始化的。这个只是考虑有些时候调试的时候也会用到程序直接跑在RAM。

    4.#ifdef _LAUNCHXL_F28377S

    问题同上..

    Eric: 同理,应该只是一些管脚定义而已。Lauchpad 会用来跟一些开发套件一起配合时候,所以有些外设定义也会有所差别。

    综合来讲,这些条件编译只是TI考虑到兼容性的原因,方便在其他的工程或是开发套件上使用,所以加了这些,你自己都可以根据实际板子的情况,把这些条件编译都去掉也没关系的。关键就是理解好条件编译里面那些函数的用意是干嘛就好。

    另外,这些预定义都是在工程属性里面的编译器选项中, predefined里面设置的。