/RtosWrapper

Primary LanguageCMIT LicenseMIT

RTOS wrapper for students

This the example of RTOS wrapper for FreeRTOS for Stm32F411 microcontroller

To use the wrapper, it needs to copy the next folder:

– CMSIS

– Rtos

also it needs to define forceinline macros (#define forceinline _Pragma("inline=forced") for IAR) in Rtos\wrapper\FreeRtos\rtosdefs.hpp file See more information on https://habr.com/ru/post/420467/

Example of creating a task:

using namespace OsWrapper ;
class MyTask : public Thread<static_cast<std::size_t>(StackDepth::minimal)>
{

public:
  virtual void Execute() override
  {
    while(true)
    {
      if (button.IsPressed())
      {
        event.Signal();
      }
      Sleep(300ms);
  }

  MyTask(OsWrapper::Event& event, UserButton& button) : event(event), button(button)
  {
  }
private:
  OsWrapper::Event& event;
  UserButton& button ;
} ;

and another task:

class Led1Task : public OsWrapper::Thread<128U>
{
public:
  virtual void Execute() override
  {
    for(;;)
    {
      if (event.Wait() != 0)
      {
        ledsCntr.NextMode();
      }
      ledsCntr.Update();
    }
  }

  Led1Task(OsWrapper::Event& event, LedsController& controller) : event(event), ledsCntr(controller)
  {
  }
private:
  OsWrapper::Event& event ;
  LedsController& ledsCntr;
} ;

and used it

OsWrapper::Event event{500ms, 1};

MyTask myTask(event, UserButton::GetInstance());
Led1Task led1Task(event);

int main()
{
 using namespace OsWrapper;
 Rtos::CreateThread(myTask, "myTask", ThreadPriority::lowest);
 Rtos::CreateThread(led1Task, "Led1Task");
 Rtos::Start();

return 0;
}

How to run the example

It needs to copy CortexLib (https://github.com/lamer0k/CortexLib) to have the next folder structure:

 - CortexLib
   -- AbstractHardware
   -- Common
 - RtosWrapper
   -- AHardware
   -- Application
   -- CMSIS
   -- Common
   -- MyTasks
   -- Rtos

Then it is possible to just open the RtosWrapper directory in the JetBrains Clion. Or if you use IAR 8.40.2 open the test.eww workspace or iarproject.ewp project.