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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Кольцевой буфер не успевает себя сдвигать до прихода нового байта.., Помогите найти решение.
_Ivana
сообщение Jan 12 2012, 20:00
Сообщение #61


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Цитата
Что за прерывания без флагов, просветите.

Был бы специалистом - просветил бы. А так только на задворках памяти осталось что-то типа прерываний по высокому/низкому уровню на ногах.

Цитата
Согласен именно ":)"

Спасибо за науку и пример. Буквально несколько часов назад обсуждали с тем же руководителем проекта применение именно такой особенности AVR (и не только их) - возможность сделать enable interrupt внутри прерывания, запретив только этот же источник - для вынесения "параллельных потоков" наружу уже готового линейного кода без переделки последнего, сохранение при этом в стек адресов возвратов из прерываний очень вдохновляет.

Цитата
Да, хорошо быть начальником: он по определению и не дурак и мат часть знает.

Ну, это в данном случае не следствие а наоборот причина, почему он начальник rolleyes.gif

Цитата
Я так понял что у вас а не мегаАВР, а недоАВР какой-то. Но "невытесняющая многозадачность с планировщиком" при этом влазит (какая ОСь кстати?).
ИМХО, отлаживаться правильней/удобней на большем камне, а не на меньшем (я про ОЗУ).

В финальном проекте будет.... не знаю что, но AVR побольше. А отлаживаю я свой блок на AT90USB162 с 512 байт ОЗУ rolleyes.gif На что начальник говорит - если ты уложишься в эти 512 байт, то в готовом проекте я буду уверен, что ОЗУ не переполнится даже если все задачи начнут работать одновременно (условно). А у меня там ещё и конвертор USB<->COM с приемом команд и выдачей отладочной информации в терминал на комп sm.gif
ОС нет, самонаписанный нами же шедуллер, который по кругу запускает задачи, каждая из которых написана НЕ как при ОС - как будто других задач нет и все время её, а в виде "зашел, проверил готовность предыдущего шага - начал следующий - вышел", если я понятно объяснил sm.gif

Цитата
Это смотря как делать.
См. ссылка

Спасибо за полезные прямые ссылки, буду изучать и пытаться понимать.
ЗЫ: если в прерывании по приему очередного символа не делать ничего. кроме того как класть его в кольцевой буфер, то конечно даже в этом случае можно исхитриться и обойтись буфером меньше длины посылки (отрезая уже проверенные символы и считая контрольную сумму), но мне было проще анализировать имея строку целиком. Я подозреваю, что при анализе буфера я много раз пробегаю от начала посылки до конца буфера - и если посылка ещё не вся пришла, то делаю это зря... Но таков сейчас мой алгоритм анализа. Можно конечно придумать флаг - пришел конец посылки и тогда анализировать буфер, а после анализа сбрасывать...

Сообщение отредактировал _Ivana - Jan 12 2012, 20:20
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 12 2012, 22:10
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(_Ivana @ Jan 12 2012, 22:00) *
Был бы специалистом - просветил бы. А так только на задворках памяти осталось что-то типа прерываний по высокому/низкому уровню на ногах.


Флаг вроде был. Но один на все источники.


Цитата(_Ivana @ Jan 12 2012, 22:00) *
Буквально несколько часов назад обсуждали с тем же руководителем проекта применение именно такой особенности AVR (и не только их) - возможность сделать enable interrupt внутри прерывания, запретив только этот же источник - для вынесения "параллельных потоков" наружу уже готового линейного кода без переделки последнего, сохранение при этом в стек адресов возвратов из прерываний очень вдохновляет.


100%-но работающая возможность, лишь бы стека хватило.

Цитата(_Ivana @ Jan 12 2012, 22:00) *
ОС нет, самонаписанный нами же шедуллер, который по кругу запускает задачи, каждая из которых написана НЕ как при ОС - как будто других задач нет и все время её, а в виде "зашел, проверил готовность предыдущего шага - начал следующий - вышел", если я понятно объяснил sm.gif


Понятно, что-то вроде вызова функций, сохраняющих номер итерации(состояния).

Цитата(_Ivana @ Jan 12 2012, 22:00) *
Я подозреваю, что при анализе буфера я много раз пробегаю от начала посылки до конца буфера - и если посылка ещё не вся пришла, то делаю это зря... Но таков сейчас мой алгоритм анализа. Можно конечно придумать флаг - пришел конец посылки и тогда анализировать буфер, а после анализа сбрасывать...


Флаг придумать несложно: например приём символа с кодом 0x0D(CR) означает конец строки в NMEA и по нему можно начинать анализ.

Успехов.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th August 2025 - 21:11
Рейтинг@Mail.ru


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