Цитата(Andrei0686 @ Sep 22 2011, 09:23)

if (LenData == *(unsigned short*)&mas[2])
...
Подскажите что я делаю не так?
1. Вы понапрасну пользуетесь приведением типов.
2. Вы не учитываете, что контроллер 32-битный.
3. Вы не приводите дизассемблер проблемного куска с указанием, на какой инструкции происходит ошибка.
Краткий экскурс в АРМы.
Давным-давно, буквально пару лет назад, переменные в памяти ARM'ов могли лежать только по выровненным адресам:
short'ы - по адресам 0, 2, 4, 6, 8, ..., long'и - по адресам 0, 4, 8, 0x0c, 0x10 и т.д.
С появлением кортексов ситуация улучшилась: это ограничение убрали. Разве что ограничение осталось на некоторых инструкциях (push/pop, ldrex/strex, ldr/str на несколько регистров). И обращение к такой переменной занимает больше тактов процессора (т.к., по сути, производится два обращения к памяти).
Итого: приведение типов - зло, может привести к странным граблям.
Лучше действовать в лоб:
Код
__inline short char2short (char *in)
{
return in[0] + (in[1] << 8);
}