Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено Юрий_СВ (213.5.199.158) 23 февраля 2011, г. 17:28
В ответ на: Ответ: отправлено Oleg_IT 23 февраля 2011, г. 16:57

1) Кстати, по возможности, если переменная имеет неиспользуемые значения (для FlagTx_0 это 2-255) отсекайте их в сравнении. Не пишите "==" - пишите "<=", ">=". В Си делают тоже самое. В данном случае лучше использовать стандартный подъод Си (if (FlagTx_0) или if (!FlagTx_0)). Для логических переменных сравнение всегда с нулём ("==", "!="), но не с "1".

4)Опереция PORTF &=~ (1 << 0); - это, как минимум, 3 команнды:
IN(LD)
AND
OUT(ST)
Может быть и более (загрузка константы и адресов(для ST)).
Прерывание может произойти между любыми из этих команд.
Т.е., н-р, в StartTX_0(void) выполнилась команда IN(LD) (сохранили старое значение бит1), происходит прерывание ISR (USART3_UDRE_vect) - бит1 поменялся, а по команде OUT(ST) он затрётся старым (сохранённым) значением. При чём затираться будет иногда (именно при попаданиях прерывания на время исполнения этой опериции в фоне).

:) Естественно, в прерывании критическая секция не нужна - прерывания там и так запрещены (т.к. вы не используете вложенные прерывания).
А если вы ставите в прерывании SEI - то у вас могут появиться вложенные прерывания - тогда всё ещё хуже - все ваши "и/или" аукнутся по той же причине (п.4)


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru