- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Atmel Studio 中使用 C++ 对 Atmel SAM D21 微 Controller 进行编程。我正在尝试使用其中一个片上定时器创建周期性硬件中断。
我创建了 Timer4
类来从 main.cpp
设置定时器。我试图在主函数中创建一个名为 MyTimer4
的 Timer4
实例,但它说
'Timer4' was not declared in this scope
'MyTimer4' was not declared in this scope
我见过许多类似的讨论指向不正确/循环的 #include
。但是,我自己似乎没有看到同样的问题。有任何想法吗?
main.cpp
#include "timerSAMD21.h"
#include "sam.h"
void SampleADC(void)
{
}
int main(void)
{
SystemInit();
Timer4 MyTimer4;
MyTimer4.setRate(1000);
MyTimer4.onEvent(SampleADC);
MyTimer4.start;
}
timerSAMD21.h
#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
timerSAMD21.cpp
#include "timerSAMD21.h"
voidFuncPtr callback = NULL;
void Timer4::setRate(int frequency) {
configure(frequency);
}
void Timer4::start(void) {
enable();
}
void Timer4::end(void) {
disable();
reset();
}
void Timer4::configure(int frequency) {
//Configuration code here. Removed for Stack Overflow.
}
void Timer4::enable(void){
REG_TC4_CTRLA |= TC_CTRLA_ENABLE; //Enable timer
while (TC4->COUNT8.STATUS.bit.SYNCBUSY);
}
void Timer4::disable(void) {
REG_TC4_CTRLA &= ~TC_CTRLA_ENABLE;
while (TC4->COUNT8.STATUS.bit.SYNCBUSY);
}
void Timer4::reset(void) {
REG_TC4_CTRLA = TC_CTRLA_SWRST;
while (TC4->COUNT8.STATUS.bit.SYNCBUSY);
while (TC4->COUNT8.CTRLA.bit.SWRST);
}
void Timer4::onEvent(voidFuncPtr funcOnEvent){
callback = funcOnEvent;
}
#ifdef __cplusplus
extern "C" {
#endif
void IRQHandlerTimer4(void) {
if (callback != NULL)
{
callback();
}
REG_TC4_INTFLAG = TC_INTFLAG_MC0;
}
#ifdef __cplusplus
}
#endif
最佳答案
(注意:做出回答是为了将此问题从未回答的问题列表中剔除。Miles 似乎决定不回答,我不认为该问题是打字错误。)
您试图阻止重新包含 header 的方式导致它仅在保护宏恰好已经定义的情况下才使 header 的内容可见,而这当然从来没有定义过。
为了解决这个问题,改变
#ifdef TIMERSAMD21_H
#define TIMERSAMD21_H
进入
#ifndef TIMERSAMD21_H
#define TIMERSAMD21_H
这将首先使标题内容在第一次包含时保持可见。
然后它将定义保护宏,这将防止标题内容在同一个翻译单元(即代码文件)中被第二次编译。
关于c++ - 'ClassName' 和 'ClassInstance' 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51605311/
我最近一直在阅读有关如何在 PHP 中优化代码以实现可伸缩性的文章。我今天阅读的几篇文章都不鼓励使用其他方法来简单地从类返回对象。 所以基本上,他们说: 如果你有这样的类: class myClass
我正在尝试在 Atmel Studio 中使用 C++ 对 Atmel SAM D21 微 Controller 进行编程。我正在尝试使用其中一个片上定时器创建周期性硬件中断。 我创建了 Timer4
我有这个原型(prototype)继承链: function Class1() {}; Class1.prototype.name = 'Main Class'; function Class2()
我有一个方法接受一个可以有多种类型的参数,并且必须根据类型做一件事或另一件事,但是如果我检查所述参数的类型,我不会得到“真实的”类型,我总是得到 ,这打乱了我的比较。 我有这样的东西: from c
我见过有人使用 ViewModelProvider[Someclass::class.java] 而不是 ViewModelProvider.get(Someclass::class.java),它在
我正在尝试以 750 毫秒的延迟调用实例的方法。问题是,它不起作用。我读到 setInterval 和对象存在某种问题,所以 setTimeout 也可能存在问题。 假设我有这个: function
我是一名优秀的程序员,十分优秀!