Я вроде как новичок в C, но чувствую, что у меня хорошее понимание основ c и поэтому разместил вопрос здесь.
Я пытаюсь перенести какой-то демонстрационный код для Waveshare E дисплей для использования в приложении в моем выпускном проекте. Сейчас я просто хотел доказать, что демонстрационный код работает, но, скорее всего, позже буду использовать его аспекты.
Проблема, с которой я сейчас сталкиваюсь, заключается в использовании следующих строк:
// Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1)) * EPD_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL)
{
printf("Failed to apply for memory...\r\n");
return -1;
}
Я почти уверен, что мое понимание этого верно, но по сути:
- Указатель создан для BlackImage
- Размер памяти, выделяемой для Blackimage, определяется на основе размеры экрана
- В операторе if BlackImage назначается размер памяти из вышеуказанной строки и возвращается значение указателя для BlackImage. Если это значение указателя равно NULL (то есть 0), то память не была выделена.
Мой код всегда терпит неудачу при «применении этой памяти». Я предполагаю, что причина в том, что мне не хватает памяти ... но вот мои вопросы:
- Если мне не хватает памяти - где я могу найти это? (Я использую Keil uVision IDE)
- Могу ли я решить эту проблему путем смещения объема памяти? Хранится ли Mallo c в памяти определенного типа c? Я знаю, что термин «куча» - это полезная память, но с каким типом памяти это соотносится с таблицей u C?
- Существуют ли альтернативные способы сделать это? Демонстрационный код также включает в себя массив, хранящийся в отдельном файле C (ImageData. c прилагается), так почему бы вам использовать здесь mallo c, а не делать то же самое?
- Что такое лучшие решения вокруг этого?
Заранее спасибо за любую помощь! Пожалуйста, поправьте меня, где я изложил что-то неверное, я здесь, чтобы узнать! : D
РЕДАКТИРОВАТЬ: Дополнительная информация ниже.
Я использую STM32L152RB (STM32L-Discovery), который имеет 16 КБ ОЗУ. Также см. Переменные ниже:
// Display resolution
#define EPD_WIDTH 122
#define EPD_HEIGHT 250
ПОЛНЫЙ демонстрационный код можно найти здесь: https://www.waveshare.com/wiki/File: 2.13inch_e-paper_code (V2) .7z
Все, что у меня есть Все, что нужно сделать, это перенести контакты и удалить строки printf / debug, поскольку у меня нет конвертера USB в TTL на данный момент.