Да я чёт не понимаю, откуда что вызываеть, сделал обработки прерываний, из них дергабтся функции, если это rx то вызывается функция которая по идее должна писать в очередь. Из обработки прерываний передатчика вызываю функцию проверки с состояния очереди на передачу и если не пуста получается рекурсивно передаю Правда это все без очередей пока) Не ясно че дальше делать как в ртос это обернуть и как быть с отправкой
Комментарии: 17
Serge
У очереди есть таймер, типа столько-то времени отводится на сунуть-вынуть. Можно поставить неограниченно. Из прерывания лучше не дергать очередь, лучше использовать deferred interrupt - в прерывании пинаем таску, которая работает с очередью, один пих за один пинок) это на случай если очередь занята и чтоб в прерывании не ждать, пока освободится
Andrey
Так как это, очередь для того и есть чтоб туда сообщения поставить А такск сам там с ними разберётся Его время когда придёт
Serge
Очередь у ртоса с двумя семафорами для потокобезопасности. Вот решил ты одновременно записать в очередь из таски и прерывания, то прерывание обломится, если таска успела первой захватить
Andrey
Я вот не понимаю такой момент, мне что нужно создать станлартный таск и сделать там ожидание данных в очереди и если они есть пихать в педатчик. Там есть send from isr Или это не то?
Serge
Который вернет тебе false, если очередь полная или ее семафор записи захвачен
Andrey
А захватят её когда будут из неё читать?
Serge
Так что лучше две очереди, на отправку и прием, т.е. паттерн один ко многим. Тогда писать в очередь отправки смогут все, а читать без обломов только прерывание
Andrey
По и дее записать то в очередь если есть место должно же уметь Ну так очереди разные на туда и сюда Я так планировал
Serge
Ну кто тебя знает, вдруг ты дофига оптимист)
Andrey
Прерывание rx пишет в очередь rx, прерывание tx читает из tx очереди Вопрос тут как с таскаси быть, мне что в нутри любого тачка можно сделать query send?
Serge
Тогда можно использовать send/receiveFromIsr.
Andrey
Но очереди я сосзадю как обычно? Как в примерах
Serge
Лучше сделать гейткипер, т.е. единственную точку входа-выхода для твоей периферии Да Блин. Давай я завтра с работы скину пример для уарта? Там у меня в стиле "если к жопе присобачить сопроцессор фирмы Cray")
Andrey
)) Было бы чудесно
Evgeniy
Лучше свести весь IO к функциям вида: int read(char * buff, int len, int timeout) и такую же write. Который пишут и читают из/в Fifo. Для передачи - dma + прерывание
Andrey
? Это тут причём?
Evgeniy
Чтобы сверху вниз делать, а не снизу вверх, начиная от очередкй