Hello people,
I am trying to use embOS and C++. My HW and SW platforms are Cortex M3 from ST and IAR EWARM 5.4.
I can get two tasks working, but when I try my code reaches wait/set event ("OS_EVENT_Set(this->m_OS_EVENT);"),
app jumps in Hard Fault Ex. Do you have any idea? Here is the code. Thanks.
CollectTask* collectTask;
ProcessTask* processTask;
static OS_EVENT osEvent;
int main(void)
{
initializeHardware();
OS_EVENT_Create(&osEvent);
collectTask = new CollectTask(50, "CollectTask", &osEvent);
processTask = new ProcessTask(40, "ProcessTask", &osEvent);
OS_Start();
return 0;
}
#if !defined(_PROCESSTASK_H)
#define _PROCESSTASK_H
#include "RTOS/RTOS.h"
class ProcessTask
{
private:
OS_TASK m_taskControl;
OS_STACKPTR int m_userStack[64];
OS_EVENT* m_OS_EVENT;
public:
ProcessTask(unsigned char priority, char* name, OS_EVENT* osEvent);
~ProcessTask(){};
void MainLoop(void);
};
#endif //_PROCESSTASK_H
#if !defined(_COLLECTTASK_H)
#define _COLLECTTASK_H
#include "RTOS/RTOS.h"
#include "EmbOSWrapper/EmbOSEvent.hpp"
class CollectTask
{
private:
OS_TASK m_taskControl;
OS_STACKPTR int m_userStack[64];
OS_EVENT* m_OS_EVENT;
public:
CollectTask(unsigned char priority, char* name, OS_EVENT* osEvent );
~CollectTask(){};
void MainLoop(void);
};
#include "CollectTask.hpp"
void collecttrampoline(void* a);
void CollectTask::MainLoop()
{
while(1)
{
OS_EVENT_Set(this->m_OS_EVENT);
OS_Delay(1000);
}
};
CollectTask::CollectTask(unsigned char priority, char* name, OS_EVENT* embOSEvent)
{
int dummyParam = 10;
OS_CREATETASK_EX((OS_TASK*)&m_taskControl, name, collecttrampoline,
priority, m_userStack, (void*) dummyParam);
this->m_OS_EVENT = embOSEvent;
}
void collecttrampoline(void* a)
{
CollectTask* collectTask = static_cast<CollectTask*>(a);
return collectTask->MainLoop();
}
I am trying to use embOS and C++. My HW and SW platforms are Cortex M3 from ST and IAR EWARM 5.4.
I can get two tasks working, but when I try my code reaches wait/set event ("OS_EVENT_Set(this->m_OS_EVENT);"),
app jumps in Hard Fault Ex. Do you have any idea? Here is the code. Thanks.
CollectTask* collectTask;
ProcessTask* processTask;
static OS_EVENT osEvent;
int main(void)
{
initializeHardware();
OS_EVENT_Create(&osEvent);
collectTask = new CollectTask(50, "CollectTask", &osEvent);
processTask = new ProcessTask(40, "ProcessTask", &osEvent);
OS_Start();
return 0;
}
#if !defined(_PROCESSTASK_H)
#define _PROCESSTASK_H
#include "RTOS/RTOS.h"
class ProcessTask
{
private:
OS_TASK m_taskControl;
OS_STACKPTR int m_userStack[64];
OS_EVENT* m_OS_EVENT;
public:
ProcessTask(unsigned char priority, char* name, OS_EVENT* osEvent);
~ProcessTask(){};
void MainLoop(void);
};
#endif //_PROCESSTASK_H
#if !defined(_COLLECTTASK_H)
#define _COLLECTTASK_H
#include "RTOS/RTOS.h"
#include "EmbOSWrapper/EmbOSEvent.hpp"
class CollectTask
{
private:
OS_TASK m_taskControl;
OS_STACKPTR int m_userStack[64];
OS_EVENT* m_OS_EVENT;
public:
CollectTask(unsigned char priority, char* name, OS_EVENT* osEvent );
~CollectTask(){};
void MainLoop(void);
};
#include "CollectTask.hpp"
void collecttrampoline(void* a);
void CollectTask::MainLoop()
{
while(1)
{
OS_EVENT_Set(this->m_OS_EVENT);
OS_Delay(1000);
}
};
CollectTask::CollectTask(unsigned char priority, char* name, OS_EVENT* embOSEvent)
{
int dummyParam = 10;
OS_CREATETASK_EX((OS_TASK*)&m_taskControl, name, collecttrampoline,
priority, m_userStack, (void*) dummyParam);
this->m_OS_EVENT = embOSEvent;
}
void collecttrampoline(void* a)
{
CollectTask* collectTask = static_cast<CollectTask*>(a);
return collectTask->MainLoop();
}