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
Автор поста оценил этот комментарий

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

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

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

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

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

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

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

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

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

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


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


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

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

Ну почему же гадила. Просто юзала, но может и срало если либа сторонняя - такого полно в espruino штатно, а косяков полно в arduino ide либах, но не мёртвые вполне фиксят со временем.

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


Вряд ли это в базовом ините лоадера, потому и пишу - подебажь с CLI в твоём выводе на TTL Serial, посмотри что будет, может всё просто. Я ввообще мелкие PIC и особо ардуины в рот ебал по причине того что всего всегда не хватает и пересекается по таймерам итд(а каналы не всегда можно для увеличения хотя бы), рядом вон те же STM32 , они даже мелкие по такому куда более адекватны, и с той поры как пришёл к такому и изучению самого девайса даже где хватит базы void loop() { sleep/wait } для чайников уже писал пустой loop,а всё по делу через таймеры.

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

я так понял ТС вообще не юзает ничего стороннее

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

Это не значит что stdlib что-то не юзает сам, не arduino ide конечно, но многое и тут есть.

И два - штатные вещи, тут адище, как уже писал.

И как доебётся не факт что не выяснится что МК кривые от китайцев.

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

Это не значит что stdlib что-то не юзает сам

Интересно, даже не знаю с ходу, что такого можно включить что бы такое получить. Если только какие то штуки со статическим буфером.
ps у меня newlib

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