2017-12-20 31 views
-1

私はその最も簡単な間違いを知っていますが、私は解決策を見つけることができません。 Iエラー得宣言されていない変数。 [ヘッダー付きプローブ]

#include <lpc2xxx.h> 
#include "interrupt.h" 

void interrupt2(void) { 
    ticks++; 
    T1IR = 0xff; 
    VICVectAddr = 0x00; 
} 

file.cとその後

#ifndef __IRQ_HANDLER__ 
#define __IRQ_HANDLER__ 
#ifdef __cplusplus 
volatile tU32 ticks = 0; // <- with that variable i have problem 

extern "C" { 
#endif 
void interrupt2(void); 
#ifdef __cplusplus 
} 
#endif 


#endif //__IRQ_HANDLER__ 

: が宣言されていない 'ティック'(最初にこの機能で使用)

+5

あなたは '__cplusplus'ブロックの外側の変数をしたいを有効にします。 – molbdnilo

+0

私は同じエラー+ "期待値" = "、"、 "etc"を持っています – kenik

+2

@kenikエラーメッセージをコピーして、それらの曖昧な近似ではなく質問に貼り付けてください。彼らが参照するコードも投稿してください。 – molbdnilo

答えて

2

注 Iヘッダーを持っている次のコードでたとえば、無関係なステートメントをすべて削除しました。

1)ヘッダーファイルに変数を宣言しません。必要に応じて、ヘッダファイルに 'extern'修飾子を使用します。

2)は、アンダースコア+大文字または2つのアンダースコアで始まる任意のシンボル名はシステム用に「予約」されている)main.c

3のように、ソースファイルで変数を宣言します。従って強く(典型的な)INTERRUPT_H

例コードで__IRQ_HANDLER__のすべてのインスタンスを置換示唆する:

ファイル:interruptHandler.c

#include "interrupt.h" 

volatile unsigned int ticks = 0; 

void interrupt2(void) 
{ 
    ticks++; 
} 

#ifndef INTERRUPT_H 
#define INTERRUPT_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

extern volatile unsigned int ticks; 
void interrupt2(void); 

#ifdef __cplusplus 
} 
#endif 

#endif // INTERRUPT_H 

ファイルinterrupt.h変数を宣言する3番目のファイルが必要です。ticks

とまた、「クリティカルセクションとしてticks変数にアクセスする3番目のファイル内のコードを処理する必要がある、それは自動的に0

に初期化されます 、ファイルグローバル空間に宣言した場合。おそらくによって:

  1. ローカル変数への割り込み
  2. コピーticksを無効にし、それ以外の場合は唯一のC++に存在し、割り込み
+0

メインからのダニにアクセスしたいのですが? – kenik

+1

@kenik: 'main()'を定義するコードに 'interrupt.h'ヘッダーを含めます。 –

+0

私はそれを入れ、ちょうど "エラー1"を受け取りました:( – kenik

関連する問題