реклама на сайте
подробности

 
 
> Покритикуйте реализацию простейшего шедулера на C++, Разработано для 8ми битных контроллеров AVR
sigmaN
сообщение Feb 25 2017, 18:20
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Всем привет.
Вот тут на днях допилил свой Tiny таск шедулер. Основным требованием при реализации был минимальный оверхед во всем. Однако есть возможность конфигурировать его под разные задачи, опять же без оверхеда.

Хотелось бы услышать конструктивную критику, возможно предложение каких-то фич новых... В общем выкладываю с целью получения обратной связи.

В архиве проект Atmel Studio 7.0 с минимальной демонстрацией, можно погонять в симуляторе) Прикрепленный файл  TinyScheduler_ver5_Loki_.zip ( 175.14 килобайт ) Кол-во скачиваний: 53

Для тех у кого нет Atmel Studio вот ссылка на исходник шедулера http://pastebin.com/7YVSAFBn

Читайте комментарии в шапке файла. Там все подробности использования и настройки.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Feb 26 2017, 10:35
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
крутить свой счетчик для каждой из задач идея сама по себе редко когда удачная.
Я вот сейчас немного подумал и.... всё равно не придумал как можно сделать оптимальнее. Как мне кажется во всех вариантах будет еще один байт.

Цитата
timers[i] = (timers[i]>0)? (timers[i]-1):(timers[i]);
это как бы уже перебор.

Ну у меня 0 в счетчике это признак запуска задачи, так что проверять на 0 приходится.
Раньше было
Код
for(uint8_t i=0; i < TaskListLen; i++)
        {
            if( timers[i] > 0 )
              --timers[i];
        }
Это было на целых 2 байта длиннее! При прочих равных настройках оптимизации и т.д. Я, так сказать, подчинился основной цели и выбрал сэкономить 2 байта флэша путем ухудшения читабельности кода.

P.S.
Я ночью писал двольно длинную шапку коментов на английском, слушал выступления Скотта Майерса на CPPCon и в момент публицации этого вопроса на форуме у меня была полная голова фич, оверхеда и шедулеров ))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2017, 11:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sigmaN @ Feb 26 2017, 12:35) *
Я вот сейчас немного подумал и.... всё равно не придумал как можно сделать оптимальнее. Как мне кажется во всех вариантах будет еще один байт.

Про "еще один байт" не понял. Если у Вас цель какие-то байты экономить, а не такты, то так и напишите.
Для, например, 256 задач (реальный случай во времена i8080 2MHz) крутить 256 счетчиков - весь пар свисток уйдет. Да и не меньших количествах уже не подарок.
Такие тривиальные вещи вообще незачем делать "универсальными", если стоит задача сэкономить все и вся. Правильнее писать по месту, что для подобных вырожденных случаев ничуть не сложнее.
Цитата
Раньше было
if( timers[i] > 0 )
--timers[i];
Это было на целых 2 байта длиннее! При прочих равных настройках оптимизации и т.д.

Не верю! Если, вдруг, не одно и тоже, то первым шагом борьбы за что либо, следует выкинуть используемый компилятор.
А самое читабельное:
Код
if( timers[i] )
    timers[i]--;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sigmaN   Покритикуйте реализацию простейшего шедулера на C++   Feb 25 2017, 18:20
- - Herz   Цитата(sigmaN @ Feb 25 2017, 20:20) В общ...   Feb 25 2017, 20:32
- - sigmaN   Не поверите, написал фидбэка и исправил, вспомнив ...   Feb 25 2017, 21:37
- - zltigo   Цитата(sigmaN @ Feb 25 2017, 20:20) Основ...   Feb 26 2017, 05:24
- - Эдди   Скедулер, если что.   Feb 26 2017, 07:08
|- - Herz   Цитата(Эдди @ Feb 26 2017, 09:08) Скедул...   Feb 26 2017, 07:45
- - sigmaN   ЦитатаПро "еще один байт" не понял. Если...   Feb 26 2017, 12:47
|- - zltigo   Цитата(sigmaN @ Feb 26 2017, 14:47) Код ...   Feb 26 2017, 17:24
|- - zltigo   Цитата(sigmaN @ Feb 26 2017, 14:47) Предп...   Feb 26 2017, 20:10
- - sigmaN   Ладно, Бог с ними с компиляторами. Вы алгоритмом п...   Feb 26 2017, 17:41
- - sigmaN   Ну да, не крутить счетчики в прерывании это хороша...   Feb 26 2017, 23:51
- - sigmaN   Делюсь окончательным вариантом с учетом замечаний....   Feb 28 2017, 21:26
|- - AHTOXA   Цитата(sigmaN @ Mar 1 2017, 02:26) Делюсь...   Feb 28 2017, 22:09
||- - psL   Цитата(AHTOXA @ Mar 1 2017, 01:09) А вот ...   Mar 3 2017, 12:46
|- - Make_Pic   Цитата(sigmaN @ Mar 1 2017, 01:26) Делюсь...   Mar 1 2017, 03:57
- - uriy   sigmaN вы знаете о protothreads? Я не знаток С++ и...   Mar 1 2017, 05:08
|- - arhiv6   ЦитатаМаксимум C++ обертку можно сделать чтоб чуть...   Mar 3 2017, 07:02
- - sigmaN   ЦитатаА вот если бы это была не ссылка на pastebin...   Mar 1 2017, 14:03
- - sigmaN   Add: Даа, с protothreads не поспоришь. Максимум C...   Mar 1 2017, 20:15
- - uriy   Пожалуй единственное что мне не нравится в prototh...   Mar 3 2017, 04:22
|- - jcxz   Цитата(uriy @ Mar 3 2017, 06:22) Пожалуй ...   Mar 3 2017, 14:24
- - sigmaN   Кстати в С++17 ожидается поддержка Coroutines. Т.е...   Mar 3 2017, 14:48


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 22:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01549 секунд с 7
ELECTRONIX ©2004-2016