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

 
 
> Ошибка считывание DWORD данных из BYTE массива
Yaumen
сообщение Nov 9 2009, 14:36
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



В программе, написанной на C++ (Keil) для LPC2366 обнаружилась следующая проблема при работе с массивом:

Вот оптимизированный для просмотра отрывок из программы:

BYTE byData[8] = {0x12, 0x00, 0x0A, 0x00, 0x01, 0x00, 0x02, 0x00};
BYTE* prtBuf = (BYTE*)byData;
DWORD dwVal1 = *((DWORD*)(prtBuf));
DWORD dwVal2 = *((DWORD*)(prtBuf + 1));
DWORD dwVal3 = *((DWORD*)(prtBuf + 2));
DWORD dwVal4 = *((DWORD*)(prtBuf + 4));

На выходе получаю следующие значения:
dwVal1 = 0x000A0012;
dwVal2 = 0x12000A00;
dwVal3 = 0x0012000A;
dwVal4 = 0x00020001;

Ошибка возникает в значении dwVal2 и dwVal3, т.е. при смещении относительно начала массива, не кратно DWORD. Из-за чего это происходит и можно ли с этим бороться!?

Сообщение отредактировал Yaumen - Nov 9 2009, 14:43
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Nov 9 2009, 14:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Yaumen @ Nov 9 2009, 17:36) *
Из-за чего это происходит и можно ли с этим бороться!?

Из-за того, что ARM7 сам по себе не умеет читать слова по невыровненным адресам.
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Nov 9 2009, 14:59
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Цитата(aaarrr @ Nov 9 2009, 16:50) *
Из-за того, что ARM7 сам по себе не умеет читать слова по невыровненным адресам.


Т.е. или все выравнивать или формировать DWORD самому, считывая побайтно?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:54
Рейтинг@Mail.ru


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