leOS — многозадачное ядро для Arduino

    Итальянский разработчик Леонардо Милиани выложил в открытый доступ исходники leOS (little embedded operating system) – маленького многозадачного ядра для Arduino. В своем блоге он пишет:
    To be honest, it should more correct to say that leOS is actually something that is halfway a simple prototype of an real-time operating system (RTOS) and a scheduler. [...]
    leOS can run simple tasks that don’t require excessive CPU time but it can be useful in all of those situations where the user wants to let a task run itself out of the main loop.

    Ядро leOS обеспечивает диспетчеризацию вызовов пользовательских функций согласно заданным временным интервалам. Для этого leOS использует аппаратный Timer2 для отсчета интервалов между вызовами пользовательских функций, поэтому теряется доступ к функциям ШИМ на пинах D3 и D11. В ядре используется 64-битный счетчик, так что переполнение планировщика произойдет только через 584 942 417 лет.

    Для использования leOS необходимо подключить библиотеку и создать экземпляр класса:
    #include "leOS.h"
    leOS myOS;
    

    Подключение пользовательской функции к планировщику выполняется с помощью метода addTask():
    void setup() {
      myOS.begin();
      myOS.addTask(myFunction, interval);
      ....
    }
    

    Больше информации и исходные коды leOS можно найти здесь.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 13

      0
      Было бы здорово, если бы кто-то примером показал, как к ардуино из коробки прикрутить эту штуку.
        +1
        В архиве есть вполне нормальное Readme, и примеры в папке examples. Скачали, разархивировали в библиотеки, и можно работать. Пример скетча с двумя светодиодами:

        //include the OS
        #include "leOS.h"
        leOS myOS; //create a new istance of the class leOS
        
        //variabiles to control the LEDs
        byte led1Status = 0;
        byte led2Status = 0;
        const byte LED1 = 7;
        const byte LED2 = 8;
        
        //program setup
        void setup() {
            myOS.begin(); //initialize the scheduler
            pinMode(LED1, OUTPUT);
            pinMode(LED2, OUTPUT);
            
            //add the tasks at the scheduler
            myOS.addTask(flashLed1, 600);
        }
        
        //main loop
        void loop() {
            digitalWrite(LED2, led2Status);
            led2Status ^= 1;    
            delay(1000);
        }
        //first task
        void flashLed1() {
            led1Status^=1;
            digitalWrite(LED1, led1Status);
        }
        
        –12
        Игрушка в игрушке. Зачем? Чтобы поиграться и забросить? Не могу себе представить никакого способа применения этого «многозадачного ядра». Очень хочется заминусовать разработчика этой бесполезной вещи для еще более бесполезной вещи.
          0
          Вы совершенно правы. Ядро планирую использовать в такой игрушке:
          Робот с контроллером

          Крупнее

          Плата управления на базе MEGA32U4 самодельная, изготовленная по технологии ЛУТ. Прошивка от Arduino Leonardo.
            0
            Память микроконтроллера ATmega не резиновая, и её всегда не хватает. Когда Вы попытаетесь применить в своем проекте «многозадачное ядро для Arduino», то очень быстро поймете, что ресурсам процессора можно было бы найти гораздо более полезное применение.
          0
          Хорошее начинание, но пока игрушка — кроме шедуллера ничего нет?

          Про память тоже непонятно, с теми крохотными размерами ОЗУ и из ОС иногда упираешься.
            +1
            * и без ОС иногда память заканчивается
            +1
            Вроде DiHalt тоже разрабатывал многозадачную «ОС» для AVR-овских микропроцессоров.

            Там была не только диспетчеризация, но и куча других плюшек.
              0
              Разрабатывал и активно сейчас юзаю наработки. Вот только на определенном этапе понял, что мне от ос кроме диспетчера, службы таймеров и (в некоторых случаях) подобия виртуальной машины больше ничего и не нужно. Потому дальше фичи наворачивать не стал.
              0
              FreeRTOS же есть для нескольких десятков платформ, а тут какая-то AVR-only поделка.
                0
                А как с FreeRTOS использовать скетчи и библиотеки Arduino?
                  0
                  Переписать на си.
                  0
                  Тут, наверное, спорить нет смысла. Критерии по которым выбирают тот или иной инструмент могут быть разными. Мне, например, этот диспетчер нравится тем, что он встраивается в существующее окружение Arduino без дополнительных запилов на C.

                Only users with full accounts can post comments. Log in, please.