我正在尝试在 Atmel Studio 中使用C ++对 Atmel SAM D21 微控制器进行编程。我正在尝试使用片上计时器之一创建定期的硬件中断。
我创建了Timer4
类来从main.cpp
设置计时器。我试图在主函数中创建一个名为Timer4
的{{1}}实例,但是它说
MyTimer4
我已经看到许多类似的讨论,它们指向不正确/圆形的'Timer4' was not declared in this scope
'MyTimer4' was not declared in this scope
。但是,我似乎自己没有看到相同的问题。有任何想法吗?
Main.cpp
#include
timerSAMD21.h
#include "timerSAMD21.h"
#include "sam.h"
void SampleADC(void)
{
}
int main(void)
{
SystemInit();
Timer4 MyTimer4;
MyTimer4.setRate(1000);
MyTimer4.onEvent(SampleADC);
MyTimer4.start;
}
timerSAMD21.cpp
#ifdef TIMERSAMD21_H
#define TIMERSAMD21_H
#include "tc.h"
#include "tc4.h"
#include "gclk.h"
typedef void (*voidFuncPtr)(void);
class Timer4
{
public:
Timer4() {};
void setRate(int frequency);
void start(void);
void end(void);
void onEvent(voidFuncPtr funcOnEvent);
private:
void configure(int frequency);
void enable(void);
void disable(void);
void reset(void);
};
#endif
答案 0 :(得分:3)
(注意:做出答案是为了将其从未回答的问题列表中删除。Miles似乎决定不回答,我也不认为这个问题是错字。) >
您试图防止重新包含标头的方式是,如果仅在定义了保护宏的情况下,它才使标头的内容可见,这当然是从来没有的。
要解决此问题,请更改
#ifdef TIMERSAMD21_H
#define TIMERSAMD21_H
进入
#ifndef TIMERSAMD21_H
#define TIMERSAMD21_H
在第一次包含标头内容时,这将首先使标头内容可见。
然后,它将定义保护宏,以防止标头内容在同一翻译单元(即代码文件)中第二次编译。