[an error occurred while processing this directive]
3 вопроса любителям и профессионаламWinAvr(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено misyachniy 29 декабря 2005 г. 10:48

В каком месте декрементируется m?


while (m-- > 0)
{
UART1_SendByte(m);
}

Почему не корректно объявление двухмерного массива:

u08 __attribute__ ((progmem)) FontTable[256] [8]
Пришлось объявить одномерным:
u08 __attribute__ ((progmem)) FontTable[]

Есть желание завести в системе несколько таймеров с разрешающей способностью в
10 миллисекунд и размером в 2 байта.
Запрограммирую, например таймер 0 на прерывание раз в 10 миллисекунд.


Объявлю, например 4 таймера:
volatile u16 Timers00, Timers01, Timers02,Timers03;

В обработчике прерывания буду уменьшать до 0;

SIGNAL (SIG_OVERFLOW0) //
{
if Timers00 Timers00--;
if Timers01 Timers01--;
if Timers02 Timers02--;
if Timers03 Timers03--;
}

Но поскольку процессор 8-ми битный то присвоение значения таймеру
и проверка на равенство его нулю в основной программе может быть прервана прерыванием.
В результате таймер будет функционировать не правильно.
Запрещать и разрешать прерывания как-то не “красиво” нужно постоянно помнить о состоянии флага прерывания.
Есть ли изящное решение или специальные функции, встроенные в WinAvr?
Спасибо.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru