Компилер с самого начала придерживается выравнивания стека по границе 8.
Я когда пишу ассемблерные модули под RTOS, то тоже всегда ставлю директиву PRESERVE8
Поэтому в течении выполнения программы выравнивание на 8-мь всегда сохраняется.
А вот начинается оно с того как будет размещен стек задачи.
Ясно, что и сохранять в контексте RTOS надо тоже четное число 32-х битных регистров.
Просто где-то в функции __printf есть явное отсекание 3-х младших бит адреса переменной типа float.
Сейчас это место не вспомню, но отладчик легко покажет.
Цитата(zltigo @ Feb 6 2007, 15:10)

Цитата(AlexandrY @ Feb 6 2007, 12:23)

Хе..Хе, это грабли библиотеки RealView.
Помогает только опция: --min_array_alignment=8
Обалдеть

Ничего не понимаю - ну ладно, выделили мы стек выровненный на 8. Ну и что? Это никак не гарантирует, что при вызове printf() указатель останется выровненным. Что-то здесь очень темное, если это так.