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: 
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

及其实现:

#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 isrn");
}

我正在附加isr()方法来创建中断,以便它将文本发送到终端窗口。但由于某种原因,它不起作用。

如果我printf()语句放在构造函数中的init()方法之前或之后,则会打印printf()的文本,但isr()中的文本不会打印。

有什么帮助吗?

意外找到了解决方案。我有实例化ButtonListenerMyClass.在这门课中,我声明ButtonListener为指针:

ButtonListener* blistener;.

MyClass的构造函数中,我有ButtonListener buttonListener = new ButtonListener(args...)。在我把它改成只是buttonListener = new ButtonListener(args...)事情解决了之后。

希望它对其他人有所帮助。