2

我使用 MCB1700 评估板。它具有 (320 x 240) TF LCD 显示屏。IDE:Keil uvision4 4.03q。我的任务是将图片从 PC 下载到 MCB1700,在 LCD 上显示
并下载到 USB 棒(连接到板)上。我需要 320*240*2 = 153600 字节的内存。MCB1700 只有 64kB SRAM,和 512kB 片上闪存。显然,我必须将图片存储在闪存中。

据我了解,我应该将指针直接绑定到内存地址。

/* 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 的选择,我有一个疑问。 在此处输入图像描述

Flash 存储器的区域定义为 Read/Only IROM1。这是否意味着我们只能从 Flash 中读取数据,并且必须更改 IROM 和 IRAM 字段中的 Memory area 才能执行写入操作?例如以这种方式: 在此处输入图像描述

4

1 回答 1

1

您最好让编译器/链接器决定在 Flash 中放置图像的位置:

static const unsigned short Image[320*240] = { <image data> } ;

Image作为一个数组放置在 ROM1 内存中。

您不能直接写入闪存,它通常是只读的,虽然写入操作是面向字的,但除非事先擦除并且擦除是面向页或扇区的,否则无法写入一个字 - 因此管理它有点复杂你的示例代码。

在我上面的建议中,我包含了一个初始化程序。现在手动初始化 320*240 元素显然是不切实际的,但是编写一个基于 PC 的工具来直接从图像文件生成必要的初始化程序代码就足够简单了。

或者,如果图像不能是静态的,您可以为图像保留部分闪存,然后编写代码来写入闪存,并在必要时擦除从串行端口或 USB 下载的数据中的页面。在这种情况下,Flash 存储器必须是页面对齐的,并且由 Flash 页面的整数倍组成。

为了灵活性,您不应依赖目标对话框设置,而是创建自定义分散文件,然后您可以在其中创建自定义部分并使用 armcc 扩展 __attribute__变量限定符为其分配图像内存。

于 2011-11-27T10:16:15.127 回答