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

 
 
> avr306, Предупреждение компилятора
alux
сообщение Mar 23 2008, 14:51
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Разбираюсь с этим апнотом. IAR v.5.10A выдает предупреждения на сравнения двух volatile глобальных переменных:
Код
// Static Variables
static unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
static volatile unsigned char UART_RxHead;
static volatile unsigned char UART_RxTail;
static unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
static volatile unsigned char UART_TxHead;
static volatile unsigned char UART_TxTail;
.......................
#pragma vector=USART0_UDRE_vect
__interrupt void USART0_TX_interrupt( void )
{
  unsigned char tmptail;

  // Check if all data is transmitted
  if ( UART_TxHead != UART_TxTail ) <<<< Warning
  {
......
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement

Переменные UART_TxHead , UART_TxTail, UART_RxHead, UART_RxTail проинициализированы 0 в uart_Init() до разрешения прерываний. Как правильно поступить в данном случае:
1) не обращать внимания на предупреждения
2) заблокировать выдачу сообщений
3) убрать volatile при объявлении этих переменных ?
Если убрать volatile в одной из сравниваемой переменной, то варнинги не выдает. Но не будет ли при этом проблем с оптимизацией?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:31
Рейтинг@Mail.ru


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