Перейти к содержанию
    

Кольцевой буфер не успевает себя сдвигать до прихода нового байта..

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

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

 

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

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

 

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

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

 

Я так понял что у вас а не мегаАВР, а недоАВР какой-то. Но "невытесняющая многозадачность с планировщиком" при этом влазит (какая ОСь кстати?).

ИМХО, отлаживаться правильней/удобней на большем камне, а не на меньшем (я про ОЗУ).

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

ОС нет, самонаписанный нами же шедуллер, который по кругу запускает задачи, каждая из которых написана НЕ как при ОС - как будто других задач нет и все время её, а в виде "зашел, проверил готовность предыдущего шага - начал следующий - вышел", если я понятно объяснил :)

 

Это смотря как делать.

См. ссылка

Спасибо за полезные прямые ссылки, буду изучать и пытаться понимать.

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

Изменено пользователем _Ivana

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

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

 

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

 

ОС нет, самонаписанный нами же шедуллер, который по кругу запускает задачи, каждая из которых написана НЕ как при ОС - как будто других задач нет и все время её, а в виде "зашел, проверил готовность предыдущего шага - начал следующий - вышел", если я понятно объяснил :)

 

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

 

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

 

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

 

Успехов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...