AVR + UART + FreeRTOS
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
groovy 21 ноября 2006 г. 01:07
|
|
|
|
К Atmega128 подцеплен модем sim300.
Чтобы вывести его из датамода, ему надо заслать последовательность "+++" с интервалом не более 20мс, ну и соответственно подождать 500мс до посылки и 500мс после, если одно из условий не выполняется "+++" трактуются как данные, а не как команда к выходу их датамода.
Проблема в том что примерно раз из десяти что-то не срастается и +++ уходят в виде данных, т.е. по всей видимости не выдерживаются интервалы, за 500мс я уверен, т.к. жду по секунде.
Отправка +++ идет через прерывания, т.е. запись в UDR0->прерывание->запись в UDR0 и т.д.
Т.к. юзается FreeRTOS, там частенько запрещаются прерывания, и хотя я вижу снифером что уходят все три плюса, за 20мс ручаться не могу.
Вопрос в том, может ли запрещение прерываний затормозить процесс отправки??
В моем понимании если на момент когда байт из UDR0 отправлен и прерывания запрещены, то просто установится флаг, а прерывания не будет даже после того как ОС их разрешит.
Могу ли я быть уверен, при такой схеме, что если уходят все данные, задержек точно не было и интервал отправки не превышает 20мс??
Скорость порта 9600.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- На такое большое время сама ОСь не может отключать прерывания — AlexD (21.11.2006 14:36 212.23.84.52, 295 байт)
- Чем скорее начнете отлаживаться с осциллографом, тем лучше — Алексей Мусин (21.11.2006 11:47 84.254.194.13, пустое)
- Если у Вас прерывания запрещаются на значительное время ....(+) — КСПшник (21.11.2006 11:13 212.12.13.92, 482 байт)
- Разберитесь с приоритетами в своей программе. А еще вы можете временно повысить приоритет, отослать даныые, и вернуть прежний приоритет — bender (21.11.2006 10:23 212.12.2.70, пустое)
- Нужна супер таска с высшим приоритетом - отправка трех плюсов. — Vladimir Ljaschko (21.11.2006 09:45 82.209.192.143, пустое)
- У меня приблизительно похожая ситуация, и думаю, что пора RTOS попробовать. Не, нет красивых и универсальных решений :-) — Vladimir Ljaschko (21.11.2006 09:43 82.209.192.143, пустое)
- Если передача организована по прерываниям UDRE то Вы фактически имеете двойную буферизацию те достаточно 1-го прерывания за 40 мс, дальше считайте сами 40мс на 16МГц(к примеру) это 640 000 тактов, неужели прерывания запрещаются на 640 000 тактов? Если это так то закопайте эту RTOS и никому не говорите где :) — F8 (21.11.2006 09:17 213.130.22.7, пустое)
- Так и есть, наверняка... На момент отправки "+++" нужно тормозить FreeRTOS... Тока как не знаю... Не в теме FreeRTOS... — ETM (21.11.2006 01:52 62.117.85.87, пустое)
- Ты еще Windows Vista на AVR поставь - тогда год ждать придется — =AVR= (21.11.2006 01:18 80.92.96.19, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание