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

 
 
> Странное поведение компилятора
Woodoo
сообщение Dec 22 2006, 12:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391



Доброго времени суток!

странное поведени компилятора заключаеться в неверном интерпретировании оператора пост-дикремента. Почему так происходит - непонятно.
Код
//Header file
__near __no_init volatile struct
{
    unsigned int Result;
    enum {K2 = 2, K4 = 4, K8 = 3, K16 = 4, K32 = 5, K64 = 6, K128 = 7} PS : 3;
    unsigned char IE : 1, IF : 1, FR : 1, SC : 1, EN : 1;
    enum {ADC0, ADC1, ADC2, ADC3, ADC4, ADC5, ADC6, ADC7, VBG = 0x0E, GND = 0x0F} MUX : 4;
    unsigned char : 1, LAR : 1;
    enum {AREF = 0, AVCC = 1, Internal = 3} REF : 2;
} ADC @ 0x24;

//Source file
    ADC.MUX = 3;
    Array[ADC.MUX++] = ADC.MUX;     // почему? [3] = 4
    ADC.MUX = 4;
    Array[ADC.MUX] = ADC.MUX++;     //  [4] = 4  mux = 5 тут ок


Код составлен для тестирования. Смысла в нем искать не надо. Проблема заключаеться в том, что компилятор некоректно выполняет вторую строчку src. файла (Array[ADC.MUX++] = ADC.MUX;), в результате чего в третьем элементе массива записывается значение 4! Я уж потерял веру в Си, пока разбирался с проблемой.
Может подобное свойство - следствие использования облости ввода-вывода? НО! замена переменной ADC.MUX на DDRD(к примеру) приводит к нормальной работе: Array[3] = 3, Array[4] = 4.

при этом компиялтор, как по мне, безосновательно выругался, когда компилировал этот код:
Цитата
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement E:\Mazilla\Projects\IAR AVR ATMega8\main.c 59


Замечу вуругался на оба варианта, с ADC.MUX и с DDRD (точнее PORT.D.DIR.Value smile.gif ), но второй, повторюсь, скампилировал верно! В чем проблема?

Кстати, может кому понравится такой подход - организация регистров перефирии в смысловые структуры (ах как не хватает классов си++)? Если кто использует такой подход - поделитись опытом.
Go to the top of the page
 
+Quote Post



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

 


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


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