Цитата(Kail @ Dec 3 2006, 23:28)

компилятор Keil
char p[16] - занимает 64 байта памяти. Смотрел в дебагере симулятора. Почему? Куда копать? В сторону aligment?
Посмотрите лучше, что написано в map-файле.
Цитата(Kail @ Dec 3 2006, 23:28)

У меня стек в режиме User 0x400, т.е. 1024 байт, а я объявляю int p[1000], т.е. получится 4000 байт и потом в цикле заполняю массив for (i=0;i<1000;i++)p[i]=i; симулятор доходит до p[256] и все, дальше цикл крутится, но элементы не изменяют знвчения. Вопрос, почему не генерируются ошибки доступа к памяти?
А кто, по-вашему, должен сгенерировать ошибку, и почему?
Цитата(Kail @ Dec 3 2006, 23:28)

Еще один вопрос, почему стэк растет вверх? Объявляю int i; и вижу ассемблерный код STMDB R13!,[R14], после его выполнения регистр свяи содержит значение 0x400003fc (при вершине стэка 0x40000400). Почему растет вверх, а не вниз???
Ассемблерный код STMDB R13!,[R14] сохраняет в стеке значение LR, и к int i никакого отношения не имеет. И где это стек "растет вверх"???
Цитата(Kail @ Dec 3 2006, 23:28)

AREA STACK, DATA, READWRITE, ALIGN=2
Для стека ALIGN должен быть 4.