embOS, IAR EWARM & C++ Problem

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • embOS, IAR EWARM & C++ Problem

    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();
    }