shan (10.07.2015 16:27 - 16:32, просмотров: 167) ответил SciFi на Ставить семафоры без причины - это танцы с бубном. У вас есть бубен? Если нет, то ничего не получится.
Мониторинг показал, что ОС иногда добавляет к передаваемым данным из ОЗУ в SPI 2 байта. И если я пишу свой буфер до последнего байта, т.е до последнего байта батарейного SRAM, то функция передачи буфера данных в SPI из батарейного SRAM иногда приводит к HardFault. Добавления (и ошибки) никогда нет, если я записываю сразу весь буфер 2048 байта, находящийся в конце батарейного SRAM 4кб . В буфере батарейной SRAM коплю записи по 32 байта (всего 64 записи)., Делаю это чтобы не писать короткие записи и увеличить ресурс SPI FLASH. При старте Приложения сбрасываю уже ренее накопленные записи в файл (например 14 штук)( чтобы лог уже был максимально полон), Когда буфер дополнилнится до 64-й записи. дописываю оставшиеся ( например 50 штук) Далее заполняю буфер с нуля и пишу по 64 записи (всегда без ошибок)
Ошибка бывает только на дозаписи (втором вызове fs_write() от старта), когда длина кратна 32 но менее 2048.
Предположение: ОС добавляет данные, чтобы обеспечить нужную длину записей в файловой системе. При этом добавляемые данные не имеют смысла (фиктивные байты), Если бы буфер был в ОЗУ, то эти байты просто прочитались бы после конца буфера и ошибки бы не было.
РЕШЕНИЕ ПРОБЛЕММЫ: Сдвинул свой буфер на 8 байт к началу батарейного SRAM, теперь после конца моего буфера есть физически 8 не используемых мной байт. ОШИБКИ ПОЛНОСТЬЮ ИСЧЕЗЛИ!! ОС добавляет иногда 2 байта, но к ошибке теперь это не приводит. На содержании файла добавление этих байт при передаче в SPI, никак не сказывается.