|
Система, управляемая событиями и SST(super-simple tasker), Выделено из "ООП. Классы и динамические объекты" |
|
|
|
Sep 7 2016, 09:07
|
Профессионал
    
Группа: Свой
Сообщений: 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-ами(с ихними стеками - куча кода было написано для анализа программ на предмет нужного обьема стека, и теперь эта куча кода отправлена на мусорку) со всеми этими тяжеленными мютексами, семафорами, вечными циклами как страшный сон.
Если кому интересно - расскажу и покажу как это все работает.
|
|
|
|
|
 |
Ответов
|
Sep 8 2016, 07:27
|
Профессионал
    
Группа: Свой
Сообщений: 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"); Сильно сложно? Цитата " ... эээ как я отстал... Почитайте еще про функциональное программирование
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 3 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|