Не перестаю восхищаться операционной системой FreeRTOS. Маленькая, но удаленькая, столько всего может.
Написала проект под неё из трёх потоков.
Один поток принимает сообщения, а два других отправляют. И запустила. В начале что-то глюкнуло один раз, а потом заработало без единой потери.
- Ну, подумаешь, в начале что-то потерялось. Ничего страшного, - сказала я.
- Разобраться надо, - сказал СВ.
И пошла я, недовольная, разбираться…
И стала сообщения по одному отправлять.
Отправила одно сообщение – прочитала нуль.
Отправила два сообщения – прочитала сначала нуль, а потом первое сообщение. А второе застряло в очереди. И чтобы получить его, надо послать ещё одно…
Если поток сообщений непрерывный, то этого незаметно…
- Ну, подумаешь, - сказала я.
- Плохо, - сказал СВ, - думать надо…
И стала я думать. И вместо того, чтобы писать в конец очереди, я стала писать в начало.
Отправила одно сообщение – получила его.
Отправила два – и тоже получила.
Запустила поток – заработало без потерь.
И никаких нулей вначале.
- Ну, как? – спросила я.
- Плохо, - сказал СВ, - при большой нагрузке первые сообщения могут застрять в очереди навсегда…
- А что ты предлагаешь? – спросила я раздражённо.
- Не знаю, - сказал СВ. – Думать надо…
И пошла я «думать».
И запустила всё в отладчике, и прошлась по шагам по всем этапам. И нашла ошибку. После сброса неправильно формируется указатель по чтению.
Я подправила одну строчку кода, и всё заработало как надо.
- Ну, как? – спросила я.
- Пусть работает, - улыбнулся СВ.
Для тех, кому интересно, в файле queue.c строку:
pxQueue->pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( unsigned portBASE_TYPE ) 1U ) * pxQueue->uxItemSize );
я заменила на:
pxQueue->pcReadFrom = pxQueue->pcTail - pxQueue->uxItemSize;
Комментарии
Страницы
Название "загогулистое" -
"пикировщик" - от корня названия семейства микроконтроллеров "PIC".
А их программировать я думаю - не мне одной приходится.
Не все же такие, как mike, которым ничего не нужно, кроме, как высказавать своё недовольство жизнью по каждой из публикаций.
Так и знал: не сможет удержаться и перейдёт на личности. :))
>Не все же такие, как mike, которым ничего не нужно, кроме, как высказавать своё недовольство жизнью по каждой из публикаций.
Пока не все такие как mike.
Имхо.
Верно. На С и для пиков писал, и для атмелов, и для далласов. И даже внедрял в серию. И каждый раз казалось, что делаю что-то значительное... Плюсую за искренность автора.
Из моей эпопеи, которая никому и нахрен не нужна, очень запомнилось, что при программном создании БД логин/пароль указываются без =, но в '', а при 1-ом коннекте и создании таблиц без '', но с =. Тоже долго думал. :)
ОК, с остальным понятно.
Минусую за явный бред и бессмыслицу.
Ах, al, как я рассторилась из-за вашего минуса. Сейсас вот сижу и рыдаю, просто остановиться не могу. И мышка из рук вырывается и пищит.
Так отпустите её на волю. И клаву тоже. Зачем насиловать?
>Так отпустите её на волю. И клаву тоже.
На воле они погибают. имхо
Страницы