首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MBED Ticker未附加中断

MBED Ticker未附加中断
EN

Stack Overflow用户
提问于 2018-06-22 04:57:29
回答 1查看 325关注 0票数 0

我有一门课:

代码语言:javascript
复制
#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

及其实现:

代码语言:javascript
复制
#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()中的文本。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-23 00:43:24

意外地找到了解决方案。我有实例化ButtonListenerMyClass。在这个类中,我将ButtonListener声明为指针:

ButtonListener* blistener;

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50977322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档