2017-02-22 26 views
0

меня проблема с setbuf в классе, который я портировал от mbed для использования в моем проекте STM32 с ЖК-дисплеем, чтобы иметь метод printf, это мой конструктор:setbuf в классе C++

Stream::Stream(void) : _file(NULL) { 
    /* open ourselves */ 
    char buf[12]; /* :0x12345678 + null byte */ 
    std::sprintf(buf, ":%p", this); 
    _file = std::fopen(buf, "w+"); 
    setbuf(_file, NULL); 
} 

Программа останавливая, когда прибудете к строке:

setbuf(_file, NULL); 

и мне нужна помощь.

ответ

1

Я замечаю, что вы не проверяете возврат из fopen, и это может быть NULL. Обратите внимание, что стандартные функции файлов не требуются, если нулевые проверки сами. Возможно, у вас нет разрешения на создание этого файла в текущем каталоге?

+0

Вы вернетесь к его возврату NULL, но как его исправить – Wodji

+0

Перейдите в каталог, в котором вы можете создать файл? Использовать полный путь к/tmp? :-) –

0

Я уверен, что в STM32 не реализованы вызовы файловой системы, поэтому fopen и друзья не будут работать. Если вы хотите хранить/читать данные, вам нужно будет посмотреть API-интерфейс энергонезависимой памяти (NVM) или EEPROM для вашего MCU. К сожалению, это не стандартизировано между MCM STM32.