Да я чёт не понимаю, откуда что вызываеть, сделал обработки прерываний, из них дергабтся функции, если это rx то вызывается функция которая по идее должна писать в очередь. Из обработки прерываний передатчика вызываю функцию проверки с состояния очереди на передачу и если не пуста получается рекурсивно передаю Правда это все без очередей пока) Не ясно че дальше делать как в ртос это обернуть и как быть с отправкой

Комментарии: 17

  1. 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

                              )) Было бы чудесно

  2. Evgeniy

    Лучше свести весь IO к функциям вида: int read(char * buff, int len, int timeout) и такую же write. Который пишут и читают из/в Fifo. Для передачи - dma + прерывание

    • Andrey

      ? Это тут причём?

      • Evgeniy

        Чтобы сверху вниз делать, а не снизу вверх, начиная от очередкй

Не нашли ответ?

Вам также может быть интересно