27

Как пропатчить прерывания на Arduino?

Все чаще и чаще, мне вспоминается "классическая шутка" :

Как пропатчить прерывания на Arduino?

Ну и у меня "классический" вопрос:

"Как пропатчить Ардуину" на работу с регистрами?


Суть:

прижучило меня прототипировать устройство с "хитрым" и самое главное "быстрым" протоколом на UART.


В наличии есть ардуина 2560, мне пофиг, сам главное чтобы монотонно циферки отправляло, и я доволен :)


Яж "дурак", яж с криками "ща заардуиню"... наардуинил...

Громоздкость кода ардуино - дает неудовлетворительный результат.

монотонности потока данных - не получается. Байтик либо задержится, либо вообще "потеряется" с кодом EOF.


Ок.

1)Переезжаем в AS7/MicrochipStudio.

1.1. Как же классно писать в IDE "нормального программиста"

2) Вспоминаем "как там регистрами рулить" на С/С++


компилим, шьем... 5 секунд... полет нормальный...

7 секунд полет норм...

8я секунда...


Суть:

0. чистый проект AS7 C/C++, язык "быдло Сиплюс" на диалекте Си.

1. рулю UART0, через регистры, на 230400

2. Декларирую ISR' s" UDRE и TXE.


задача: отправить массив uint8_t указанной длинны.


пусть будет...

uint8_t Word[32] = {`H`...}; //"Hello world\n\0"


есть функция запуска процесса...

есть обработчик UDRE, с доступом через указатель к массиву, и приватному uint8 счетчику позиции и длинны.

есть обработчик TXC, обнуляющий счетчики.


по значениям счетчика запуск отслеживается.


а в железе это работает так:

Hello world

Hello world

Hello world

(спустя 7 секунд)

HeHeHeHeHeHeHeHeHe....


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

начинает ходить с паузой в 1мс.


все мозги сломал... в чем прикол?

как пропатчить ардуину на прерывания?

(без рейтинга)

UPP: извиняюсь за "косноязычие в комментах".... по буквам "мажу"... сенсорный экран, он такой сенсорный...

Arduino & Pi

1.5K поста20.8K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

0
Автор поста оценил этот комментарий

Олдфаг

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не на столько... asm я только читать умею.

1
Автор поста оценил этот комментарий

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

Имеется ли корреляция между объемом данных и временем приемлемой работы?

Очистка буфера?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я байт отправляю в прерывании, аппаратном, udre. Счетчик обнуляю в прерывании TXC. Буфер uint8_t buff[65]... голый си...

показать ответы
2
Автор поста оценил этот комментарий

Судя по всему - так и есть. ТС напихивает буффер доверху, и в конце-концов туда только первый-второй символ, взамен отправленных, помещается.

ТСу - умерь прыть писания в порт, и все должно получиться )

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Оригинальная железка вообще должна на 480К свистеть...


Я завтра дополню конечно для 115200 и 9600...


Суть в том, что я отправляю поБАЙТно, отслеживая, ушел байт или нет.

Спустя 7 секунд, после запуска, механизм надворачивается... я в это время ничего не переключаю.

Автор поста оценил этот комментарий
Это пост в сообществе Ардуинщиков? Как пропатчить kde под freebsd ???
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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


Встрнтился сам - куда спрашивать?

Forum.arduino.cc - маловероятно.

Радиокот? - уже не торт.

Остается либо в спортлото, либо сюда.


В спортлото не стал. Все нормальные из спорта сейчас в Японии...

показать ответы
0
Автор поста оценил этот комментарий

Чуть жопа не сгорела) шутка это хорошо. Просто лично сталкивался с такими

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да там не только ж0па пiдгорает...

У меня почему то без моего ведома херятся регистры T0.

Чуть позже я наверно "разрисую во всех красках"... как мешает arduino ide и #include arduino.h разрабу, умеющему в прерывания....

Но это произойдет не раньше моего возврата с орбиты офигивания :)

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

АПП:

С утра нашел "косяк"... но проблема не уехала....


Все источники - перечитал :)

"Букварь" - тоже освежил.


На свежую голову надо...

Кажется будет еще пост....

1
Автор поста оценил этот комментарий

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

Имеется ли корреляция между объемом данных и временем приемлемой работы?

Очистка буфера?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я честно, по флагам отправляю один байт. Не используя протоязык ардуино. "Чисто на регистрах и прерываниях".


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


