реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> "Реальное время" и связь по UART
muravei
сообщение Feb 20 2007, 19:08
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Делаю систему, кот. должна измерять в реальном времени и общаться по UARTу
Вопрос в след. : допустим принят байт -обработка(RX) его считала и разрешила прерывания (но сама подпрограмма обработки RX не завершена) , а тут " откуда не возмись" прерывание от таймера-пора мерять. Мерим и тупо ждем конца измерения(ну понятно разрешаем- запрещаем прерывания), но хотелось бы вернуться в прерванное (RX) доделать его .Надо как то извратиться со с стеком, может кто-то уже придумал подобное.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 20 2007, 19:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(muravei @ Feb 20 2007, 19:08) *
Делаю систему, кот. должна измерять в реальном времени и общаться по UARTу
Вопрос в след. : допустим принят байт -обработка(RX) его считала и разрешила прерывания (но сама подпрограмма обработки RX не завершена) , а тут " откуда не возмись" прерывание от таймера-пора мерять. Мерим и тупо ждем конца измерения(ну понятно разрешаем- запрещаем прерывания), но хотелось бы вернуться в прерванное (RX) доделать его .Надо как то извратиться со с стеком, может кто-то уже придумал подобное.


Ничего не понятно, зачем извращаться то? После обработки таймера вы автоматом вернетесь в прерывание UART.
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Feb 20 2007, 21:10
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Цитата(muravei @ Feb 20 2007, 18:08) *
Делаю систему, кот. должна измерять в реальном времени и общаться по UARTу
Вопрос в след. : допустим принят байт -обработка(RX) его считала и разрешила прерывания (но сама подпрограмма обработки RX не завершена) , а тут " откуда не возмись" прерывание от таймера-пора мерять. Мерим и тупо ждем конца измерения(ну понятно разрешаем- запрещаем прерывания), но хотелось бы вернуться в прерванное (RX) доделать его .Надо как то извратиться со с стеком, может кто-то уже придумал подобное.


Если Вам так критичны по времени (не можете дожидаться обработки RX) сами
моменты начала измерений, то тупо ждать конца измерения не логично. Лучше
запустить преобразование и заниматься чем-нибудь более полезным, или вернуться в обработку предыдущего прерывания (если в нем разрешали прерывания), или спать на худой конец.
Тут главное, чтобы на обработку таких вложеных прерываний хватило обьема стека. А если его хватит, то вернетесь туда, откуда Вас прервали, обязательно!
А по завершении измерения возникнет прерывание, в котором и воспользоваться
измеренной величиной. Просто соответствующим образом настроить АЦП.
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 20 2007, 21:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(aleksey_g @ Feb 20 2007, 21:10) *
Лучше запустить преобразование и заниматься чем-нибудь более полезным,

Чем-нибудь полезным нельзя, для этого нужен результат измерения
Цитата(aleksey_g @ Feb 20 2007, 21:10) *
или вернуться в обработку предыдущего прерывания (если в нем разрешали прерывания)

В этом и вопрос.Я хочу из прерыв. по таймеру , на время измерения вернуться в предыдущее(RX) , а после него обратно в по таймеру. А значит после таймера, вернуться в то что было до (RX), т.к. RX будет завершено.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 20 2007, 21:54
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(muravei @ Feb 20 2007, 21:37) *
В этом и вопрос.Я хочу из прерыв. по таймеру , на время измерения вернуться в предыдущее(RX) , а после него обратно в по таймеру. А значит после таймера, вернуться в то что было до (RX), т.к. RX будет завершено.


Я сначала не понял вопроса.

А почему бы не делать примитивно так:

Код
UART:

ldi  flag,  0

............

cpi  flag, 1
breq  TimerEnd    ; возвращаемся в Timer
reti


Timer:
;запустить преобразование

cpi flag,  1
breq  Timer_End

ret   ; возвращаемся в UART




Timer_End:

ldi  flag,  1
...............
reti



Конечно, громоздко, зато корректно.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 20 2007, 22:44
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(muravei @ Feb 20 2007, 20:08) *
Делаю систему, кот. должна измерять в реальном времени и общаться по UARTу
Вопрос в след. : допустим принят байт -обработка(RX) его считала и разрешила прерывания (но сама подпрограмма обработки RX не завершена) , а тут " откуда не возмись" прерывание от таймера-пора мерять. Мерим и тупо ждем конца измерения(ну понятно разрешаем- запрещаем прерывания), но хотелось бы вернуться в прерванное (RX) доделать его .Надо как то извратиться со с стеком, может кто-то уже придумал подобное.


Посмотри мою прогу по многоуровневому прерыванию на nix-06.nm.ru

Нес чем извращаться не надо. Разрешил и всё! Если из под ASM, то нельзя использовать общие регистры. Если из под Си, то внимательно смотреть на общие переменные. Правильно написанная программа будет работать и так.
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 21 2007, 10:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Dopler @ Feb 20 2007, 21:54) *
Конечно, громоздко, зато корректно.

