首页 文章

我无法在类中获得MBED自动收录器来调用成员方法

提问于
浏览
0

我编写了以下基于MBED的C程序作为我正在为Nucleoboard微控制器工作的更详细项目的实验:

#include "mbed.h"

DigitalOut greenLed(PA_5);

#include "mbed.h"
class TimedLED
{
    public:
        TimedLED()
        {
            Ticker t;
            t.attach_us(this, &TimedLED::flip, 1000000);
        }

        void flip(void)
        {
           static int count = 0;
           greenLed.write(count%2); //-- toggle greenLed
           count++;
        }
};

int main()
{
    TimedLED flash;
    while (1);
}

我查看的所有引用似乎都表明t.attach_us(this,&TimedLED :: flip,1000000)应该调用方法,每秒“翻转”,因此导致LED打开和关闭 . 然而,这并没有发生 . 我看不出是什么问题 . 我希望有人可以帮助我解决这个问题 .

我收到以下警告消息,表明此格式已弃用,但文档的链接已被破坏,因此我无法获得更多详细信息:

Function "mbed::Ticker::attach_us(T *, M, us_timestamp_t) [with T=TimedLED, M=void(TimedLED::*)()]" (declared at /extras/mbed_fd96258d940d/drivers/Ticker.h:122) was declared "deprecated" "t.attach_us(this, &TimedLED::flip, 1000000);"

即使它被弃用,它仍然应该工作,不应该吗?此外,假设弃用消息是正确的,有一种更新的方法可以做同样的事情 . 我无法在任何地方找到替代方法的参考 .

1 回答

  • 2

    你在堆栈的构造函数中声明 Ticker t; ,当构造函数退出时它将清除对象,因此代码将不会运行 .

    在您的类中声明变量,它将按预期运行:

    class TimedLED
    {
        public:
            TimedLED()
            {
                t.attach(callback(this, &TimedLED::flip), 1.0f);
            }
    
            void flip(void)
            {
                static int count = 0;
                greenLed.write(count%2); //-- toggle greenLed
                count++;
            }
    
        private:
            Ticker t;
    };
    

    还要注意构造函数的变化,这是在mbed OS 5中附加回调的首选(不推荐)方式 .

相关问题