Сохранение изображения во встроенной памяти оценочной платы MCB1700
Я работаю с оценочной платой MCB1700. Он имеет (320 х 240) ЖК-дисплей TF.
IDE: Keil uvision4 4.03q. Моя задача - загрузить картинку с ПК на MCB1700, вывести ее на ЖК-дисплей
и скачать на USB-флешку (которая подключается к плате). Мне нужно 320*240*2 = 153600 байт памяти.
MCB1700 имеет только 64 КБ SRAM и 512 КБ встроенной флэш-памяти. Очевидно, я должен хранить картинку во флэш-памяти.
Как я понимаю, я должен привязать указатель непосредственно к адресу памяти.
/* Base addresses */
#define LPC_FLASH_BASE (0x00000000UL) //beginning address of on-chip Flash
#define LPC_IMAGE_ADDR (LPC_FLASH_BASE + 0x10000)
#define ImagePtr ((unsigned short *) LPC_IMAGE_ADDR )
//read-write operations
ImagePtr[0] = 0x0124; //First pixel
…
ImagePtr[320*240] = 0xFA37; //Last pixel
unsigned short A = ImagePtr[0];
Это правильно? У меня есть сомнения из-за вариантов Target.
Область флэш-памяти определяется как "Только для чтения IROM1". Означает ли это, что мы можем только читать данные из Flash и должны изменить область памяти в полях IROM и IRAM для выполнения операции записи? Например, таким образом:
1 ответ
Вы могли бы лучше позволить компилятору / компоновщику решить, куда поместить изображение во Flash:
static const unsigned short Image[320*240] = { <image data> } ;
разместит Image
как массив в памяти ROM1.
Вы не можете записывать напрямую во флэш-память, она обычно доступна только для чтения, и хотя операции записи ориентированы на слова, слово не может быть записано, если оно не было стерто ранее, а стирание не ориентировано на страницы или секторы, поэтому управлять этим несколько сложнее. ваш пример кода.
В мое предложение выше я включил инициализатор. Сейчас, очевидно, нецелесообразно вручную инициализировать 320*240 элементов, но достаточно просто написать инструмент на базе ПК, который будет генерировать необходимый код инициализатора непосредственно из файла изображения.
В качестве альтернативы, если изображение не может быть статичным, вы можете зарезервировать часть вашего Flash для изображения, а затем написать код для записи во флэш-память и, при необходимости, стереть страницы из данных, загруженных, например, из последовательного порта или USB. В этом случае флэш-память должна быть выровнена по страницам и содержать целое число, кратное числу страниц Flash.
Для большей гибкости вы не должны полагаться на настройки диалогового окна цели и вместо этого создавать собственный файл разброса, в котором вы можете затем создать собственный раздел и выделить для него память изображений с помощью расширения armcc. __attribute__
переменные квалификаторы.