Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil uVision3 (3.31)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Glucik
Столкнулся с такой вещью:

В примере неверно вычисляестя значение переменной Size:

Код
Size=(*(u16*)((u32)SB_Data+0x28))+0x2C;


А если сделать так, то всё корректно:

Код
Size=(SB_Data[0x28]|(SB_Data[0x29]<<8))+0x2C;


Вот вся функция:

Код
void LoadData(const u8* Data)
{
u16 Size;
SB_Data=Data;
Size=(SB_Data[0x28]|(SB_Data[0x29]<<8))+0x2C;
//...
}


Вот описание масива данных и вызов вышеобъявленной функции:

Код
const u8 SoundData[1000]=
{
0x01,0x02,......
}

//....

int main(void)
{
//...
LoadData(SoundData);
//...
}


Данных в программе очень много (указателей). В чём может быть дело? Неужели RealView загибается?
AndrewN
Цитата(Glucik @ Sep 5 2008, 03:45) *
В примере неверно вычисляестя значение переменной Size:

Вероятно, значение по адресу SB_Data нечетное, т.е. адрес массива SoundData не выровнен по полуслову. Если его подвинуть на байт, добавив const u8 dummy; сразу перед строчкой объявления массива SoundData, или выровнять на полуслово при помощи прагмы или атрибута (как Кейл умеет?), то должно заработать - я надеюсь.
Glucik
Цитата(AndrewN @ Sep 5 2008, 05:20) *
Если его подвинуть на байт, добавив const u8 dummy; сразу перед строчкой объявления массива SoundData, или выровнять на полуслово при помощи прагмы или атрибута (как Кейл умеет?), то должно заработать - я надеюсь.


Попробую. Да, Keil может.
Glucik
Цитата(AndrewN @ Sep 5 2008, 05:20) *
Если его подвинуть на байт, добавив const u8 dummy; сразу перед строчкой объявления массива SoundData, или выровнять на полуслово при помощи прагмы или атрибута (как Кейл умеет?), то должно заработать - я надеюсь.


Попробую. Да, Keil может.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.