未声明的变量。 [标题问题]

时间:2017-12-20 14:19:03

标签: c embedded

我的微控制器程序中有标题

 #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__

然后是file.c

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

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

每当我尝试使用变量滴答声时。我收到一个错误: 'ticks'未声明(首次使用此功能)。

你有什么想法可能有什么问题吗?

问候!

1 个答案:

答案 0 :(得分:2)

注意:在下面的代码示例中,我删除了所有不相关的语句

1)不要在头文件中声明变量。如有必要,请使用&#39; extern&#39;头文件中的修饰符。

2)在源文件中声明变量,如main.c

3)以下划线+大写字母开头的任何符号名称或两个下划线都是&#39;保留&#39;对于系统。因此,强烈建议将__IRQ_HANDLER__的所有实例替换为(典型)INTERRUPT_H

示例代码:

file:interrupt.h

#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

file:interruptHandler.c

#include "interrupt.h"

volatile unsigned int ticks = 0;

void interrupt2(void)
{
    ticks++;
}

需要第三个文件声明变量:ticks

如果在文件全局空间中声明, 它会自动初始化为0

还必须将访问ticks变量的第三个文件中的代码视为关键部分。可能是:

  1. 禁用中断
  2. ticks复制到本地变量
  3. 启用中断