MiniMax (15.04.2007 13:58, просмотров: 1) ответил AlexandrY на Тогда похоже, что проблемы всетаки с выравниванием.
Может и с выравниванием. Но не могу понять причину. Ведь все используемые числа делятся на 8 без остатка.
У меня установлен последний релиз GCC 4.1.1 из www.gnuarm.org
Причем я могу заполнять 128-byte буфер любыми числами.
Никакого краха нет, если закомментировать vsprintf. Похоже, что vsprintf может нарушать границу слова.
Если вызывать эту vsprintf функцию из простой программы ( без RTOS), то все работает.
Конфликт есть только при вызове vsprintf из задачи RTOS.
Причем это как-то завязано с размером буфера.
Может проблемы с размером/разрядностью какого-то указателя в самой vsprintf.
И при переходе через какую-то границу неправильно что-то обрабатывается.
Кстати я видел такие проблемы с FreeDOS исходниками для FAT12
//*Value = *((WORD *) &V->Buffers[NumBuf1].Data[EntryOffset]);
*Value = *((UBYTE *) &V->Buffers[NumBuf1].Data[EntryOffset+1]);
*Value <<= 8;
*Value |= (*((UBYTE *) &V->Buffers[NumBuf1].Data[EntryOffset]));
Чтение слова работало неправильно. Пришлось читать дважды по 1 байту.
Может и здесь что-то подобное в vsprintf ?