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

 
 
> Система, управляемая событиями и SST(super-simple tasker), Выделено из "ООП. Классы и динамические объекты"
brag
сообщение Sep 7 2016, 09:07
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Недавно я начал пользоваться динамической памятью. Раньше пользовался только статикой, то есть placement new. Со статикой сложно работать с такими шаблонами, как фабрика обьектов, временные задачи итд.
Программирую в основном под cortex-m3/m4
Код реализации аллокатора вышел довольно простым и быстрым, критически секции есть, но очень короткие(там прочитать/записать пару байт).
При чем я не использую этих всяких монстров под названием RTOS, у меня свой простейший асинхронный планировщик задач, занимает строк 300 кода с комментариями(погуглите запрос "super simple tasker", поймете что это).
В купе с динамическим аллокатором, variable element-size queue, новыми фишками C++ (шаблоны, лямбда-функции, auto) получается очень простой, безопасный и мощный фреймворк.
Вспоминаю работу с классическими Thread-ами(с ихними стеками - куча кода было написано для анализа программ на предмет нужного обьема стека, и теперь эта куча кода отправлена на мусорку) со всеми этими тяжеленными мютексами, семафорами, вечными циклами как страшный сон.

Если кому интересно - расскажу и покажу как это все работает.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
brag
сообщение Sep 8 2016, 07:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Ну давайте не будем путать всё в кучу. Это решение чисто архитектурное. Инкапсулировать всё в объект и наружу вывести события. Это не коим образом не означает, что внутри этот объект не работает в двух потоках wink.gif

Нет, физически там один поток и один стек.

Цитата
Допустим, надо стереть flash-память, что длится до 10 секунд. По теории SST для этого случая (события!) нужно создать свою задачу. Пропади пропадом такая ОС.

Если Вы не поняли как это работает и как этим пользоваться, то это не значит, что это работает плохо или этим неудобно пользоваться.
Цитата
Ну почему же обязательно создавать задачу. Стирание флэша может быть ветвлением одной из существующих задач.... Т.е. аргумент как-бы не очень объективный )

Для стирания флеша(физически) надо всего лишь:
1. Передать несколько байт через SPI (команда стирания, возможно команда разблокировки - RWEN) и слесть с шины.
2. Через некоторое время(по таймеру) опять занять шину и проверить -стерлось или нет. Если стерлось - все, готово. Если нет - опять запустить таймер.
Но это если на шине только одна флешка. А если там еще что-то - понадобится задача. В принципе ничем не сложнее первого варианта, только действия выполняем не сразу, а в теле задачи. И когда шина освободится выполнится тело задачи и флешка будет стерта.

Все эти действия выполняет не пользователь, а класс,работающий с флешкой.
Вот как это выглядит в реально работающем проекте, только принты переписал на русские, чтоб было понетнее:
Код
    // Запускаем стирание флешки
    df->MassErase([this](){
        // получаем уведомление, что флешка стерта. Этот код выполнится аж через 10 секунд после запуска стирания.
        printf("Теперь флешка чистая.\n");
    });
    printf("Стирание флешки запущено, обратно пути нет\n");

Сильно сложно?

Цитата
" ... эээ как я отстал...

