Перейти к содержанию
    

fopen() портит менеджер памяти

EWARM 6.21.3.2937.

В устройстве имеется самопальная файловая система на флэшке. Решил воспользоваться возможностями стандартной библиотеки С в плане файловых потоков, чтобы получить буферизацию ввода/вывода и легкочитаемый код, а заодно свести обмен с разномастной периферией к операциям с файлами.

Установил в настройках Full library, написал свои __read(), __write(), __open(), __close(), __lseek(), remove(), rename(), выделил 8 КБ под кучу. Собрал. В принципе работает, но частенько при открытии файла ломается выделение памяти, либо программа вовсе виснет. Трассировка под отладчиком на предмет поиска зависания уводит куда-то в недра менеджера динамической памяти. Предположений пока два: или неправильно сконфигурировал стандартную библиотеку, или баг в IAR'овском менеджере памяти. Для проверки второго предположения написал свой менеджер (malloc/realloc/free/new/delete) — с ним проблем нет.

Вопрос, собственно, в том, сталкивался ли кто-нибудь с таким поведением стандартной библиотеки IAR, и что можно сделать, чтобы всё же воспользоваться библиотечным кодом и не городить велосипедов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...