Сохранение изображения во встроенной памяти оценочной платы 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__ переменные квалификаторы.

Другие вопросы по тегам