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

 
 
 
Reply to this topicStart new topic
> Keil uVision3 (3.31), RealView compiler
Glucik
сообщение Sep 5 2008, 00:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986



Столкнулся с такой вещью:

В примере неверно вычисляестя значение переменной 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 загибается?
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Sep 5 2008, 02:20
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



Цитата(Glucik @ Sep 5 2008, 03:45) *
В примере неверно вычисляестя значение переменной Size:

Вероятно, значение по адресу SB_Data нечетное, т.е. адрес массива SoundData не выровнен по полуслову. Если его подвинуть на байт, добавив const u8 dummy; сразу перед строчкой объявления массива SoundData, или выровнять на полуслово при помощи прагмы или атрибута (как Кейл умеет?), то должно заработать - я надеюсь.
Go to the top of the page
 
+Quote Post
Glucik
сообщение Sep 5 2008, 02:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986



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


Попробую. Да, Keil может.
Go to the top of the page
 
+Quote Post
Glucik
сообщение Sep 5 2008, 02:30
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 22-04-08
Пользователь №: 36 986



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


Попробую. Да, Keil может.
Go to the top of the page
 
+Quote Post

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

 


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


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