Цитата(Still Enemy @ Jul 6 2015, 08:23)

У меня вопрос, связанный с противоположными взглядами на действительность IAR'a и моими: есть массив из 2 элементов{0x3f,0xff} типа uint8_t, при явном преобразовании (*uint16_t), у меня выходит, что конечный указатель указывает на ячейку памяти, значение которой 0xff3f. Как так то? Что за дичь то?
Длинные переменные в памяти хранятся от младшего байта к старшему в порядке возрастания адреса. Например int var = 0x0000ff3f будет хранится в памяти условно в виде массива buf[] = {0x3f, 0xff, 0x00, 0x00};
Соответственно
*((unsigned short*) (buff+0)) == 0xff3f
*((unsigned short*) (buff+1)) == 0x00ff
*((unsigned short*) (buff+2)) == 0x0000
IAR в зависимости от типа указателя возмёт требуемое кол-во байт данных и соберёт их переменную используя для младшего байта данные по младшему адресу, для старшего - по старшему.
Это всё прекрасно видно при отладке в IAR если посмотреть на то, как переменная располагается в памяти и модифицируется при манипуляциях с нею.