Цитата(0x435641 @ Jul 26 2012, 09:19)

начну с кода:
char arr[16];
int *pi1 = (int*)arr[0];
int *pi2 = (int*)arr[1];
int *pi3 = (int*)arr[2];
int *pi4 = (int*)arr[3];
*pi1 = 0x11223344;
*pi2 = 0x11223344;
*pi3 = 0x11223344;
*pi4 = 0x11223344;
среда IAR 6.30.1
Вообще-то код изначально не правильный. После инициализации массива он может содержать мусор и этот мусор вы преобразуете в указатель. Например:
Код
char arr[8]={0,1,2,3,4,5,6,7};
тогда
Код
pi1 == 0x00000000;
pi2 == 0x00000001;
pi3 == 0x00000002;
pi4 == 0x00000003;
А если
Код
char arr[8]={0,0,0,0,0,0,0,0};
то и получится
Цитата
44 33 22 11 NA NA NA NA
правда в реальном контроллере это вызовет HardFault
А чтобы получить необходимый результат
Цитата
44 44 44 44 33 22 11 NA
нужно немного изменить код:
Код
int *pi1 = (int*)&arr[0];
int *pi2 = (int*)&arr[1];
int *pi3 = (int*)&arr[2];
int *pi4 = (int*)&arr[3];
и никакой __packed не нужен. Проверено в Keil'e через j-tag на stm32f103.
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»