打印
[PIC®/AVR®/dsPIC®产品]

pic18f452把12864图片定义到rom中,但是在前面加上const rom后程序运行无法读取到图片

[复制链接]
790|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2025-2-7 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是MCC18编译器,烧写在实物中后,在数组前面加上rom,128*64不能显示,不加的话就可以,想知道这是为嘛?求告知!!!感激不尽!!!难道写进rom后读取的方式不一样么?

使用特权

评论回复
沙发
捉虫天师| | 2025-2-9 19:53 | 只看该作者
是的,在 MCC18 编译器下,const rom 关键字会将数据存入 程序存储器(Flash ROM),而普通的 const 变量通常存入 RAM。因为 PIC18F452 的 Flash ROM 和 RAM 访问方式不同,你不能直接用普通的指针访问 rom 数据,而是需要使用 memcpypgm2ram() 或者 ReadProgramMemory() 这样的方式来读取数据。

使用特权

评论回复
板凳
捉虫天师| | 2025-2-9 19:53 | 只看该作者
#include <p18cxxx.h>
#include <string.h>

// 把图片存入 ROM
const rom unsigned char imgData[1024] = { /* 128x64 图片数据 */ };

// RAM 缓冲区
unsigned char ramBuffer[1024];

void LoadImageToRAM()
{
    memcpypgm2ram(ramBuffer, imgData, sizeof(imgData)); // 复制到 RAM
}

void DisplayImage()
{
    LoadImageToRAM();  // 先从 ROM 复制到 RAM
    // 这里用 ramBuffer 进行 12864 显示
}

使用特权

评论回复
地板
捉虫天师| | 2025-2-9 19:53 | 只看该作者
const rom unsigned char imgData[1024] → 存入 Flash ROM。
unsigned char ramBuffer[1024] → RAM 缓冲区。
memcpypgm2ram() 把 Flash ROM 里的数据复制到 RAM,之后才能读取。

使用特权

评论回复
5
捉虫天师| | 2025-2-9 19:54 | 只看该作者
使用 ReadProgramMemory()
如果你不想复制整个数组,而是动态读取 Flash 里的数据,可以用 ReadProgramMemory()

使用特权

评论回复
6
捉虫天师| | 2025-2-9 19:54 | 只看该作者
#include <p18cxxx.h>

// ROM 中存储的图片数据
const rom unsigned char imgData[1024] = { /* 128x64 图片数据 */ };

unsigned char ReadByteFromROM(unsigned int addr)
{
    unsigned char value;
    ReadProgramMemory((far rom void *) &imgData[addr], &value, 1);
    return value;
}

void DisplayImage()
{
    for (unsigned int i = 0; i < 1024; i++)
    {
        unsigned char pixel = ReadByteFromROM(i);
        // 这里用 pixel 进行 12864 显示
    }
}

使用特权

评论回复
7
裤脚口感好| | 2025-2-22 20:03 | 只看该作者
在 MPLAB C18 中,使用 rom 关键字将数据存储在 Flash 中后,需要通过特殊方式读取数据。

使用特权

评论回复
8
发送到工地施工| | 2025-2-22 23:56 | 只看该作者
ROM 和 RAM 的访问方式不同

使用特权

评论回复
9
雨果喝水| | 2025-2-23 02:18 | 只看该作者
如果你的代码没有针对 Flash 数据访问进行适配,可能会导致数据读取失败

使用特权

评论回复
10
wahahaheihei| | 2025-2-26 19:33 | 只看该作者
使用ROM关键字后可以了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

422

主题

2565

帖子

3

粉丝