Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Прерывания


Прерывания

Сообщений 1 страница 15 из 15

1

Здравствуйте вопрос в следующем! Как реализовать прерывания с переходами в разные подпрограммы в зависимости от условия? возможно ли это баскомом сделать ? Запутался в том, что после перехода к подпрограмме по прерыванию не получается с этой же подпрограмы совершить прыжок по прерыванию в другую. Как это реализовывается вообще. Идея в том что идет поток по Уарту в зависимости от определенных байт нужно высылать этот поток в разные дырки.  спасибо

0

2

А зачем прерывания? Пусть в прерывании данные принимаются в буфер приёма. А уже из буфера их сортировать куда нужно.

0

3

-NMi- написал(а):

А зачем прерывания? Пусть в прерывании данные принимаются в буфер приёма. А уже из буфера их сортировать куда нужно.

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

0

4

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

0

5

RDW написал(а):

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

Cпасибо. на этом и остановлюсь. сейчас сделал FIFO. пробую

0

6

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

С чего бы это шустрее то будет?

0

7

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

0

8

-NMi- написал(а):

чтоб шустрее было. Да и поток может быть произвольной длинны
С чего бы это шустрее то будет?

При буферизации данных есть временной интервал начального заполнения буфера , сначала нужно подзаполнить FIFO а потом читать начинать,  вы же не с первого байта его читаете?  Можно ли напиться с пустого стакана? правильно нужно сначала подлить в него а потом пить )))) . С буферком кстати дело пошло уже. нужно было сразу так делать.

0

9

Пётр написал(а):

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

Петр вот за это спасибо Вам!! не знал. благодарю !

0

10

Какие стаканы? )))
Сортировать данные можно ПРЯМ С ПЕРВОГО вошедшего (принятого) байта и прямо в теле обработчика сортировать их кому направо, кому налево. Не понятно одно... с какого быстрее будет???

0

11

Все не так просто. сортировать нужно по условию которое прилетает в потоке и состоит из двух заранее известных байт (еще есть случаи когда эти два байта через один идут ). причем этих условий определенное множество. Да и чтоб реализовать что куда слать нужно знать наперед следовательно буфер должен быть наполнен . Да и еще все в асинхронном режиме .  Да и речь шла о программном буфере, а не об аппаратном. Про аппаратный не скрою только что узнал )))))))

0

12

Странно как-то... А каким образом софт узнает эти байты, вдруг это не команда а данные? Да ещё и через раз... мутно что-то.

0

13

Протокол нужен жесткий (для общего потока), иначе всё правильно сказал, -NMi- .

0

14

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

0

15

Парни да я просто по незнанию натупил. Я не вкурсе был что у Басюка есть буфер уже готовый для Уарта. До этого я делал прошивальшик еепром так пришлось пихать прямо с прерывания в еепром причем стопить передачу на конце каждой страницы т.к. не успевало все это дело.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Прерывания