|
STM32F407: Ethernet, HAL + Lwip |
|
|
|
 |
Ответов
|
Jan 16 2017, 14:22
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
В зависимости от текста... Как правило непредсказуемыми последствиями... Здесь давече была тема про атомарный доступ к таким переменным. Не хочу вступать в полемику, так как в программировании, одну и туже задачу можно десятком способов решить... Я обычно решаю так: Есть задачи А, Б, С. Например задача А выставляет какой то запрос флагом фА. Задачи Б и С могут его прочитать, но не сбросить! Задача Б по флагу фА подтверждает запрос выставив флаг фБ. По флагу фБ задача А сбрасывает флаг фА. То есть Одна задача только читает, вторая только пишет. Найболее яркий пример реализации в протоколе centronix. Если всё же не избежать взаимных колизий, то использую защищённую секцию, либо средства самой ОС. Ну в зависимости, от частоты события... === Ну приведу классическую работу с кольцевым буфером: 1. При поступлении символа либо пакета, в прерывании двигается хвост очереди tail. 2. В задаче, после обработки пакета - двигается голова очереди head. Вроде всё класс. Но вам требуется определить размер доступных данных... Ну типа так.. len = tail - head; if(len <0) len += sizebuf; .... И здесь видно, что во время операции len = tail - head, значение tail может измениться в прерывании (например пришёл пакет, и указатель сдвинулся по кольцу). В результате вы можете получить значение совершенно неверное. Дабы это предотвратить, вы должны например запретить прерывание на эту операцию. Либо приостановить планировщик, если речь не о прерывании, а о задачах.
Для FreeRTOS: taskENTER_CRITICAL() — вход в критическую секцию taskEXIT_CRITICAL() — выход из критической секции vTaskSuspendAll() - Приостановка планировщика xTaskResumeAll() - возобновления работы планировщика
Если приложение написано верно, то таких мест будет крайне мало... У меня их единицы. Но всё же они есть.
|
|
|
|
Сообщений в этой теме
k000858 STM32F407: Ethernet, HAL + Lwip Jan 12 2017, 07:11 pitt Цитата(k000858 @ Jan 12 2017, 02:11) Пока... Jan 12 2017, 15:38 Мур Сам долго мучился с HAL, пока не скачал книгу
Mas... Jan 12 2017, 15:51 k000858 спасибо за советы. определенный смысл в них конечн... Jan 13 2017, 03:43 pitt Цитата(k000858 @ Jan 12 2017, 22:43) спас... Jan 13 2017, 13:13 SasaVitebsk Насколько вы описали проблему, мне кажется, что пр... Jan 13 2017, 18:12 k000858 Цитата(SasaVitebsk @ Jan 13 2017, 21:12) ... Jan 16 2017, 04:44  Forger Цитата(k000858 @ Jan 16 2017, 07:44) тако... Jan 16 2017, 14:24   SasaVitebsk Цитата(Forger @ Jan 16 2017, 17:24) Лично... Jan 16 2017, 21:16   Aner QUOTE (Forger @ Jan 16 2017, 18:24) Курим... Jan 16 2017, 21:51    Сергей Борщ QUOTE (Aner @ Jan 16 2017, 23:51) С++ и е... Jan 17 2017, 06:50     SasaVitebsk Цитата(Сергей Борщ @ Jan 17 2017, 09:50) ... Jan 17 2017, 07:19      Forger Синглтон я указал как самый популярный способ избе... Jan 17 2017, 08:29      Сергей Борщ QUOTE (SasaVitebsk @ Jan 17 2017, 09:19) ... Jan 17 2017, 12:12       Forger Цитата(Сергей Борщ @ Jan 17 2017, 15:12) ... Jan 17 2017, 14:32        SasaVitebsk Цитата(Forger @ Jan 17 2017, 17:32) Конеч... Jan 17 2017, 15:42         Forger Цитата(SasaVitebsk @ Jan 17 2017, 18:42) ... Jan 17 2017, 15:58        Сергей Борщ QUOTE (Forger @ Jan 17 2017, 16:32) Сингл... Jan 18 2017, 09:18         Forger Цитата(Сергей Борщ @ Jan 18 2017, 12:18) ... Jan 18 2017, 09:48     pitt Цитата(Сергей Борщ @ Jan 17 2017, 01:50) ... Jan 17 2017, 14:18  pitt Цитата(k000858 @ Jan 15 2017, 23:44) тако... Jan 16 2017, 16:03 SasaVitebsk Стиль написания, конструирование программы и язык ... Jan 17 2017, 22:21 Forger Цитата(SasaVitebsk @ Jan 18 2017, 01:21) ... Jan 17 2017, 23:00  SasaVitebsk Цитата(Forger @ Jan 18 2017, 02:00) По ст... Jan 19 2017, 12:47   scifi Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ... Jan 19 2017, 12:59   Forger Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ... Jan 19 2017, 13:04 SasaVitebsk Посмотрите с чего начиналась тема. Начали гнать на... Jan 17 2017, 23:48 Forger Цитата(SasaVitebsk @ Jan 18 2017, 02:48) ... Jan 18 2017, 00:13  pitt Цитата(Forger @ Jan 17 2017, 19:13) На С+... Jan 18 2017, 13:43   Forger Цитата(pitt @ Jan 18 2017, 16:43) Вообще,... Jan 18 2017, 19:31    pitt Цитата(Forger @ Jan 18 2017, 14:31) На са... Jan 19 2017, 04:35     Forger Цитата(pitt @ Jan 19 2017, 07:35) Блажен,... Jan 19 2017, 06:52      pitt Цитата(Forger @ Jan 19 2017, 01:52) А дру... Jan 19 2017, 13:28       Forger Классика жанра: вопрос -> холивар -> срач -... Jan 19 2017, 13:34 SasaVitebsk На счёт грамотного проектирования - ктож с вами сп... Jan 18 2017, 08:32 k000858 не соглашусь
темы подобного рода создаю в части с... Jan 19 2017, 16:31 Forger Цитата(k000858 @ Jan 19 2017, 19:24) не с... Jan 19 2017, 16:34 SasaVitebsk Цитата(k000858 @ Jan 19 2017, 19:31) проб... Jan 19 2017, 20:19  k000858 Цитата(SasaVitebsk @ Jan 19 2017, 23:19) ... Jan 20 2017, 05:54   Forger Цитата(k000858 @ Jan 20 2017, 08:54) В пр... Jan 20 2017, 06:00 SasaVitebsk Ну в принципе, здесь возможны 4 ошибки.
1. класси... Jan 20 2017, 08:08 Forger Если проектировать код похожим образом (на C++ без... Jan 20 2017, 08:20 SasaVitebsk Уважаемый Forger. Мы вас уже поняли. Надо проект о... Jan 20 2017, 12:22 pitt Цитата(SasaVitebsk @ Jan 20 2017, 07:22) ... Jan 20 2017, 13:22  Forger Навеяло (ничего личного) ... Jan 20 2017, 17:38   pitt Цитата(Forger @ Jan 20 2017, 12:38) Навея... Jan 20 2017, 22:11    Forger Цитата(pitt @ Jan 21 2017, 01:11) По-види... Jan 20 2017, 22:19     pitt Цитата(Forger @ Jan 20 2017, 17:19) Не ст... Jan 21 2017, 04:19 k000858 все оказалось проще: в одной задаче действительно ... Jan 23 2017, 07:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|