我正在努力理解为什么我在尝试从存储在 rom 中的多维表中读取数据时得到随机数据。
我有一张要在 OLED 屏幕上显示的位图字符表。字符表太大而无法放入 ram 中,而 rom 是它的自然位置。当我尝试从表中读取元素时,数据不是存储在表中的数据。
这是我尝试做的。我在使用它的 C 文件的请求中将位图声明为多维数组:
rom const char number[15][4][20] = { {
{0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0x70, 0x78, 0x38, 0x38, 0x38, 0x38, 0x78, 0x70, 0xf0, 0xe0, 0xc0, 0x00, 0x00},// row 1 columns 19
{0x00,...
这是我尝试读取数据并将其打印到屏幕的地方:
for(i=0; i<4; i++)
{
PutImage(number[digit][i],20,4,offset,i+2);
}
PutImage函数的实现:
void PutImage(char ptr[], unsigned char sizex, unsigned char sizey, unsigned char startx, unsigned char starty)
{
unsigned char _page, _column;
//startx += OFFSET;
OledWriteCommand(0xb0+starty);
OledWriteCommand(startx&0x0F);
OledWriteCommand(0x10 | ((startx>>4)&0x0F));
for(_column=0; _column<sizex; _column++)
{
OledWriteData(ptr[_column]);
}
}
如果我更改它以使数据适合 ram,它就可以正常工作。所以问题要么是数据一开始没有正确存储,要么是我使用它的方式不正确。
我使用的图片是 18F27J53,数据表第 7.1 节(表读取和表写入)讨论了一些用于在程序存储器和 ram 之间移动字节的汇编器操作。当我使用 C 时,我不确定这是否是我需要注意的事情,或者编译器是否知道如何处理它。