Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
Embedded MBED股票代码不';t附加中断_Embedded_Mbed - Fatal编程技术网

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…
)。在我把它改为just
buttonListener=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");
}