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; // :)
... // и так далее }
// ---------------------------------------
Если нужно не только читать, но и писать такими порядками, то добавить еще пару функций.