AVR + IAR + Глобальные переменные

Thu Jun 03 2004 19:08, Pavel Sirotkin wrote to All:

PS> Хочется задать 3 переменные,одна из которых величиной 2 байта, PS> а две другие представляют из себя младший и старший байт первой.

PS> В CodeVision работает такая конструкция:

PS> unsigned int temp @ 0x60; PS> unsigned char temp_lsb @ 0x60; PS> unsigned char temp_msb @ 0x61;

PS> А вот IAR ругается на строчки:

PS> __no_init unsigned int temp @ 0x60; PS> __no_init unsigned char temp_lsb @ 0x60; PS> __no_init unsigned char temp_msb @ 0x61;

PS> Очень хочется,чтоб работало :-)

Тяжелое наследие ассемблерного детства :)

typedef union { u16 word; struct { u8 lsb; u8 msb; } byte; } MSB_LSB;

___no_init MSB_LSB temp;

"There is no business other then show business " (c)

Reply to
Vladimir Vassilevsky
Loading thread data ...

Здравствуйте.

Хочется задать 3 переменные,одна из которых величиной 2 байта, а две другие представляют из себя младший и старший байт первой.

В CodeVision работает такая конструкция:

unsigned int temp @ 0x60; unsigned char temp_lsb @ 0x60; unsigned char temp_msb @ 0x61;

А вот IAR ругается на строчки:

__no_init unsigned int temp @ 0x60; __no_init unsigned char temp_lsb @ 0x60; __no_init unsigned char temp_msb @ 0x61;

Очень хочется,чтоб работало :-) Куда копать ? Заранее спасибо.

Reply to
Pavel Sirotkin

Hello, Pavel Sirotkin !

Это легко делается стандартными средствами (union, адресная арифметика etc.), зачем применять нестандартные?

И правильно делает.

С уважением, Дима Орлов.

Reply to
Dima Orlov

Здравствуйте, Vladimir

VV> Тяжелое наследие ассемблерного детства :)

Желание максимально упростить программу и код покороче получить :-)

VV> typedef union { VV> u16 word; VV> struct { VV> u8 lsb; VV> u8 msb; VV> } byte; VV> } MSB_LSB; VV>

VV> ___no_init MSB_LSB temp;

компилируем -> получаем:

Error[Pe349]: no operator "*" matches these operands Error[Pe349]: no operator "~" matches these operands

Это мне перегрузку операторов делать ? Или я не так понял ??

А попроще никак нельзя ? :-)

Reply to
Pavel Sirotkin

Здравствуйте

VV> typedef union { VV> u16 word; VV> struct { VV> u8 lsb; VV> u8 msb; VV> } byte; VV> } MSB_LSB; VV>

VV> ___no_init MSB_LSB temp;

Извиняюсь,что то туплю. Разобрался.

Спасибо,за ответы.

Reply to
Pavel Sirotkin

Привет Pavel!

03 Jun 04 19:08, Pavel Sirotkin писал All:

PS> Хочется задать 3 переменные,одна из которых величиной 2 байта, PS> а две другие представляют из себя младший и старший байт первой.

PS> В CodeVision работает такая конструкция:

PS> unsigned int temp @ 0x60; PS> unsigned char temp_lsb @ 0x60; PS> unsigned char temp_msb @ 0x61;

PS> А вот IAR ругается

Правильно ругается - синтаксическая ошибка. Вообще-то в подобных случаев обычно используют union:

typedef struct { #ifdef __LITTLE_ENDIAN__ unsigned char lsb; unsigned char msb; #else unsigned char msb; unsigned char lsb; #endif } two_ch;

typedef union { unsigned int i; two_ch b; } uint_uchars;

Задавать же фиксированные адреса для переменных лучше примерно так:

#define temp (*(uint_uchars*)0x60)

А использовать нестандартные расширения ИМХО имеет смысл только там, где стандартными средствами языка задача не решается...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Крыскас. Потому что крыса вам доверяет.

Reply to
Alex Mogilnikov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.