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

 
 
> Odd address trap и LPC23xx, А что, LPC не генерит unaligned access exeption?
VslavX
сообщение Jan 15 2009, 18:43
Сообщение #1


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



У меня в тестовой прошивке есть такой небольшой чудный кусочек кода:
Код
{
    ungigned long *p;
    dprintf("\r\nNon aligned DWORD read.. ");
    dflush();
    p = (unsigned long*)(0x209 + LPC_ISRAM);
    dprintf("%08X", *p);
}


Назначение этого кусочка - протестировать работу соответствующего обработчика исключения. Код прекрасно отработал на S3C44BOX, S3C2410, IXP42x, SAM7xx, PXA2xx/3xx и много лет все было чудесно. И вот, "понимаете, в машине в которой мы ехали, случайно, совершенно случайно, оказался цемент" ©. Я "совершенно случайно" запустил этот код на LPC2388, и... не увидел свой любимый "ODD ADDRESS TRAP".
Смотрим документацию, "усер мануал" на LPC23xx вообще не содержит слова "unaligned". В-общем, красота - при невыравненном адресе - на LPC23xx читается/пишется переставленный мусор, и все это МОЛЧА. Такая низость в самом деле имеет место, или я чего-то недопонимаю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
meister
сообщение Jan 16 2009, 08:33
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(VslavX @ Jan 15 2009, 22:43) *
В-общем, красота - при невыравненном адресе - на LPC23xx читается/пишется переставленный мусор, и все это МОЛЧА. Такая низость в самом деле имеет место, или я чего-то недопонимаю?


У меня есть файл arm7tdmi_instruction_set_reference.pdf, там написано следующее:

Код
If the memory address is not word-aligned, the value read is rotated right by 8 times
the value of bits [1:0] of the memory address. If R15 is specified as the destination, the
value is loaded from memory and written to the PC, effecting a branch.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 16 2009, 09:02
Сообщение #3


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Код
If the memory address is not word-aligned, the value read is rotated right by 8 times
the value of bits [1:0] of the memory address. If R15 is specified as the destination, the
value is loaded from memory and written to the PC, effecting a branch.

Именно это я подразумевал под словом "переставленный". Для ARM7TDMI, который работает только в LE - будет такой вариант как Вы отцитировали. Для старших ARM-ов работающих в BE/LE вполне могут быть и отличия.
В любом случае - в результате невыравненного доступа получаем отнюдь не тот результат какой ожидали, а поскольку исключения нет - то "дорогая не узнает, какой у парня был конец" ©. Очень весело отлавливать такие проблемы при портировании 200К строк С-шного кода с 8-битника, например. NXP - "низачот", первый раз такой облом вижу. В 70-ых на PDP такое счастье как OAT было, а вот в 21-ом веке - не судьба.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 16 2009, 09:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(VslavX @ Jan 16 2009, 12:02) *
Очень весело отлавливать такие проблемы при портировании 200К строк С-шного кода с 8-битника, например.

Вообще-то "это отлаживать" - Вам "низачет", ибо нужно не с последствиями бороться а банально этои 200К строк (кстати для 8bit это число строк кода СИЛЬНО СИЛЬНО надуманное - "урежте осетра" как минимум на порядок, тогда еще где-то в 64-128K бинарника поверю ) хоть мельком, но просмотреть. И вообще с этим хорошие компиляторы хорошо справляются - warning-ов хватает, если, конечно перворначальный код не совсем через заденпроходное отверстие писан, но незачем такое и портировать.
Цитата
NXP - "низачот", первый раз такой облом вижу. В 70-ых на PDP такое счастье как OAT было, а вот в 21-ом веке - не судьба.

Тут странное дело - когда давно поверял работу своего обработчика exception на чем-то вроде LPC2114 - точно работало, а потом на свежих чипах как-то исчезло, хотя недавно переписывал слегка и некоторым удивлением обнаружил, что на одном из китов с LPC2148 тоже отработал!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 16 2009, 10:20
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Jan 16 2009, 11:58) *
(кстати для 8bit это число строк кода СИЛЬНО СИЛЬНО надуманное - "урежте осетра" как минимум на порядок, тогда еще где-то в 64-128K бинарника поверю )

Я прочитал как 200KB smile.gif
200K строк действительно многовато.


Цитата
И вообще с этим хорошие компиляторы хорошо справляются - warning-ов хватает, если, конечно перворначальный код не совсем через заденпроходное отверстие писан, то незачем такое и портировать.

