クラス内で RtosTimer を使用しようとしていますが、mbed がロックされます。これは、ティックごとに threadHelper を呼び出して新しいポインターを作成しているためだと思いますが、実際にはティックごとに threadMethod を呼び出すか、ティックごとに threadHeper を呼び出しますが、同じポインターを使用します。
誰かが私がこれをどのように行うべきかを教えてもらえますか?
以下のコードは、threadHelper が 1 回しか呼び出されないため、RtosThread に対して機能しますが、Rtos タイマーを使用する必要があります。
.h
#ifndef TEST_CLASS_H
#define TEST_CLASS_H
#include "mbed.h"
#include "rtos.h"
/** TestClass class.
* Used for demonstrating stuff.
*/
class TestClass
{
public:
/** Create a TestClass object with the specified specifics
*
* @param led The LED pin.
* @param flashRate The rate to flash the LED at in Hz.
*/
TestClass(PinName led, float flashRate);
/** Start flashing the LED using a Thread
*/
void start();
private:
//Member variables
DigitalOut m_Led;
float m_FlashRate;
RtosTimer *m_rtosTimer;
//Internal methods
static void threadHelper(const void* arg);
void threadMethod();
};
#endif
cpp
#include "TestClass.h"
TestClass::TestClass(PinName led, float flashRate) : m_Led(led, 0), m_FlashRate(flashRate)
{
//NOTE: The RTOS hasn't started yet, so we can't create the internal thread here
}
void TestClass::start()
{
m_rtosTimer = new RtosTimer(&TestClass::threadHelper, osTimerPeriodic, (void *)0);
int updateTime = (1.0 / m_FlashRate) * 1000;
m_rtosTimer->start(updateTime);
}
void TestClass::threadHelper(const void* arg)
{
//Cast the argument to a TestClass instance pointer
TestClass* instance = (TestClass*)arg;
//Call the thread method for the TestClass instance
instance ->threadMethod();
}
void TestClass::threadMethod()
{
//Do some stuff
}
ありがとう