Почитайте еще про функциональное программирование sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- brag   Система, управляемая событиями и SST(super-simple tasker)   Sep 7 2016, 09:07
- - sigmaN   Ну так извините меня, классические, как вы говорит...   Sep 7 2016, 10:07
- - Serhiy_UA   Цитата(brag @ Sep 7 2016, 12:07) Не очень...   Sep 7 2016, 10:24
- - brag   ЦитатаНапример если у вас хотя-бы одна из задач бу...   Sep 7 2016, 11:56
|- - Serhiy_UA   brag, Спасибо за пояснения!   Sep 7 2016, 12:16
|- - arhiv6   Цитата(brag)Если кому интересно - расскажу и покаж...   Sep 7 2016, 12:18
- - AHTOXA   Цитата(brag @ Sep 7 2016, 14:07) Если ком...   Sep 7 2016, 12:17
- - Kabdim   Цитата(brag @ Sep 7 2016, 12:07) Если ком...   Sep 7 2016, 12:36
- - brag   ЦитатаПрисоединюсь к интересующимся. Если я правил...   Sep 7 2016, 12:47
|- - AlexandrY   Цитата(brag @ Sep 7 2016, 15:47) Я конечн...   Sep 7 2016, 13:48
- - brag   ЦитатаВытесняющая асинхронная многозадачность сейч...   Sep 7 2016, 13:57
- - sigmaN   Очень интересно. Видимо этот SST прошел мимо меня....   Sep 7 2016, 15:50
- - brag   Все, что мы теряем отказываясь от классических тре...   Sep 7 2016, 16:20
- - DASM   Что то не пойму, речь о кооперативной "оси...   Sep 7 2016, 16:43
- - sigmaN   Никто же не мешает организовать обмен ивентами и в...   Sep 7 2016, 17:04
- - brag   ЦитатаЧто то не пойму, речь о кооперативной ...   Sep 7 2016, 17:14
- - sigmaN   Наврено правильно сравнивать реализацию вещей обес...   Sep 7 2016, 18:37
|- - arhiv6   Цитата(DASM)Что то не пойму, речь о кооперативной ...   Sep 7 2016, 19:01
- - DASM   Спасибо, интересно, почитал.   Sep 7 2016, 19:37
- - brag   ЦитатаВ то время как в классической модели я могу ...   Sep 7 2016, 20:04
- - DASM   Ну я бы не стал столь восторженно писать, не могут...   Sep 7 2016, 20:43
|- - brag   Цитата(DASM @ Sep 7 2016, 23:43) Ну я бы ...   Sep 7 2016, 21:32
- - sigmaN   ЦитатаДа и PC мир уже давно переходит на event-ы.....   Sep 8 2016, 00:18
- - DASM   а что такое "императивный код"? https://...   Sep 8 2016, 00:52
- - arhiv6   Императивное программирование   Sep 8 2016, 02:23
- - DASM   "В этом случае программа представляет собой ф...   Sep 8 2016, 02:37
- - ViKo   Допустим, надо стереть flash-память, что длится д...   Sep 8 2016, 04:35
- - sigmaN   Ну почему же обязательно создавать задачу. Стирани...   Sep 8 2016, 07:03
- - ViKo   Ветвление, это что? После стирания нужно дальше р...   Sep 8 2016, 07:17
- - sigmaN   ЦитатаНет, физически там один поток и один стек. Х...   Sep 8 2016, 07:31
|- - brag   Цитата(sigmaN @ Sep 8 2016, 10:31) Хотело...   Sep 8 2016, 07:38
- - ViKo   Слезть с шины, и что делать? Висеть в задаче без ...   Sep 8 2016, 07:39
|- - brag   Цитата(ViKo @ Sep 8 2016, 10:39) Слезть с...   Sep 8 2016, 08:16
- - 501-q   Приветствую! Модель SST хорошо работает до то...   Sep 8 2016, 07:55
- - sigmaN   ЦитатаКонечо. При чем написанного на языке Javascr...   Sep 8 2016, 08:19
- - brag   ЦитатаПриветствую! Модель SST хорошо работает...   Sep 8 2016, 08:25
- - sigmaN   Прям с удовольствием потестирую ))))) Особенно со...   Sep 8 2016, 08:33
- - DASM   На самом деле мы наверное действительно отстали от...   Sep 8 2016, 08:37
- - brag   ЦитатаВсе же Javascript для эмбеддед старого добро...   Sep 8 2016, 08:45
- - arhiv6   brag, на сколько я понял, в обычном SST пока задач...   Sep 8 2016, 08:47
- - brag   ЦитатаНу как бы с идеей SST крутится всякая мелкая...   Sep 8 2016, 08:48
- - sigmaN   Ладно бы товарищ просто говорил что ребят, так про...   Sep 8 2016, 08:54
|- - AHTOXA   Цитата(sigmaN @ Sep 8 2016, 13:54) Но у н...   Sep 8 2016, 09:04
- - brag   Цитатаbrag, на сколько я понял, в обычном SST пока...   Sep 8 2016, 09:11
- - sigmaN   ЦитатаПоэтому и в сях сейчас развивают асинхронное...   Sep 8 2016, 09:16
- - brag   ЦитатаЭто когда куча сокетов в массиве а потом в ц...   Sep 8 2016, 09:22
- - sigmaN   ЦитатаВы все равно ничего не поняли. Ключевое слов...   Sep 8 2016, 09:33
|- - brag   Цитата(sigmaN @ Sep 8 2016, 12:33) Могу в...   Sep 8 2016, 09:45
|- - DASM   Цитата(brag @ Sep 8 2016, 12:45) Для безо...   Sep 8 2016, 09:49
|- - brag   Цитата(DASM @ Sep 8 2016, 12:49) В случае...   Sep 8 2016, 09:58
- - DASM   а не в безопастности ли выполнения коренное различ...   Sep 8 2016, 09:39
- - sigmaN   ЦитатаWaitForMultipleObjects блокирует пользовател...   Sep 8 2016, 09:53
- - sigmaN   ЦитатаХотя даже с гиговым файлом/файлами однопоточ...   Sep 8 2016, 09:58
- - brag   ЦитатаНу во-первых там есть таймаут. Так что поток...   Sep 8 2016, 10:13
|- - arhiv6   brag, спасибо за ответ. Но всё-равно не всё понятн...   Sep 8 2016, 10:14
- - brag   arhiv6 , Вы путаете задачу и обработчик события. Э...   Sep 8 2016, 10:26
|- - arhiv6   brag, спасибо большое за разъяснение, теперь всё п...   Sep 8 2016, 10:52
|- - brag   Цитата(arhiv6 @ Sep 8 2016, 13:52) [/b]br...   Sep 8 2016, 10:57
- - sigmaN   ЦитатаНу как оно физически, да еще и под виндой я ...   Sep 8 2016, 10:34
- - brag   ЦитатаВот тут то мы и начинаем докапываться до сут...   Sep 8 2016, 10:47
- - sigmaN   Лаадно, тогда вы проводите правильный тест, выклад...   Sep 8 2016, 11:34
- - brag   Еще огромное преимущество SST-модели в том, что та...   Sep 8 2016, 11:40
|- - AlexandrY   Цитата(brag @ Sep 8 2016, 14:40) Ок, дела...   Sep 8 2016, 12:39
- - sigmaN   Вы видимо думаете, что мы тут все совсем темные, д...   Sep 8 2016, 12:34
- - brag   ЦитатаВ MQX есть в том числе и ваша гениальная иде...   Sep 8 2016, 12:42
|- - AlexandrY   Цитата(brag @ Sep 8 2016, 15:42) SST - эт...   Sep 8 2016, 13:03
|- - brag   Цитата(AlexandrY @ Sep 8 2016, 16:03) SST...   Sep 8 2016, 15:18
- - Kabdim   А топик так хорошо начинался. Тоже что ли залезт...   Sep 8 2016, 12:51
- - brag   Хух, сишный клиент осилил. То segfault схлопнешь, ...   Sep 8 2016, 17:22
|- - psL   Цитата(brag @ Sep 8 2016, 20:22) 1000 пот...   Sep 9 2016, 20:59
- - sigmaN   Интересный способ проверить сколько потоков может ...   Sep 8 2016, 17:44
- - brag   ЦитатаА мы уверены, что все клиенты параллельно ка...   Sep 8 2016, 19:21
- - Herz   Поступило предложение тему разделить и основное об...   Sep 8 2016, 19:38
|- - AHTOXA   Цитата(Herz @ Sep 9 2016, 00:38) Поступил...   Sep 8 2016, 21:03
|- - Serhiy_UA   Цитата(Herz @ Sep 8 2016, 22:38) Поступил...   Sep 9 2016, 04:53
- - brag   Возражений нет, но я не автор. Про аллокатор у мен...   Sep 8 2016, 20:04
- - sigmaN   Как весело мы ушли в сторону от обсуждения планиро...   Sep 8 2016, 20:43
- - brag   NodeJS свободно может работать без ОС и потоков во...   Sep 8 2016, 21:10
- - shreck   2brag В приведенном вами коде проскакивает Кодdel...   Sep 9 2016, 02:16
- - brag   ЦитатаХотя интересно было узнать то, что помимо ст...   Sep 9 2016, 06:12
|- - Serhiy_UA   Цитата(brag @ Sep 9 2016, 09:12) dew/dele...   Sep 9 2016, 07:23
|- - brag   ЦитатаОчень бы хотелось увидеть как бы вы обслужив...   Sep 9 2016, 07:47
- - sigmaN   Очень бы хотелось увидеть как бы вы обслуживали мн...   Sep 9 2016, 07:36
- - sigmaN   Всё всё, хватит, мы уже поняли что на Node.js можн...   Sep 9 2016, 07:52
|- - alexunder   Цитата(sigmaN @ Sep 9 2016, 09:52) Всё вс...   Sep 9 2016, 07:57
|- - brag   Цитата(alexunder @ Sep 9 2016, 10:57) Вер...   Sep 9 2016, 08:00
|- - alexunder   Цитата(brag @ Sep 9 2016, 10:00) Естестве...   Sep 9 2016, 08:16
- - brag   Так я уже показал, как я работаю с Датафлеш. Приве...   Sep 9 2016, 07:57
- - brag   Сделал сервер сишный блокирующий многопоточний. Ка...   Sep 9 2016, 08:26
- - Сергей Борщ   Почерпнул много интересного из этого обсуждения. П...   Sep 9 2016, 09:36
- - brag   Сергей Борщ, это называется Partial Template Speci...   Sep 9 2016, 09:58
- - sigmaN   Да, я тоже могу сказать, что узнал что-то новое из...   Sep 9 2016, 10:42
- - brag   ЦитатаДля начала давайте определимся, что любой об...   Sep 9 2016, 11:55
- - sigmaN   Кстати справедливости ради надо добавить, что идея...   Sep 9 2016, 19:24
- - brag   Smalltalk прикольная штука, но не прижилась. Но та...   Sep 9 2016, 20:04
- - sigmaN   Цитатавсе - вы программируете асинхронно, пора вык...   Sep 9 2016, 20:21
- - brag   Ок, с фанатичностью убавим Мне тоже лень было, но...   Sep 9 2016, 20:51
- - sigmaN   ЦитатаВидимо гуру не знает, что "Сервак на No...   Sep 9 2016, 22:16
- - brag   ЦитатаКаждый поток в линукс создается со стеком ~8...   Sep 10 2016, 05:21
3 страниц V   1 2 3 >


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 03:46
Рейтинг@Mail.ru


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