-
- Я бы разделил приоритеты и количество задач на каждом приоритете. Скажем, каждая задача помнит, что ей надо сделать N отправок. Сама. А арбитр просто имеет одно слово флагов. Если какая-то задача хочет что-то отправить, то она взводит арбитру свой Николай Коровин(568 знак., 29.03.2018 10:53 - 10:56)
- я делал отдельные сервисы и к ним очереди тикетов на транзакции. перед транзакцией выполнялся поиск в очереди по приоритету. иногда делал пару очередей, в которых одна более приоритетная для "инжекций" и с выделением "полосы"(например, Vit(936 знак., 29.03.2018 09:38)
- RTOS и массивы структур - это особенности реализации, для организации обмена это совсем необязательно, нужно вначале с принципами выделения ресурса определиться - кому когда что нужно. - VLLV(29.03.2018 09:05)
- Проанализирую, навели на одну мысль. Может и получится переиграть на более простой подход. - Dingo(29.03.2018 10:50)
- Элементарно. Сделать арбитра. Задачи запрашивают доступ к периферии с указанием приоритета. Ну или приоритеты уже вбиты по номеру задачи. SciFi(152 знак., 29.03.2018 08:08 - 08:14)
- Переосмыслил, упростил, получилось что-то такое : Dingo(652 знак., 29.03.2018 13:40)
- а ларчик просто открывался... - SciFi(29.03.2018 13:42)
- ..."Понятно, что прерывать обмен на середине нельзя"... !!! Приоритеты тут вообще не при делах.Очередь нужна. - PlainUser(29.03.2018 09:56)
- Нужна очередь с приоритетами. То есть так примерно: Dingo(240 знак., 29.03.2018 10:27)
- Там целую науку навели --> - SciFi(29.03.2018 10:31, ссылка)
- Попадались простые реализации? (пошёл читать). - Dingo(29.03.2018 10:33)
- Можно слепить на коленке за 5 минут. Навскидку: делаем FIFO, каждый элемент - это номер задачи с приоритетом. Для выбора следующего сканируем FIFO целиком, ищем высший приоритет, потом затираем выбранный элемент, чтобы не сдвигать всю очередь. Ну SciFi(93 знак., 29.03.2018 10:38)
- Тогда уж связанный список. Или, чтобы с не дёргать malloc/free - массив структур, в которых есть необходимая инфа ( номер следующей структуры, приоритет, ...). Поэтому и была мысль про указатель на функцию. Или же вами предложенные ФИФО в Dingo(81 знак., 29.03.2018 10:47)
- Вот: SciFi(1301 знак., 29.03.2018 11:08)
- При фифо непрозрачно как-то. Нужно почитать про аппаратную структуру контроллера прерываний и реализовать ее программно :) Массив структур запросов. Индекс массива - код задачи, в структуру входит номер приоритета, запрос есть/нет/выполняется, ну VLLV(70 знак., 29.03.2018 11:32)
- Кому прозрачно, кому - нет... Зато дёшево, надёжно и практично. - SciFi(29.03.2018 11:39)
- Снимаю шляпу: я так быстро код писать не умею! :'( - Dingo(29.03.2018 11:12)
- Там косяк: когда сдвигаем указатель хвоста, нужно проверять, что следующий не стёрт, и при необходимости сдвигать дальше: SciFi(369 знак., 29.03.2018 11:23)
- При фифо непрозрачно как-то. Нужно почитать про аппаратную структуру контроллера прерываний и реализовать ее программно :) Массив структур запросов. Индекс массива - код задачи, в структуру входит номер приоритета, запрос есть/нет/выполняется, ну VLLV(70 знак., 29.03.2018 11:32)
- Вот: SciFi(1301 знак., 29.03.2018 11:08)
- Тогда уж связанный список. Или, чтобы с не дёргать malloc/free - массив структур, в которых есть необходимая инфа ( номер следующей структуры, приоритет, ...). Поэтому и была мысль про указатель на функцию. Или же вами предложенные ФИФО в Dingo(81 знак., 29.03.2018 10:47)
- Можно слепить на коленке за 5 минут. Навскидку: делаем FIFO, каждый элемент - это номер задачи с приоритетом. Для выбора следующего сканируем FIFO целиком, ищем высший приоритет, потом затираем выбранный элемент, чтобы не сдвигать всю очередь. Ну SciFi(93 знак., 29.03.2018 10:38)
- Попадались простые реализации? (пошёл читать). - Dingo(29.03.2018 10:33)
- Там целую науку навели --> - SciFi(29.03.2018 10:31, ссылка)
- Приоритеты есть в ТЗ, уважаемый. А очередь без приоритетов я уже делал, кстати: SciFi(940 знак., 29.03.2018 10:04)
- А наоборот — приоритеты без очереди, которые я выше написал? Просто не совсем понятно, нужна ли там очередь. Из задачи этого не следует. - Николай Коровин(29.03.2018 13:40)
- Нужна очередь с приоритетами. То есть так примерно: Dingo(240 знак., 29.03.2018 10:27)
- Переосмыслил, упростил, получилось что-то такое : Dingo(652 знак., 29.03.2018 13:40)