我无法在 class 中获取 MBED 代码来调用成员方法
I cannot get an MBED ticker within a class to call a member method
我编写了以下基于 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) 应该每秒调用方法 'flip' 从而导致 LED 点亮和关闭。然而,这并没有发生。我看不出问题出在哪里。我希望有人能帮我解决这个问题。
我收到以下警告消息,表明此格式已弃用,但文档的 link 已损坏,因此我无法获得更多详细信息:
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);"
即使它被弃用了,它仍然应该工作,不是吗?另外,大概如果弃用消息是正确的,那么有一种更新的方法可以做同样的事情。我在任何地方都找不到对替代方法的引用。
你在你的构造函数中声明Ticker t;
在堆栈上,当构造函数退出时它会清除对象,因此代码不会运行。
在您的 class 中声明变量,它将 运行 如预期的那样:
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.
我编写了以下基于 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) 应该每秒调用方法 'flip' 从而导致 LED 点亮和关闭。然而,这并没有发生。我看不出问题出在哪里。我希望有人能帮我解决这个问题。
我收到以下警告消息,表明此格式已弃用,但文档的 link 已损坏,因此我无法获得更多详细信息:
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);"
即使它被弃用了,它仍然应该工作,不是吗?另外,大概如果弃用消息是正确的,那么有一种更新的方法可以做同样的事情。我在任何地方都找不到对替代方法的引用。
你在你的构造函数中声明Ticker t;
在堆栈上,当构造函数退出时它会清除对象,因此代码不会运行。
在您的 class 中声明变量,它将 运行 如预期的那样:
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.