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/MSP430F5435:使用#pragma将IAR迁移到CCW

Guru**** 2573695 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/596967/ccs-msp430f5435-iar-migration-to-ccw-using-pragma

部件号:MSP430F5435

工具/软件:Code Composer Studio

CCS 7.0 .Version:7.0 Win10中的Win.Win10 0.0.0043万

我已从较旧的IAR (V5.x)导入了代码,并且正在迁移到CCS7。  我似乎无法过去的问题是转换#pragma语句,以便将用户变量放置在各个info部分中。  IAR指令如下所示:

#pragma位置="INFOB"
__NO_INIT TypDefName        VarName

将其转换为:

#pragma data_section(VarName,''infoB")

后面的行为:

#pragma数据部分(VarName2,"infoC")

#pragma data_section(VarName3,".infoC")

所有编译都没有错误,直到引入VarName3行,编译器随后会警告该行:

说明 资源 路径 位置 类型
#824-D pragma data_section只能应用于文件级符号定义,而不能应用于"varname"(在"..\foo.h"的第32行声明) foo.c 行22 C/C++问题

如果我将声明从.h文件移到.c文件,它会抛出相同的错误,但现在指向.c文件中键入变量的行。

因此,我切换为尝试使用#pragma dataseg = INFOC,编译器无法识别dataseg声明。

我对缺乏良好的文档和/或良好的代码示例来正确处理信息存储器中的变量感到非常沮丧。

我也很沮丧地理解为什么它会毫无错误地编译,直到作出第三次声明,这与第二次使用infoC无关,因为我确实尝试将它更改为.infoD,并得到了相同的结果。

如果需要做一些额外的事情,使用结构的示例也是一个加分项。  请注意,我正在使用的结构是在另一个文件中外部定义的。  另一个皱纹。

是否有任何帮助?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    似乎我会回答我自己的问题,因为我似乎已经弄清楚了一半的答案。 编译器不会抱怨的#pragma data_section的用法是:
    #pragma data_section( VarName,".info[B, C, D]")
    Type_StructName VarName;
    在方括号内,只需使用一个字母选择所选的信息区域。

    唯一有待回答的问题是如何处理CCS7无法识别的IAR中的__NO_INIT。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用user="Greg Greenwood]唯一需要回答的问题是如何处理CCS7无法识别的IAR中的__no_init。 NOINIT和持久性pragma是否 可以回答您的问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是一个很好的帮助。感谢您向我介绍SLAU1320 CCS编译器用户指南,到目前为止,我还没有在搜索中偶然发现该指南。 但是我必须指出,NOINIT pragma不能与data_section pragma一起使用。 由于NOINIT pragma是针对RAM中存在的变量的,并且编译器无法将NOINIT和INIT变量分组在相同的闪存段中,因此它将抛出错误。 在这种情况下,必须在链接程序cmd文件中将整个段设置为NOINIT,例如:
    param1:{}> param1 type=NOINIT.
    感谢您的帮助。 这让我重回正轨