Перейти к содержанию
    

Покритикуйте реализацию простейшего шедулера на C++

Делюсь окончательным вариантом с учетом замечаний.

 

Сам планировщик:

http://pastebin.com/RqVLaFrJ

 

Проект Atmel Studio 7 для тестов и веселья TinyScheduler_ver6_ElecronixEDIT_.zip

 

P.S.

GCC опять веселит. Если собрать проект с оптимизацией -O1 то он почему-то окажется на 4 байта меньше, чем собранный с оптимизацией по размеру -Os

 

А вообще зачем здесь плюсы? - Только поиграться с шаблонами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sigmaN вы знаете о protothreads? Я не знаток С++ и мне сложно ориентироваться в коде. Какие у вас преимущетсва на фоне protothreads?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот если бы это была не ссылка на pastebin, а ссылка на репозиторий на github,
Да, надо там зарегиться наконец )

 

А вообще зачем здесь плюсы? - Только поиграться с шаблонами?
Поиграться с шаблонами - это раз. Получить хорошую реализацию, соответствующую всем принципам инкапсуляции - это да. Ну а задать вопрос "Зачем здесь плюсы?" можно к любому проекту. Ведь всё можно сделать и без плюсов ))

 

Какие у вас преимущетсва на фоне protothreads?
Никаких. У меня дёргалка функций с заданной частотой. protothreads же нацелен именно на создание "потоков" и обеспечение примитивов синхронизации потоков( PT_WAIT_UNTIL() и его производные ). Кстати нужно будет подумать как реализовать всё это на плюсах, со сравнимой эффективностью но без фокусов с препроцессором, к которым пришлось прибегнуть авторам protothreads... Интересная задачка на будущее кстати. Пока не уверен, что удастся побить по тактам их макросный фокус со switch()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Add:

Даа, с protothreads не поспоришь. Максимум C++ обертку можно сделать чтоб чуть красиее было и всё. А внутри сложно поспорить по эффективности с одной переменной и switch'ем, причем очень удобно замаскированным и невидимым для пользователя ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуй единственное что мне не нравится в protothreads, я не соображу как ее сделать ticlkess для low power приложений.

Недавно перенес планировщик от NRF51822 на STM8L когда используются пара виртуальных таймеров все отлично работает.

Когда начинаю их активно останавливать/запускать начинаются глюки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Максимум C++ обертку можно сделать чтоб чуть красивее было и всё.

уже было такое: https://github.com/benhoyt/protothreads-cpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот если бы это была не ссылка на pastebin, а ссылка на репозиторий на github, то вместо того, чтобы перечитывать заново весь исходник, можно было бы посмотреть diff...

Это так, намёк:)

кстати, репозиторий необязателен, т.к. для расшаривания небольших сниппетов есть https://gist.github.com/ с поддержкой контроля версий

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуй единственное что мне не нравится в protothreads, я не соображу как ее сделать ticlkess для low power приложений.

А в чём проблема? Заменяете периодические прерывания по системному таймеру на программирование таймера на прерывание в момент времени ближайшего таймерного события одной из задач.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати в С++17 ожидается поддержка Coroutines. Т.е. мы будем иметь продвинутые С++ protothreads прям в ядре языка!

https://youtu.be/_fu0gx-xseY

https://youtu.be/8C8NnE1Dg4A

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...