pic18f452把12864图片定义到rom中,但是在前面加上const rom后程序运行无法读取到图片
我用的是MCC18编译器,烧写在实物中后,在数组前面加上rom,128*64不能显示,不加的话就可以,想知道这是为嘛?求告知!!!感激不尽!!!难道写进rom后读取的方式不一样么? 是的,在 MCC18 编译器下,const rom 关键字会将数据存入 程序存储器(Flash ROM),而普通的 const 变量通常存入 RAM。因为 PIC18F452 的 Flash ROM 和 RAM 访问方式不同,你不能直接用普通的指针访问 rom 数据,而是需要使用 memcpypgm2ram() 或者 ReadProgramMemory() 这样的方式来读取数据。 #include <p18cxxx.h>#include <string.h>
// 把图片存入 ROM
const rom unsigned char imgData = { /* 128x64 图片数据 */ };
// RAM 缓冲区
unsigned char ramBuffer;
void LoadImageToRAM()
{
memcpypgm2ram(ramBuffer, imgData, sizeof(imgData)); // 复制到 RAM
}
void DisplayImage()
{
LoadImageToRAM();// 先从 ROM 复制到 RAM
// 这里用 ramBuffer 进行 12864 显示
}
const rom unsigned char imgData → 存入 Flash ROM。
unsigned char ramBuffer → RAM 缓冲区。
memcpypgm2ram() 把 Flash ROM 里的数据复制到 RAM,之后才能读取。 使用 ReadProgramMemory()
如果你不想复制整个数组,而是动态读取 Flash 里的数据,可以用 ReadProgramMemory() #include <p18cxxx.h>
// ROM 中存储的图片数据
const rom unsigned char imgData = { /* 128x64 图片数据 */ };
unsigned char ReadByteFromROM(unsigned int addr)
{
unsigned char value;
ReadProgramMemory((far rom void *) &imgData, &value, 1);
return value;
}
void DisplayImage()
{
for (unsigned int i = 0; i < 1024; i++)
{
unsigned char pixel = ReadByteFromROM(i);
// 这里用 pixel 进行 12864 显示
}
}
在 MPLAB C18 中,使用 rom 关键字将数据存储在 Flash 中后,需要通过特殊方式读取数据。 ROM 和 RAM 的访问方式不同 如果你的代码没有针对 Flash 数据访问进行适配,可能会导致数据读取失败
使用ROM关键字后可以了? 如果你需要频繁更新显示内容或者需要快速读取数组数据,应该将数组存储在 RAM 中,而不是 ROM。 那个老的编译器没法用了吧,都没法激活了。
页:
[1]