ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
86515 Топик полностью
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 ?