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

 
 
> Выравнивание в NIOSII
juvf
сообщение Jan 6 2011, 04:19
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



вот код
Код
char bufRecive[100];
alt_u16 countRxTx = 0x0025;
*reinterpret_cast<alt_u16*>(&bufRecive[1]) = countRxTx;


после этого bufRecive[0] равно 0х25, а bufRecive[1] равно 0х00. Сталкивался с такой проблемой в msp430 в IAR-e. Там нужно адрес массива bufRecive при объявлении выравнивать дерективой, типа #pragma aligment = 2
В Nios-e похоже тоже из-за выравнивания. Как тут массив выравнять? Или если не выравнивание, то что? Как побороть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Jan 11 2011, 00:56
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



вобщем проблема в том, скорее всего процессор игнорирует младший бит для указателя на слово. Поэтому если указатель на слово нечетный, например 0х0890015, то он воспринимается как 0х0890014. Однако указатель на char по нечетному адресу работает нормально. Особенности архитектуры. Отчасти есть тут вина компилятора. В стандарте с++ не оговариваются подобные нюансы. И если компилятором заявленно "с++", то компилятор должен придерживаться стандарта. Возможно где-то в доках на компилятор этот нюанс оговорен, но я не нашел. А возможно, что компилятор с каким нибудь ключем, правильно разименует нечетный указатель на слово, ведь возможно же обращение к нечётной ячейке памяти.

Цитата
как вариант - написать макросы для переворачивания байтовых последовательностей при присваивании.

Вобщем для себя проблему решиль примерно так, тока не макросы, а вместо char bufRecive[100]; написал класс с 2-мя шаблонными функциями write<class T>(const T& t, int adr) и T read<class T>(int adr), который хранит массив и записывает/читает байты в/из него любого типа, любой длинны и по любому адресу.

Проблема решена. Всем спасибо.
Go to the top of the page
 
+Quote Post



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

 


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


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