0

Texas Instruments MSP430マイクロコントローラー用の実証済みのファームウェアを新しいコンパイラー(VisualGDBを使用するVisualStudioの下のC++コンパイラー)でコンパイルしようとしています。

このファームウェアの以前のバージョンはすべてCコンパイラでコンパイルされており、エラーも警告もありません。CコンパイラからC++コンパイラへの変更が私の問題の原因であるに違いありません。(Cコンパイラでコンパイルされたコードは5年間問題なく実行されています。)

このコードスニペットを考えると:

#include <msp430x14x.h>
WDTCTL = WDTPW+WDTHOLD;

このエラーが発生します:

エラー:「WDTCTL」はタイプに名前を付けていませんc:\ msptest \ LedBlink \ LedBlink.cpp

WDTCLTはmsp430x14x.hで宣言されています。

誰かが私を正しい方向に向けてくれませんか?

4

3 に答える 3

3

2つのことが可能です:

  • 各コンパイラで提供されるmsp430x14x.hは異なります。このようなヘッダーの標準形式はなく、ベンダーごとに定義が異なる場合があります。
  • あるコンパイラのヘッダーを別のコンパイラで使用していて、互換性のないコンパイラ拡張または構文を使用しています。

ここで行われているコンパイラ固有の「マクロマジック」の多くは間違いありません。注意する必要があるのは、これらのマクロがプリプロセッサによってどのように拡張されるかです。コンパイラは、投稿したソースではなく、拡張されたコードについて不平を言っています。

ここでは、プリプロセッサを使用して、他の方法では有効なCまたはC ++ではない構文を作成しているため、拡張を考慮しないと、多くを決定することはできません。また、各コンパイラが異なるmsp430x14x.hを提供する可能性があるため、使用されたCおよびC ++コンパイラを正確に知らなくても、それについては多くを語ることはできません。完全な展開を考慮する必要があることに注意してください。したがって、マクロが他のマクロに関して定義されている場合は、それらも展開する必要があります。GCCには、プリプロセッサ出力を出力するオプションがあります。または、プリプロセッサを個別に直接実行することもできます(実行可能ファイルは「cpp」です)。

于 2012-09-20T06:28:30.417 に答える
0

問題は、WDTCTLを使用して定義されてsfrwおり、コードには表示されていませんが、 iomacros.hでインラインasmステートメントとしてsfrw定義されていることです。明らかにインラインasmはプロセッサに依存し、msp430で機能するものはVisualStudioでは機能しません。

于 2012-09-20T04:06:57.070 に答える
0

回答してくださった皆様、ありがとうございました。回答は、私が尋ねた質問以外にも役立ちます。

私は問題を見つけて修正しました。問題は、私が認めなければならない、私の側の不注意な誤りでした。完成したCプログラムからテストプログラムにコードを切り取って貼り付けました。省略しました

int main()

したがって、コンパイラが文句を言った代入ステートメントは、ソースコードのスコープが正しくありませんでした。

質問を時期尚早に投稿しました。

そうは言っても、あなたの答えは、GCCコンパイラー(IDEとしてVisual Studioを使用)を使用するか、このファームウェアの以前のすべてのバージョンで使用したものと同じコンパイラーを使用するかを決定する際に最も役立ちます。私はあなたが提供した一連の答えから多くを学びました。

ありがとう!

于 2012-09-20T14:15:45.843 に答える