|
|
  |
Кольцевой буфер не успевает себя сдвигать до прихода нового байта.., Помогите найти решение. |
|
|
|
Nov 11 2011, 10:18
|

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

|
Цитата(Flexz @ Nov 11 2011, 13:47)  что, как других дилетантами обзывать так запросто, а как вас, так и обиделись? Примеры, да пожалуста: 1. Принимаем команды по наложению OSD, шина RS485 абонентов много, при получении команды не позже чем через нцать мкс (точное число ен помню больше 100 но меньше 500) следует отправить подтверждение приема. Других задач не выполняем. Формирование картинки работает не быстро - суперлуп длинный. Ну и? ради великой самоцели "малосидения в прерывании" делать еще и планировщик с тиком 100мкс? 2. Резервное устройство на батарейном питании, по команде дергаем клапан. Тут ключевой момент даже не время реакции, а потребление, проц работает ТОЛЬКО в прерывании, остальное время дрыхнет, вынос обработки в суперлуп увеличит потребление на величину отличную от нуля. Реальные примеры из практики, а не тупые суперлупы в вакууме. PS продолжим холивар или дадим ТСу решать свою задачу? 1. Такое впечатление , что Вы планировщик сидя в прерывании не делали и отсылали подтверждение наобум лазаря. 2. Такие устройства по другому и не имеет смысла делать. Но , если в них и исполняется только одна команда. P.S Он уже решил.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Nov 11 2011, 10:25
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

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

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

|
Цитата(Alt.F4 @ Nov 11 2011, 13:15)  В итоге SRAM - 2 байта (один маркер, другой счетчик символов при сохранении данных), и скорость максимальная. =) Позволю себе усомниться в последнем утверждении. А флеша скоклько? А какие нехилые прологи и эпилоги у ISR и-за наличия вызова процедур. Цитата(Flexz @ Nov 11 2011, 13:25)  чем же так плохо задерживаться в прерывании, если никто не торопит с выходом из него? Вот этого "если" по жизни то и не бывает. При запросе других прерываний будет лишняя задержка. Не мне говорить вам чем это может обернуться. Мне сложно да собственно не нужно вас переубеждать в чём-то. Отвечу вам просто: есть системный подход и есть остальное. Всё. Я сказал и больше добавить не чего.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Nov 11 2011, 10:30
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Цитата(ILYAUL @ Nov 11 2011, 13:18)  1. Такое впечатление , что Вы планировщик сидя в прерывании не делали и отсылали подтверждение наобум лазаря. О каком планировщике речь? Я об ОСовом, который перервал бы тежелую обработку ОСД и отправил бы ответ, вы о нем же? зачем он? В перывании выставлялась задача для следующего цикла суперлупа и отправлялся ответ. Эквивалентно? Да! Так зачем планировщик? Ради религиозной цели несидения в перывании. Не плодите сущностей. Цитата Вот этого "если" по жизни то и не бывает. При запросе других прерываний будет лишняя задержка. Я совершенно конкретные примеры привел, где бывает. Продолжать похоже бессмысленно, если вы настаиваете на своих принципах, то с ними вас и оставлю.
Сообщение отредактировал Flexz - Nov 11 2011, 10:33
|
|
|
|
|
Nov 11 2011, 10:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256

|
Цитата Позволю себе усомниться в последнем утверждении. А флеша скоклько? Специально для Вас посчитать? На вскидку до 500 байт флэша. По сути дела, написанный процесс флэш-памяти больше занимать не стал. Цитата А какие нехилые прологи и эпилоги у ISR и-за наличия вызова процедур. Просто огромные, загрузили в Z адрес подпрограммы и пошли ее выполнять.
Сообщение отредактировал Alt.F4 - Nov 11 2011, 10:44
|
|
|
|
|
Nov 11 2011, 10:59
|
    
Группа: Свой
Сообщений: 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 байт?
|
|
|
|
|
Nov 11 2011, 11:45
|

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

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

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

|
Цитата(ILYAUL @ Nov 11 2011, 13:43)  Я об этом . Вам надо просидеть в прерывании 100 мкс ( судя из Вашей фразы) что бы отправить ответ Вы не так поняли его. сидеть не надо. надо ответить не позднее чем 100..500 мкс и всё. Цитата(ILYAUL @ Nov 11 2011, 14:49)  Врядли , если asm то только те ,что будут меняться Процедуры вызываются косвенно и не известно что каждой из них потребуется.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Nov 11 2011, 11:56
|

Профессионал
    
Группа: Свой
Сообщений: 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 адрес с которого ушли. Т.е. по принципу многозадачности.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|