Но при этом стек трогать нельзя.
Цитата(SasaVitebsk @ Feb 20 2007, 22:44) *
Посмотри мою прогу по многоуровневому прерыванию на nix-06.nm.ru

Посмотрю
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 21 2007, 11:39
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(SasaVitebsk @ Feb 20 2007, 22:44) *
Посмотри мою прогу по многоуровневому прерыванию на nix-06.nm.ru

Нес чем извращаться не надо. Разрешил и всё!

Во-первых, что-то не нашел, а во-вторых , по-моему , я о другом.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 21 2007, 11:56
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(muravei @ Feb 21 2007, 12:39) *
Цитата(SasaVitebsk @ Feb 20 2007, 22:44) *


Посмотри мою прогу по многоуровневому прерыванию на nix-06.nm.ru

Нес чем извращаться не надо. Разрешил и всё!

Во-первых, что-то не нашел, а во-вторых , по-моему , я о другом.


находится по той ссылке здесь:
Статьи/прерывания/приоритетность.

На сколько я понял именно об этом. О вложенных прерываниях. Если выложите текст обоих прерываний, то я поясню.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 21 2007, 12:38
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Все решается гораздо проще smile.gif
Если Вы боитесь ,что не успеете обработать принятые данные из за измерений и обработки принятого пакета - просто задержите передачу smile.gif
Если общаетесь с компом - это сигнал CTS ,он аппаратно задерживает передачу.
Если межпроцессорный обмен - дайте ему знать ,дернув какой нибудь ногой ,а лучше для межпроцессорного перейти на TWI ,по протоколу слейв "растягивает" ACK если не успевает обработать данные.
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 21 2007, 15:50
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(bodja74 @ Feb 21 2007, 12:38) *
Все решается гораздо проще smile.gif

Задерживать придется навсегда, лишних сигналов нет.
Цитата(SasaVitebsk @ Feb 21 2007, 11:56) *
Статьи/прерывания/приоритетность.
На сколько я понял именно об этом. О вложенных прерываниях.

Это я видел , так у меня сделано. Я о другом, думаю как наоборот вернуться в предыдущее прерываниеиз более приоритетного, что бы в нем не скучать , во время измерений.
В принципе Dopler ответил.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 21 2007, 16:49
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(muravei @ Feb 21 2007, 16:50) *
Цитата(bodja74 @ Feb 21 2007, 12:38) *

Все решается гораздо проще smile.gif

Задерживать придется навсегда, лишних сигналов нет.
Цитата(SasaVitebsk @ Feb 21 2007, 11:56) *
Статьи/прерывания/приоритетность.
На сколько я понял именно об этом. О вложенных прерываниях.

Это я видел , так у меня сделано. Я о другом, думаю как наоборот вернуться в предыдущее прерываниеиз более приоритетного, что бы в нем не скучать , во время измерений.
В принципе Dopler ответил.


Dopler и у меня и у любого: после обработки прерывания возврат будет осуществлён в точку вызова. То есть в прерывание как вы и хотите. Просто увеличивается глубина вложенности (размер стека) и необходимо следить за общими ресурсами. Например нельзя модифицировать одну и ту же переменную в данных прерываниях.
Go to the top of the page
 
+Quote Post
Dopler
сообщение Feb 21 2007, 18:21
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(SasaVitebsk @ Feb 21 2007, 16:49) *
Dopler и у меня и у любого: после обработки прерывания возврат будет осуществлён в точку вызова. То есть в прерывание как вы и хотите. Просто увеличивается глубина вложенности (размер стека) и необходимо следить за общими ресурсами. Например нельзя модифицировать одну и ту же переменную в данных прерываниях.


Вы неправильно поняли смысл вопроса, я его тоже с первого раза неправильно понял.
Вопрос не просто во вложенных прерываниях, здесь никаких проблем нет. Вопрос в следующем:

1. Есть 2 прерывания (1 - не критичное, 2 - критичное).
2. Когда мы в первом прерывании, срабатывает второе.
3. Переходим на второе, запускаем преобразование АЦП - длительное. Не хотим ждать его завершения (просто простаивать) и хотим вернуться к прерваному прерыванию. Важно - прерывание 2 не выполнено до конца!.
4. Каким-либо способом возвращаемся в прерывание 1.
5. Доделаем дела в 1 и переходим в 2.
6. Доделываем 2 (дожидаемся конца преобразования, наслаждаемся данными).
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 21 2007, 18:26
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



2 Dopler
По моему в UART, перед reti надо флаг в единицу.
Go to the top of the page
 
+Quote Post
SS85
сообщение Feb 21 2007, 18:51
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 14-03-06
Пользователь №: 15 230



Цитата(muravei @ Feb 21 2007, 19:26) *
2 Dopler
По моему в UART, перед reti надо флаг в единицу.


Не надо, сам установиться.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016