Всем добрый вечер. Начал изучение CAN шины. МК stm32f103 в среде KeilRTX (RTOS) Что бы просканировать реальную шину хотел использовать свободную прогу CANHacker. Судя по описанию протокола, реализовать его не очнь трудно. Как я понял это все, что считали с CAN - передаем на USART в виде ASCII в формате tiiiLDDDDDDDD[0x0D], iii - ID, L - кол-во байт данных, DDD... - собственно данные. В STM32 прием данных с CAN происходит в прерывании. И нужно как можно быстрее завершить процедуру обработки прерывания. В то же время USART довольно медленный канал, что бы вставлять его вызовы в процедуре прерывания. Вопрос: Что если в прерывании полученные данные с CAN шины помещать в очередь сообщений (RTOS). Тогда вывод данных в USART уже не будет ни как влиять на прием и не будет потери фреймов с CAN шины. Имеет ли право на жизнь такая реализация? Не будет ли вызов очереди из процедуры прерывания сильно нагружать саму процедуру?

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

  1. Shtolcman

    Очередь на FreeRtos все равно будет тормозить, делал я систему визуализации подъёмника на базе stm32 с FreeRtos, так вот очередь все равно тормозила всю систему, тогда сделал на кольцевом буфере с указателями головы и хвоста и все пошло. А вообще лучше юзай CANopen, это круче намного, чем голый can)

    • Pavel

      Артур, ему как и мне надо шину в тачке считать, а какой там протокол одному производителю известно)

      • Shtolcman

        А ну моё дело совет подкинуть, а там уже пусть сам ищет варианты

        • Pavel

          Факт :) Почему бы просто не уйти от freertos на LL?

          • Andrew

            как вообще freertos и LL связаны? одно — операционная система, второе — абстракция над железом

            • Pavel

              Чуваку надо просто принимать и отправлять данные Зачем тут целая ОС?

              • Andrew

                господи Ц Е Л А Я О С Ь

                • Pavel

                  Давай, стеби меня полностью :D

                  • Andrew

                    как будто она там биткоины майнит в фоне

                    • Pavel

                      Но грузит же нещадно, не?

                      • Andrew

                        да откуда это в вас фактически рантайм фриртоси — это хэндлер на systick при желании можно завести одну задачку и ты фриртось вообще не заметишь а вот примеров, когда человек заводит в main дикий поллинг флага в бесконечном цикле, и задержки на тех же пустых циклах — миллионы в интернетах и по-моему вот это грузит нещадно, а не [проснуться раз в миллисекунду и пробежаться по хэндлерам очередей]

                        • Nikita

                          Всем ку

                        • Pavel

                          Понятно дело, но в сравнении отработать по прерываниям и уйти в слип и пробежаться по флагам - шо быстрее?

                          • Andrew

                            в сферическом в вакууме мире, если все состоит из прерываний, которые друг с другом не связаны — первое быстрее

                        • Pavel

                          Я тут вспомнил, шо когда работал на военке, нам вообще нельзя было использовать прерывания х)

                          • Andrew

                            ммм как удобно и быстро реагируешь на все

                            • Pavel

                              А то

                              • Andrew

                                вообще странная херня, я тоже работал на военке и вроде с прерываниями проблем не было

                                • Pavel

                                  Заеб начальника

                                  • Andrew

                                    вот-вот

                                    • Pavel

                                      Типа прерывания долго отлаживать Иди в жопу О, ты используешь указатели в ттаблицах - иди в жопу)

                                      • Andrew

                                        так что не «работал на военке», а «работал с одним неординарным руководителем»

                                        • Nikita

                                          прерывания реально говно которое долго отлаживать))))

                                          • Andrew

                                            да как вы живете-то

                                            • Nikita

                                              долго отлаживаем)

                                          • Pavel

                                            Не испытывал вообще никаких проблем Шо на аврке, шо на стмке

                                            • Nikita

                                              я свое знакомство с арм начинал с прекрасных stellaris производства texas instruments во я там наебался с этими прерываниями)

                                              • Pavel

                                                Хехехе

                                                • Andrew

                                                  за последние три года боли я понял, что если писать нормальный код, и не забивать на организацию многопоточности (не забывая про то, что прерывания — тоже по-сути многопоточность), то странной отладки становится на несколько порядков меньше

                                                  • Nikita

                                                    наебался так что сказал переделывать плату под stm32

                                                  • Shtolcman

                                                    Мудрость приходит с опытом :)

                                                    • Andrew

                                                      а если еще читать даташит, когда заводишь периферию — так количество отладки падает почти до нуля но я пока не достиг такого уровня дзена

                                                      • Boris

                                                        я так генератор кода писал, проскоки есть, но в целом у стм32 за исключением пары косяков всё в норме

                                        • Danil

                                          Насколько я знаю, есть стандарты отказоустойчивого кода и там запрещены указатели, думаю прерывание имеет тот же статус. Отладка на железе конечно хорошо, но если у тебя самолёт и там что нибудь тупанет, то типо не кул

                                          • Boris

                                            такое не стандартами описано а локальными мифами иначе бы во всех аирспейс контроллерах не было бы прерываний

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

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