Я не могу получить тикер MBED в классе для вызова метода-члена

Я написал следующую программу на C ++ для MBED в качестве эксперимента для более детального проекта, над которым я работаю для своего микроконтроллера 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 (это, &TimedLED :: flip, 1000000) должен вызывать метод, «переворачивать» каждую секунду, поэтому светодиод должен включаться и выключаться. Однако этого не происходит. Я не вижу, в чем проблема. Я надеюсь, что кто-то может помочь мне прояснить это.

Я получаю следующее предупреждающее сообщение о том, что этот формат устарел, но ссылка на документацию не работает, поэтому я не могу получить более подробную информацию:

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);"

Даже если он устарел, он все равно должен работать, не так ли? Кроме того, предположительно, если сообщение об устаревании является правильным, есть более новый способ сделать то же самое. Я не могу найти ссылку на альтернативный метод, хотя нигде.

0

Решение

Вы заявляете 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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]