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 запрещен)

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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


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

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку