Вот 3 процедуры чтения, записи в порт. Можно через прерывания, это еще несколько строк. int usart_class::USART_PrintChar(char c, FILE *stream) { USART_SendChar(c); return 0; } //--------------------------------------------------------------------------------- int usart_class::USART_GetChar(FILE *stream) { while ( !(USART0.STATUS & USART_RXCIF_bm)) {;} return USART0.RXDATAL ; } //--------------------------------------------------------------------------------- void usart_class::USART_SendChar(char c) { while ( !(USART0.STATUS & USART_DREIF_bm) ) {;} USART0.TXDATAL = c ; } Что тут сложно для отправки и принятия байта? Просто у меня это в виде классов, но это можно на функции переделать. c - это символ для передачи. Это для tiny 3216

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

  1. Anonim

    У него там какая-то сложность с размером ардуиновского байта

    • Saw

      Просто новые TINY - это мелкие АРМ

      • Anonim

        Он мне код присылал, но я уже забыл о чем там проблема, факт что что-то не работало действительно.

        • Saw

          1 байт в буфере. для передачи. Все же просто. Мы загоняем 1 байт в регистр на передачу, и он сам передает его, мы не паримся битами. Мы только проверяем, буфер пустой или нет. Если пуст, загоняем следующий. Можно в цикле, можно через прерывание проверять. А пока он передает, мы следующий порт обрабатываем

          • Dim

            вот нашел пример из меги

            • Saw

              Я тупо не вижу проблемы.

              • Dim

                я вот как думаю: объявляем три уарта заходим в бесконечный цикл проверка на наличие пакета от 1го тюнера проверка на наличие пакета от 2го тюнера проверка на наличие пакета от модема обрабочик прерываний от тюнеров и модема читаем побайтно в буфер1 от тюнера 1 читаем побайтно в буфер2 от тюнера 2 читаем побайтно в буфер3 от модема

                • Andrey

                  немного неправильно

                  • Dim

                    это не вдаваясь в детали именно на этом этапе нужно получить 100% верность приема всех пакетов от всех устройств!

                    • Saw

                      Зачем проверять в цикле наличия принятого символа в буфере? Вроде есть прерывание на это?

                      • Dim

                        не символа, а пакета!

                        • Saw

                          Вы передаете по 8 бит? Значит байт.

                          • Boy

                            это что за ntsc

                          • Dim

                            я работаю с пакетами байт!

                            • Saw

                              Да я файлы по 10Мб пересылаю... но побайтно!!! У вас свой протокол написан, отличный от 8N1 ?

                              • Dim

                                мне нужна абстракция на уровне пакетов, а не байт

                                • Saw

                                  Я думаю, вы не понимаете как это работает, вот и проблема.

                                  • Dim

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

                                    • Saw

                                      если я дам вам реальное описание протоколов... вы просто офигеете, что так можно сделать.

                                      • Dim

                                        так у меня протоколы простые срс32 мд 5 и аес128 екб

                                        • Saw

                                          Ясно, смысла нет дальше продолжать. У вас просто путаница.

                                          • Dim

                                            это у вас путаница между байтом и пакетом байт

                                        • Saw

                                          ну ваш aes , скажем aes-128 это блоки кода по 64 байта.

                                  • Andrey

                                    это еще не все. у них в узбекистане 2008 год. компов под Win10 нету, интернет по капельке, современные средства разработки и платформы недоступны.

                                • Andrey

                                  абстракция простая. пока весь твой пакет не лежит в буфере - никакого пакета нет.

                                  • Dim

                                    а как это узнать?

                                    • Andrey

                                      по факту приема последнего БАЙТА из пакета

                                      • Dim

                                        мне нужно получить массив байт (пакет) -только он меня инетерсует если бы я хотел работать с байтом - писал бы асме и как этот факт определить?

                                        • Saw

                                          Ну получили, дальше? a[] = {0x01; 0x02; 0x03; 0x04}; Дальше что делаем? 4 байта у вас. Как будете передавать в порт, который берет 8 бит? У RS-232 пакет (стандартный) 8N1 Можно и 12N1, если надо.

                                          • Dim

                                            ты погоди - надо еще правильно получить!

                                            • Saw

                                              Я уже уже вам дал 4 байта в массиве дальше что? Не гадайте, будете в цикле передавать по-байт-но! да хоть у вас пакет будет 500 байт...

                                              • Dim

                                                зчем в цикле? есть же либа готовая serial write (buf, size of buf)

                                                • Saw

                                                  Вы разберитесь как это работает, потом будете на либах делать. Вы не пишите код сами, вот и проблема, вы не понимаете как это работает.

                                                  • Dim

                                                    так я затем и взял ардуина что б не залазить пальцем в задницу

                                                    • Saw

                                                      У меня это одна строка - USART0.TXDATAL = c ; Дунька это для простоты работы, ускорения разработки.... Но если надо на уровне железа, пишите руками.

                                                      • Dim

                                                        давай щас не будем х_ми мериться ладно?

                                                        • Saw

                                                          Дунька пустой код минимальный - делает в 3Кб!!! А написаный руками - 120 байт.

                                                          • Dim

                                                            на асме еще напишу - на сях - нет

                                                            • Saw

                                                              Просто я к тому, что 2 дня мозг выносить передачей байтов... это капец.

                                                          • Andrey

                                                            ее внутренние часы тащить не обязательно повсюду.

                                                            • Dim

                                                              я исправил асм я знаю лучше

                                                              • Andrey

                                                                ок

                                                                • Dim

                                                                  для пиков писал сам!

                                                                  • Andrey

                                                                    ну вот. бери мегу 2560 и асм для комстроки... и поехали

                                                                    • Dim

                                                                      и опять возник вопрос с признаком оканчания пакета он у меня возник еще раньше и до сих пор тянется пила в ардуине не шарит - с этим понятно как и я

                                                                      • Andrey

                                                                        ну это тебе вопрос. у тебя же протоколы все на руках, ты знаешь что принимается - значит знаешь, когда оно все принялось

                                                                        • Dim

                                                                          так вот на асме я следил за концом каждого байта

                                                                          • Andrey

                                                                            да это и понятно,на софтуарте иначе никак.

                                                                            • Dim

                                                                              и если после конца долго не следовало начало - считал что пакет закончен

                                                                              • Andrey

                                                                                это и есть таймаут

                                                                                • Dim

                                                                                  хард уарт получается этого поределить не может?

                                                                                  • Saw

                                                                                    а зачем?

                                                                                  • Andrey

                                                                                    чего этого? таймаут приема отработать?

                                                                                    • Dim

                                                                                      да

                                                                                      • Saw

                                                                                        А зачем?

                                                                                      • Andrey

                                                                                        он это и не должен делать, это уже уровнем выше операция

                                                                                        • Dim

                                                                                          вот скажи мне ты дурак? значит для него пофигу - идет пакет или 10 байт с инетрвалот м в 1 час?

                                                                                          • Saw

                                                                                            Ну ты просто объясни мне , тупому, если у тебя протокол, зачем тебе знать конец передачи?

                                                                                            • Dim

                                                                                              в одном пртоколе видно длину посылки в другом нет

                                                                                              • Saw

                                                                                                Ну дык если у тебя протокол соответствует определенной структуре и пришел короткий или длинный или нет признака конца... то это считается битый, мы его откидываем и ждем новый пакет.

                                                                                                • Dim

                                                                                                  нету признака конца

                                                                                                  • Saw

                                                                                                    Ну тогда есть его длина, он же стандартный, раз это протокол.

                                                                                                    • Dim

                                                                                                      хотя вру, для команд модема это 0A 0D

                                                                                                      • Saw

                                                                                                        Это вообще не обязательно. Я так понял, нет структуры программы, до портов еще далеко....

                                                                                          • Andrey

                                                                                            в каком-то смысле да. Если твоя программа ничего вообще не делает, кроме выборки байта из уарта в рам, то написанное тобой точно и верно.

                                                                                            • Dim

                                                                                              хреновый уарт ! хоть и хард

                                                                                              • Andrey

                                                                                                ну видимо под твою задачу еще не придумали МК.

                                                  • Alexander

                                                    Вот. В точку

                                        • Andrey

                                          а то уже вопрос тебе как знатоку протоколов обмена. либо длина известна заранее, либо есть признак окончания, либо таймаут.

                                          • Dim

                                            сразу спрошу тут можно можно какое то прерывание реализовать?

                                            • Andrey

                                              кстати даже для твоих дремучих компов есть решение. AVRASM это мелкий EXE меньше мегабайта. где именно тут?

                    • Andrey

                      у тебя никак в голове масштаб времени не сойдется.

                      • Dim

                        там от 30 - до 400 байт пакет

                        • Boy

                          ска не то

            • Anonim

              Ну и что, там какая-то функция void serialEvent, мне не известная Можно только догадываться, что внутри. А внутри ISR http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-3.html читать до просветления

          • Anonim

            Он хочет обрабатывать строку из байт

            • Saw

              Ну массив байт... передаем.... a[] = "Передаем байты"; for{int i = 0; i< sizeof(a);i++} { a[i] ....} Ну 2 дня писать 5 строк кода... капец. Мозг проел.

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

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

Добрый день, ребята. Я снова с своим днём сурка. С20+ на А10 Сделал по новой все шаги , дошел снова до АДБ - и вот никогдатакогонебылоивотопять. Тут... Читать далее