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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> Кольцевой буфер не успевает себя сдвигать до прихода нового байта.., Помогите найти решение.
ILYAUL
сообщение Nov 11 2011, 10:18
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Flexz @ Nov 11 2011, 13:47) *
что, как других дилетантами обзывать так запросто, а как вас, так и обиделись? sm.gif
Примеры, да пожалуста:
1. Принимаем команды по наложению OSD, шина RS485 абонентов много, при получении команды не позже чем через нцать мкс (точное число ен помню больше 100 но меньше 500) следует отправить подтверждение приема. Других задач не выполняем. Формирование картинки работает не быстро - суперлуп длинный. Ну и? ради великой самоцели "малосидения в прерывании" делать еще и планировщик с тиком 100мкс?
2. Резервное устройство на батарейном питании, по команде дергаем клапан. Тут ключевой момент даже не время реакции, а потребление, проц работает ТОЛЬКО в прерывании, остальное время дрыхнет, вынос обработки в суперлуп увеличит потребление на величину отличную от нуля.
Реальные примеры из практики, а не тупые суперлупы в вакууме.

PS продолжим холивар или дадим ТСу решать свою задачу?


1. Такое впечатление , что Вы планировщик сидя в прерывании не делали и отсылали подтверждение наобум лазаря.
2. Такие устройства по другому и не имеет смысла делать. Но , если в них и исполняется только одна команда.
P.S Он уже решил.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Flexz
сообщение Nov 11 2011, 10:25
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Как хотите)
1. У ТС проблемы с временем выполнения, я предложил один из вариантов ускорения, просто как вариант.
Так понимаю с обоснованностью в первом примере вопросв нет? Не поймите меня неверно, я не пропагандирую решение задачи на автоматах всегда и везде. Как-то раз приходилось приходилось дописывать чужую прогу реализованную подобным образом, там автоматы были весьма громоздкие и добавить еще пару команд оказалось довольно муторно.
2. Этот пункт касается моего второго примера? Если да, то, на первый взгляд, это эквивалентно. А посему включается религия, не позволяет вам сидеть в прерывании - делайте в суперлупе, мне позволяет.

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

Вообще, чего я все на ваши вопросы отвечаю? Давайте вы теперь, расскажите, чем же так плохо задерживаться в прерывании, если никто не торопит с выходом из него?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 10:30
Сообщение #33


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Alt.F4 @ Nov 11 2011, 13:15) *
В итоге SRAM - 2 байта (один маркер, другой счетчик символов при сохранении данных), и скорость максимальная. =)
Позволю себе усомниться в последнем утверждении. А флеша скоклько? А какие нехилые прологи и эпилоги у ISR и-за наличия вызова процедур.

Цитата(Flexz @ Nov 11 2011, 13:25) *
чем же так плохо задерживаться в прерывании, если никто не торопит с выходом из него?
Вот этого "если" по жизни то и не бывает. При запросе других прерываний будет лишняя задержка.
Не мне говорить вам чем это может обернуться.

Мне сложно да собственно не нужно вас переубеждать в чём-то.
Отвечу вам просто: есть системный подход и есть остальное. Всё. Я сказал и больше добавить не чего.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Flexz
сообщение Nov 11 2011, 10:30
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата(ILYAUL @ Nov 11 2011, 13:18) *
1. Такое впечатление , что Вы планировщик сидя в прерывании не делали и отсылали подтверждение наобум лазаря.

О каком планировщике речь? Я об ОСовом, который перервал бы тежелую обработку ОСД и отправил бы ответ, вы о нем же? зачем он? В перывании выставлялась задача для следующего цикла суперлупа и отправлялся ответ. Эквивалентно? Да! Так зачем планировщик? Ради религиозной цели несидения в перывании. Не плодите сущностей.

Цитата
Вот этого "если" по жизни то и не бывает. При запросе других прерываний будет лишняя задержка.

Я совершенно конкретные примеры привел, где бывает.

Продолжать похоже бессмысленно, если вы настаиваете на своих принципах, то с ними вас и оставлю.

Сообщение отредактировал Flexz - Nov 11 2011, 10:33
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 10:36
Сообщение #35


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Пис, братья!:)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Nov 11 2011, 10:40
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Позволю себе усомниться в последнем утверждении. А флеша скоклько?
Специально для Вас посчитать? На вскидку до 500 байт флэша. По сути дела, написанный процесс флэш-памяти больше занимать не стал.
Цитата
А какие нехилые прологи и эпилоги у ISR и-за наличия вызова процедур.
Просто огромные, загрузили в Z адрес подпрограммы и пошли ее выполнять. sm.gif