Компиляторы не помогут когда адрес вычисляется диамически. sad.gif
Например, сравнение IPшника приятого пакета с сетевой маской.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 16 2009, 10:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(defunct @ Jan 16 2009, 13:20) *
Компиляторы не помогут когда адрес вычисляется диамически. sad.gif
Например, сравнение IPшника приятого пакета с сетевой маской.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 16 2009, 13:27
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Jan 16 2009, 12:30) *
Отнюдь. В реальности буфера под фреймы выделяются выровненые а нормальная разборка ведется по наложенной структуре.

Это все так, но давайте рассмотрим случай когда пакеты идут с разных интерфейсов. Eth и PPP-Link (у одного перед IP header'ом 14 байт eth заголовка, у второго длина ppp заголовка зависит от настроек канала и может быть от 1 байта и выше... И там и там "по-умолчанию" IP заголовок получается невыровненым относительно начала пакета. А мы хотим проверить по маске быстро (чтобы "одной" командой):

Код
*(U32 *)(packet + offset)   &  mask


Вот тут недостача align exception'а может сыграть злую шутку


Цитата
Если кто-то нагородил нечто непотребное в стиле "я пишу на любом языке, как в машинных кодах", то, простите, портировать такое просто не надо - проблемы будут по любому.

Я безотносительно, ни к чьему коду не привязываясь. Просто интересно получить ответы на следующие вопросы:

Что у NXP есть по поводу misalign'a - как они предлагают обрабатывать такие ситуации в run-time (какие-нить их доки на этот счет)?
Может быть есть сводка в каких NXP чипах align exception поддерживается, а в каких нет?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 16 2009, 13:43
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(defunct @ Jan 16 2009, 19:27) *
Код
*(U32 *)(packet + offset)   &  mask


Вот тут недостача align exception'а может сыграть злую шутку

Для таких случаев нужно создавать дополнительный U32 (например U32ua) внутри pragma pack (1). Это конечно не совместимость снизу вверх, но так можно написать универсальный код, правильно работающий на 8, 16 и 32 платформах.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- VslavX   Odd address trap и LPC23xx   Jan 15 2009, 18:43
- - aaarrr   Цитата(VslavX @ Jan 15 2009, 21:43) Такая...   Jan 15 2009, 19:37
|- - VslavX   Цитата(aaarrr @ Jan 15 2009, 21:37) Имеет...   Jan 15 2009, 20:08
|- - abcdefg   Цитата(VslavX @ Jan 15 2009, 23:08) P.S. ...   Jan 16 2009, 07:35
|- - VslavX   Цитата(abcdefg @ Jan 16 2009, 09:35) в ко...   Jan 16 2009, 07:56
- - amw   Цитата(VslavX @ Jan 15 2009, 20:43) У мен...   Jan 16 2009, 07:43
|- - meister   Цитата(VslavX @ Jan 16 2009, 13:02) В люб...   Jan 16 2009, 09:04
||- - zltigo   Цитата(defunct @ Jan 16 2009, 16:27) Это ...   Jan 16 2009, 13:38
|||- - defunct   Цитата(zltigo @ Jan 16 2009, 15:38) В дан...   Jan 16 2009, 13:49
|||- - GetSmart   Цитата(defunct @ Jan 16 2009, 19:49) Не, ...   Jan 16 2009, 14:16
|||- - defunct   Цитата(GetSmart @ Jan 16 2009, 16:16) Ещё...   Jan 16 2009, 18:01
|||- - GetSmart   Цитата(defunct @ Jan 17 2009, 00:01) Да н...   Jan 17 2009, 05:12
|||- - VslavX   Цитата(GetSmart @ Jan 17 2009, 07:12) А в...   Jan 17 2009, 06:46
|||- - defunct   Цитата(GetSmart @ Jan 17 2009, 07:12) Пар...   Jan 17 2009, 17:00
|||- - zltigo   Цитата(defunct @ Jan 17 2009, 19:00) В та...   Jan 17 2009, 17:13
|||- - defunct   Цитата(zltigo @ Jan 17 2009, 19:13) Вы, э...   Jan 17 2009, 18:25
|||- - aaarrr   Цитата(defunct @ Jan 17 2009, 21:25) т.к....   Jan 17 2009, 18:41
|||- - abcdefg   Цитата(defunct @ Jan 17 2009, 21:25) О то...   Jan 17 2009, 18:47
|||- - zltigo   Цитата(defunct @ Jan 17 2009, 20:25) О то...   Jan 17 2009, 19:46
||||- - defunct   Цитата(zltigo @ Jan 17 2009, 21:46) Ну и ...   Jan 18 2009, 00:44
||||- - GetSmart   Цитата(defunct @ Jan 18 2009, 06:44) Согл...   Jan 18 2009, 06:15
||||- - defunct   Цитата(GetSmart @ Jan 18 2009, 08:15) Дам...   Jan 18 2009, 21:46
|||- - VslavX   Цитата(defunct @ Jan 17 2009, 20:25) на L...   Jan 17 2009, 19:58
|- - VslavX   Цитата(zltigo @ Jan 16 2009, 11:58) Вообщ...   Jan 16 2009, 11:03
|- - meister   Цитата(zltigo @ Jan 16 2009, 13:58) Тут с...   Jan 16 2009, 11:11
|- - zltigo   Цитата(VslavX @ Jan 16 2009, 14:03) Самый...   Jan 16 2009, 12:07
|- - VslavX   Цитата(zltigo @ Jan 16 2009, 14:07) Все в...   Jan 16 2009, 16:23
|- - zltigo   Цитата(VslavX @ Jan 16 2009, 19:06) Чему ...   Jan 16 2009, 16:38
|- - VslavX   Цитата(zltigo @ Jan 16 2009, 18:24) проек...   Jan 16 2009, 16:39
|- - zltigo   Цитата(VslavX @ Jan 16 2009, 19:39) А мож...   Jan 16 2009, 17:01
|- - VslavX   Цитата(zltigo @ Jan 16 2009, 19:01) memcp...   Jan 16 2009, 18:06
|- - zltigo   Цитата(VslavX @ Jan 16 2009, 21:06) Ну и ...   Jan 16 2009, 18:52
|- - VslavX   Цитата(zltigo @ Jan 16 2009, 20:52) Посме...   Jan 16 2009, 20:28
|- - zltigo   Цитата(VslavX @ Jan 16 2009, 22:28) Гы, я...   Jan 16 2009, 21:45
- - GetSmart   Прямо скажу, я за 3 года об АРМах столько всего на...   Jan 17 2009, 08:52
|- - zltigo   Цитата(GetSmart @ Jan 17 2009, 10:52) А н...   Jan 18 2009, 11:17
|- - aaarrr   Цитата(zltigo @ Jan 18 2009, 14:17) Если ...   Jan 18 2009, 12:10
||- - zltigo   Цитата(aaarrr @ Jan 18 2009, 14:10) генер...   Jan 18 2009, 12:14
|- - VslavX   Имхо, это уж совсем клиническая ситуация - "н...   Jan 18 2009, 13:06
- - zltigo   ЦитатаИмхо, это уж совсем клиническая ситуация - ...   Jan 18 2009, 13:18
|- - VslavX   Мне правда интересно. На ARM-е можно любой невырав...   Jan 18 2009, 13:30
|- - zltigo   Цитата(VslavX @ Jan 18 2009, 15:30) Не по...   Jan 18 2009, 13:53
|- - VslavX   Цитата(zltigo @ Jan 18 2009, 15:53) У мен...   Jan 18 2009, 14:29
|- - zltigo   Цитата(VslavX @ Jan 18 2009, 16:29) Ну, д...   Jan 18 2009, 15:32
|- - VslavX   Кодtst R0,#0x3 ldrh R0,[R0, #+0] lsrne ...   Jan 18 2009, 15:47
|- - GetSmart   Цитата(zltigo @ Jan 18 2009, 21:32) Кодls...   Jan 18 2009, 16:28
|- - zltigo   Цитата(GetSmart @ Jan 18 2009, 18:28) Это...   Jan 18 2009, 17:27
|- - VslavX   КодBYTE tbuff[8] = { 0x01, 0x02, 0x03, 0x0...   Jan 18 2009, 19:32
|- - zltigo   Цитата(VslavX @ Jan 18 2009, 21:32) А чег...   Jan 18 2009, 20:06
|- - VslavX   Цитата(zltigo @ Jan 18 2009, 22:06) Писал...   Jan 18 2009, 20:37
|- - zltigo   Цитата(VslavX @ Jan 18 2009, 22:37) Я так...   Jan 18 2009, 20:55
- - Rst7   Цитатаtst R0,#0x3 ldrh R0,[R0, #+0] lsrne...   Jan 18 2009, 15:43
|- - zltigo   Цитата(Rst7 @ Jan 18 2009, 17:43) Простит...   Jan 18 2009, 16:05
|- - VslavX   Цитата(zltigo @ Jan 18 2009, 18:05) Я НЕ ...   Jan 18 2009, 16:28
- - GetSmart   Понятно, хочется переложить на процессор собственн...   Jan 19 2009, 06:00
- - defunct   Цитата(GetSmart @ Jan 19 2009, 08:00) Пон...   Jan 19 2009, 11:39
- - GetSmart   Цитата(defunct @ Jan 19 2009, 17:39) Два ...   Jan 19 2009, 12:28


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

 


RSS Текстовая версия Сейчас: 17th August 2025 - 01:53
Рейтинг@Mail.ru


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