J'essaie d'utiliser un RtosTimer dans une classe mais le mbed se bloque. Je pense que c'est parce que j'appelle threadHelper chaque tick et sa création d'un nouveau pointeur alors que je veux réellement appeler threadMethod chaque tick ou appeler threadHeper chaque tick mais utiliser le même pointeur. Est-ce que quelqu'un peut me montrer comment je devrais faire cela?Utilisation d'un RtosTimer dans une classe
Le code ci-dessous fonctionne pour un RtosThread parce que threadHelper n'est appelé qu'une seule fois, mais j'ai besoin d'utiliser un temporisateur 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
}
Merci
Merci, fonctionne parfaitement –