Сообщение отредактировал Alt.F4 - Nov 11 2011, 10:44
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 11 2011, 10:43
Сообщение #37


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Flexz @ Nov 11 2011, 14:30) *
зачем он?.....
не позже чем через нцать мкс (точное число ен помню больше 100 но меньше 500) следует отправить подтверждение приема.

Я об этом . Вам надо просидеть в прерывании 100 мкс ( судя из Вашей фразы) что бы отправить ответ


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 11 2011, 10:59
Сообщение #38



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Alt.F4 @ Nov 11 2011, 14:15) *
Обрабатываю NMEA.

Кольцевые буферы действительно не нужны.
Заведите два буфера - в один принимаете, другой обрабатываете, - и два указателя - на приём и обработку. По <CR> в прерывании меняете указатели местами и взводите флаг приёма строки. Вместо <CR> в буфер пишете 0x00, <LF> пропускаете.
Но, имхо, за 1с - 150*10/115200 = 987 мс можно не напрягаясь разобрать принятую строку и обойтись одним буфером.

ЗЫЖ а какое сообщение NMEA весит 150 байт?
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Nov 11 2011, 11:08
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



xemul, спасибо, я уже решил задачу. Из всех NMEA обрабатываю 3 строки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 11 2011, 11:41
Сообщение #40


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Alt.F4 @ Nov 11 2011, 13:15) *
В памяти программ создал таблицу с адресами 25 подпрограмм (из них 16 уникальных), каждая из которых занимается отлавливанием определенного символа или сохранением данных. В прерывании UART запускаем одну из этих подпрограмм по маркеру, который инкрементируется при успешном выполнении подпрограммы, тем самым указывая, что в следующий раз надо будет выполнить другую подпрограмму.
Грамотно. По сути у вас получился конечный автомат.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 11:45
Сообщение #41


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Alt.F4 @ Nov 11 2011, 13:40) *
Специально для Вас посчитать?
Нет не стоит.
Цитата
На вскидку до 500 байт флэша. По сути дела, написанный процесс флэш-памяти больше занимать не стал.
Просто огромные, загрузили в Z адрес подпрограммы и пошли ее выполнять. sm.gif
А перед этим все регистры на стек а после обратно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 11 2011, 11:49
Сообщение #42


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(demiurg_spb @ Nov 11 2011, 15:45) *
А перед этим все регистры на стек а после обратно.


Врядли , если asm то только те ,что будут меняться


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 11 2011, 11:52
Сообщение #43


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ILYAUL @ Nov 11 2011, 13:43) *
Я об этом . Вам надо просидеть в прерывании 100 мкс ( судя из Вашей фразы) что бы отправить ответ
Вы не так поняли его. сидеть не надо. надо ответить не позднее чем 100..500 мкс и всё.

Цитата(ILYAUL @ Nov 11 2011, 14:49) *
Врядли , если asm то только те ,что будут меняться
Процедуры вызываются косвенно и не известно что каждой из них потребуется.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 11 2011, 11:56
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(demiurg_spb @ Nov 11 2011, 15:51) *
Вы не так поняли его. сидеть не надо. надо ответить не позднее чем 100..500 мкс и всё.


Он же получает команду - т.е. уже влетел в прерывание, что-то там анализирует , ждёт 100-500 , отсылает ответ - выходит из прерывания. Судя по тому принципу который он отстаивает - в прерывании можно сидеть пока всё не сделаешь , а вот если выйти и ждать вне прерываниии - это уже другой принцип обработки. Вот он всё написал
Цитата
Принимаем команды по наложению OSD, шина RS485 абонентов много, при получении команды не позже чем через нцать мкс (точное число ен помню больше 100 но меньше 500) следует отправить подтверждение приема. Других задач не выполняем. Формирование картинки работает не быстро - суперлуп длинный. Ну и? ради великой самоцели "малосидения в прерывании" делать еще и планировщик с тиком 100мкс?

Раз других задач не выполняем - значит торчим в прерывании

Цитата
Процедуры вызываются косвенно и не известно что каждой из них потребуется.

Это сама процедура вызывается косвенно ( по Z) . А вот , что в этой процедуре потребуется сохранить , а на что наплевать - решает тот кто пишет процедуру/ А перед входом в процедуру можно сохранить счётчик комманд ,а при выходе вернутся на +1 адрес с которого ушли. Т.е. по принципу многозадачности.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Flexz
сообщение Nov 11 2011, 12:46
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



ILYAUL
Пятница, вечер, кому-то пора отдыхать. И не читайте между строк, там ничего нет.
Ясно написано, отправить ответ нужно "не позже", насчет "не раньше" и "сидим в прерывании" это вы сами придумали.
Go to the top of the page
 
+Quote Post

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

 


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


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