Embedded MBED股票代码不';t附加中断
我有一门课:Embedded MBED股票代码不';t附加中断,embedded,mbed,Embedded,Mbed,我有一门课: #ifndef _BUTTON_LISTENER_H_ #define _BUTTON_LISTENER_H_ #include <iostream> #include <vector> #include "mbed.h" #include "Buttons/MenuButton.h" #include "MenuNavigator.h" class MenuNavigator; class ButtonListener { public:
#ifndef _BUTTON_LISTENER_H_
#define _BUTTON_LISTENER_H_
#include <iostream>
#include <vector>
#include "mbed.h"
#include "Buttons/MenuButton.h"
#include "MenuNavigator.h"
class MenuNavigator;
class ButtonListener
{
public:
ButtonListener(MenuNavigator* navigator, unsigned int samplePeriod_us,
MenuButton* select, MenuButton* down,
MenuButton* up, MenuButton* cancel);
vector<MenuButton*> getButtons();
MenuNavigator* getNavigator();
protected:
void init();
void isr();
vector<MenuButton*> buttons;
MenuNavigator* navigator;
unsigned int samplePeriod_us;
Ticker ticker;
};
#endif
我正在附加isr()
方法来创建一个中断,以便它将文本发送到终端窗口。但出于某种原因,它不起作用
如果我将printf()
语句放在构造函数中的init()
方法之前或之后,则printf()
的文本将被打印,但isr()
中的文本不会被打印
有什么帮助吗?意外地找到了解决方案。我有一个实例化
ButtonListener
的MyClass
。在这个类中,我将ButtonListener
声明为指针:
按钮列表*blistener代码>
在MyClass
的构造函数中,我有ButtonListener ButtonListener=newbuttonListener(args…
)。在我把它改为justbuttonListener=newbuttonlistener(args…)
之后,事情就解决了
希望它能对其他人有所帮助 对于底层选民,您介意解释一下您不喜欢什么吗?我不确定这是否是问题所在,但根据我的经验,类成员函数必须是静态的,才能成为中断处理程序。(考虑一下,中断控制器不能知道要使用哪个类的实例)。同样,<代码> AutoGys函数可能需要一个C样式函数指针,原因相同(或者可能是因为C++名称的问题)。然后从C样式ISR函数调用C++静态类成员函数。我偶然发现了原因。我会给出答案的。再次感谢。
#include "ButtonListener.h"
#include "Buttons/MenuButton.h"
ButtonListener::ButtonListener(MenuNavigator* navigator,
unsigned int samplePeriod, MenuButton* s, MenuButton* d,
MenuButton* u, MenuButton* c) :
navigator(navigator),
samplePeriod_us(samplePeriod_us)
{
buttons.push_back(s);
buttons.push_back(d);
buttons.push_back(u);
buttons.push_back(c);
init();
}
void ButtonListener::init()
{
ticker.attach_us(callback(this, &ButtonListener::isr), 500000);
}
void ButtonListener::isr()
{
printf("in isr\n");
}