Прошивку я собираю "чистую  без ардуино", а эффект есть :(

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не совсем то.

Я с аппаратурой без наслоек ардуино работаю.


Первые 6 секунд нормально, а потом такое ощущение, что в ардуине что-то включаетсч, типа таймеров millis()

Автор поста оценил этот комментарий

Попробуйте писать в блокноте и не использовать эту либу=D

Продолжим подгорание

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я пока забросил пооект... не до него..


Но. Какие траблы на текущий момент:


Беру атмелстудию.

Пишу в ней код.

Компилирую...

Прошиваю через дудку, настраивал по инструкции:

https://itnan.ru/post.php?c=2&p=284352 или похожей...

Бутлоадер норм, не сносится.

А вот Т0 - начинает компостировать мозг. Хотя по идее не должен....


Беру STK500/AVRISPmkII прошиваю этот же HEX, снося бутлоадет - все работает по моему коду.

В чем прикол - пока не разобрался.

0
Автор поста оценил этот комментарий

ESP32 быстрее Меги будет. Я на нее тоже данные с камеры повесил.- работает идеально.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Для макета - излишне. А в устройстве должен стоять кортекс-М4...


Сейчас мне достаточно просто гнать монотонно данные в порт

показать ответы
0
Автор поста оценил этот комментарий

Если есть готовые библиотеки то ненадо изобретать велосипед

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я поробовал "быдлокоднуть", через "serial.Write()"... мне такая реализация не подходит. Поток данных с имитатора сыпется не очень равномерно... мой верхний софт при таком раскладе считает пакет устаревшим.

Учет пакетов ведется до микросекунд. (Бред конечно, но...)

0
Автор поста оценил этот комментарий

Так передавать или принимать ?

Или общаться ?

По какому протоколу ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Протокол "в процессе" разработки, как и конечное устройство.


Я пишу программу для  ПК, пока устройства нет - рншил свой имитатор на ардуине сделать.

Благо опыт в АВРках есть...

Но что-то пошло "не так" в моем почти безупречном плане.

0
Автор поста оценил этот комментарий

Хз , я не настоящий сварщик.

Для передачи зачем  вообще прерывания то ?

Покажи код , напиши требования

раскрыть ветку (1)
Автор поста оценил этот комментарий

С кодом погодите. Я походу сам косячу.


А требования простые. Непрерывно передавать 65 байт информации. При приеме "формата" размером 14 байт, в очередь отправки вставлять ответ 12-20 байт.


Фактичести опрос АЦП по SPI, выдача по uart на 230400 и выше.

показать ответы
1
Автор поста оценил этот комментарий

Я байт отправляю в прерывании, аппаратном, udre. Счетчик обнуляю в прерывании TXC. Буфер uint8_t buff[65]... голый си...

раскрыть ветку (1)
Автор поста оценил этот комментарий

И да, строка "Hello word\n\0" явно меньше 65 символов, и в тесте буфер вообще 32 байта типа usigned char

показать ответы
0
Автор поста оценил этот комментарий

Тогда про язык забудь, считать если просто слать куча вариантов как, однако по моему у тебя что-то не то багового уровня, а не общего, собственно cli и покажет что отвалится, правда зависнуть может

раскрыть ветку (1)
Автор поста оценил этот комментарий

Баг или где... я в студии дебажил ISR на симуляторе, где делал безобидное diditalWrite(13,1);

После, код digitalWrite'a мне SREG:I вырубал в ноль. И библиотека lcd_i2c несчадно "гадила" в третий таймер...


Поэтому я переехал на "голый проект", в надежде, что это "фича ардуино"


Оффтопом: Не хочу заморачиваться "персоональным" бутлоадером...

показать ответы
2
Автор поста оценил этот комментарий

Uart с буфером нету разве?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ардуиновский - не справляется.

Там данные, по осциллографу идут не монотонно. Тоесть идет идет.. астал нс миллисекунду дальше пошел.


Меня так "не устраивает". Мне надо имитировать желнзку, (идентично натуральной), которая без передыху шлет 65 байт в uart. Пердохнуть оно имеет право между этими 65ю байтами

показать ответы
0
Автор поста оценил этот комментарий

Шо, ты таки и по сей день CLI/sti не выучил? А зачем вообще подходил? Или сам таймерами пользуешься , а зачем для такой задачи ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну зачем таймер, зачем таймер...

Таймер, сто бы считать.

Например, отсчитывать каждые 15 625нс, что вполне позволяет выдавать "цифровой синус из 64 дискретов частотой в 1кГц", который я и пвтпюсь передат  по UART

показать ответы
Автор поста оценил этот комментарий

традиционный шпаломет #2

показать ответы
Автор поста оценил этот комментарий

коммент для шпал.

кодом дополню уже утром.