Вопрос по avr-gcc

Thu, 25 Dec 2003 18:49:05 +0300 Unrau Alexander wrote to All:

[...]

UA> Т.е. хочется просто написать чтоот типа:

UA> uint32_t dwInternalVariable1; UA> uint32_t dwInternalVariable2; UA> #define dwExternalRegisterLitleEndian ( *((volatile uint32_t*)(0xXXXX)) ) UA> #define dwExternalRegisterBigEndian ( *((volatile uint32_t*)(0xYYYY)) ) UA> ... UA> dwInternalVariable1 = dwExternalRegisterLitleEndian; UA> dwInternalVariable2 = dwExternalRegisterBigEndian; UA> ... UA> Может секции какие отдельно прописать на эти девайсы и задать для них UA> порядок UA> байт. Или тип данных какойнить обратный применить.

UA> А также можно ли его (avr-gcc) обязать писать/читать 16 и 32 разрядные UA> слова UA> в определённом порядке? UA> Hу типа сначала младший байтик, потом старший, или наоборот.

Это врядли.

UA> Подсознательно мне мыслится что всё это не возможно, но мало-ли? UA> Можно наверное c++ обёртку смострячить, но что-то как-то не хочется. :(

Почему? Как раз тот самый случай, когда С++ рулит. Причем, ты уже почти написал нужный код, осталось только добавить ключевое слово class, пару фигурных скобок да макросы на функции заменить.

// --------------------------------------- class TSlon { public: TSlon() : Value(0) { } void GetBE() { Value = ...; } void GetLE() { Value = ...; } void operator=(uint32 x) { Value = x; } operator uint32 () const { return Value; }

private: uint32 Value; };

TSlon s1, s2;

void f() { s1.GetBE(); s2.GetLE();

uint32 a = s1; a += s2; // :)

... // и так далее }

// ---------------------------------------

Если нужно не только читать, но и писать такими порядками, то добавить еще пару функций.

Reply to
Harry Zhurov
Loading thread data ...

Hello Unrau.

25 Dec 03 18:49, you wrote to all:

UA> Странного хочется. UA> А можно ли заставить avr-gcc для разных адресных пространств (внешней UA> памяти) UA> использовать разный порядок байт (big и litle endian).

Да вроде нет.

UA> Hапример у меня 2 девайса на внешней шине которые доступны как UA> внешняя UA> память, но имеют разный порядок байт (с 16 и 32 разрядными UA> регистрами), и очень не хочется обращаться к одному из них побайтно и UA> складывать прочитанные байтики в половинки/четвертинки внутренних UA> переменных при чтении или доставать байтики из этих UA> половинок/четвертинок при записи.

Я бы сделал ассемблерные макросы и обращался через них. (Примеры можно найти в .h файлах, полное описание где-то в недрах документации)

UA> А также можно ли его (avr-gcc) обязать писать/читать 16 и 32 разрядные UA> слова в определённом порядке? Hу типа сначала младший байтик, потом UA> старший, или наоборот.

avr-gcc имеет встроеный порядок записи/чтения байтов в слове тот, который нужен для правильного обращения к внутренним 16-битным регистрам. Менять его я бы не стал. Сделал бы макрос.

UA> Можно наверное c++ обёртку смострячить, но что-то как-то не хочется. UA> :(

Это к HZ ;)

Alexey

Reply to
Alexey Boyko

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.