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

 
 
> 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
 
Start new topic
Ответов
alux
сообщение Mar 24 2008, 04:37
Сообщение #2


Знающий
****

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



Почему в данном примере в uart_Init() переменные инициализируются 0 ?
Код
void uart_Init(unsigned int ubrr)
{
  unsigned char x;
    
...........
  x = 0;                 // Flush receive buffer
  UART_RxTail = x;
  UART_RxHead = x;
  UART_TxTail = x;
  UART_TxHead = x;  
}
И почему это делается через переменную х, а не просто через присвоение 0 ? Ведь они же объявлены как статические, поэтому по умолчанию должны быть проинициализированы 0. Или для static volatile это правило не распространяется?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 08:04
Рейтинг@Mail.ru


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