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

 
 
> Microblaze, проблема с выравниванием данных?, Release 14.2 Build SDK_P.28xd
misyachniy
сообщение Sep 9 2013, 15:15
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



С компьютера по RS485 связываюсь с микроблейзом.
Послеприема кадра в байтовый буфер(прием, проверка контрольной суммы) передаю указатель в функцию разбора
Код
void exec_ssp_read(u8 *parameter)
{
u8 tmp_buf[2];
unsigned long addr;

addr = *((unsigned long*)parameter);

if (addr == GET_ORIENT_ADDR)
{
     tmp_buf[0] = SSP_ACK;
     tmp_buf[1] = one_shot();

     send_char_array_0(&tmp_buf[0], 2);
     return;
}

exec_ssp_nak_incorrect();
return;
}

Константа для сравнения определена
#define GET_ORIENT_ADDR ((unsigned long)0x00000001)

В отладчике видно что и переменная addr (рис. addr.PNG) и константа GET_ORIENT_ADDR(const.PNG) равны 1.
Но функция обходит скобки и уходит на exec_ssp_nak_incorrect().

Прямое сравнение if (addr == (u32) 0x00000001); работает.

При работе с ARM(SAM7S, IAR - не помню какой, лет 7 назад) я встречал случаи, что addr = *((unsigned long*)parameter); не работает если указатель на char не выровнен на двойное слово.

Можно предположить что отладчик и компилятор Eclipse работают по разному, но думаю, что ответ проще.

На сколько я помню, создавал в Визарде микроблейз с little endian расположением, но попробовал найти как это проверить и не нашел. Параметры синтеза и включаемых модулей в ядро есть, а "с какого гонца разбивать яйца" - нету.

Прикладываю еще рисунок expression.PNG в котором видно что в буфере данные little endian.

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



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

 


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


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