我有一门课:
#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 isr\n");
}我附加了isr()方法来创建一个中断,以便它将文本发送到终端窗口。但由于某些原因,它不起作用。
如果我将printf()语句放在构造函数中的init()方法之前或之后,则会打印printf()的文本,但不会打印isr()中的文本。
有什么帮助吗?
发布于 2018-06-23 00:43:24
意外地找到了解决方案。我有实例化ButtonListener的MyClass。在这个类中,我将ButtonListener声明为指针:
ButtonListener* blistener;。
在MyClass的构造函数中,我使用了ButtonListener buttonListener = new ButtonListener(args...)。在我把它改成只有buttonListener = new ButtonListener(args...)之后,事情就解决了。
希望能对其他人有所帮助。
https://stackoverflow.com/questions/50977322
复制相似问题