我需要一种不会使我耗尽RAM的全局访问160 * 160位数据的不同方式。我正在尝试为160 * 160液晶黑白屏幕创建后备缓冲区。因此,160 * 10个int给我160 * 160位,因为一个int是16位。但是,我在板上运行时内存不足。有没有一种方法可以在不使用RAM的情况下完成这项工作?也许以某种方式进行分配?但我无法找到适当的二维数组分配方式。还有其他方法吗?
编辑:它是msp430 rbx430板(这里是它的图片链接http://i.ytimg.com/vi/rr18why8wzY/0.jpg),是的,这个设备上的int是16位的。长整型和双精度浮点数是32位的。该设备具有64k内存,并且我将其运行速度设置为16mhz。我要求3200字节。
关于它的意义,为什么不行呢?我有一个64k的设备,其中int是16位。我正在通过使用1和0来跟踪像素的开启或关闭状态创建160x160液晶屏幕的地图。在我打开所有想要的像素之后,我会将我的地图应用到液晶屏上。这样,我就不必先绘制到液晶屏上,然后擦除液晶屏,再重新绘制。我可以简单地绘制,然后覆盖它。这将使其不会闪烁。
这是剩下的部分。
所以我现在尝试使用malloc分配数组,但是也不行。我猜我就是做不到这个,160 * 160位数据量太大了....
编辑:它是msp430 rbx430板(这里是它的图片链接http://i.ytimg.com/vi/rr18why8wzY/0.jpg),是的,这个设备上的int是16位的。长整型和双精度浮点数是32位的。该设备具有64k内存,并且我将其运行速度设置为16mhz。我要求3200字节。
关于它的意义,为什么不行呢?我有一个64k的设备,其中int是16位。我正在通过使用1和0来跟踪像素的开启或关闭状态创建160x160液晶屏幕的地图。在我打开所有想要的像素之后,我会将我的地图应用到液晶屏上。这样,我就不必先绘制到液晶屏上,然后擦除液晶屏,再重新绘制。我可以简单地绘制,然后覆盖它。这将使其不会闪烁。
有效地创建了一个背景缓冲区来绘制到液晶屏上。
static int lcdPixels[160][10];
/*Must call this before using RBX430_graphics*/
void initGraphics(void)
{
int h = 0;
int w = 0;
for(h=0; h < ROW_SIZE; h++)
{
for(w=0; w < COLUMN_SIZE; w++)
{
lcdPixels[h][w] = 0;
}
}
}
这是剩下的部分。
void pixelOn(int posX, int posY)
{
// first grab the right column
int column = ( ((float)posX/16.0f) + 0.9f);
// next grab the right bit
int bit = posX;
while(bit > 16)
{
bit = bit - 16;
}
//turn on the bit/pixel
lcdPixels[posY][column] |= (1 << bit);
}
void pixelOFF(int posX, int posY)
{
// first grab the right column
int column = ( ((float)posX/16.0f) + 0.9f);
// next grab the right bit
int bit = posX;
while(bit > 16)
{
bit = bit - 16;
}
//turn off the bit/pixel
lcdPixels[posY][column] &= ~(1 << bit);
}
/* Call this to commit the current backBuffer to the LCD display*/
void commitBuffer(void)
{
int h = 0;
int w = 0;
int k = 0;
for(h=0; h < ROW_SIZE; h++)
{
for(w=0; w < COLUMN_SIZE; w++)
{
for(k=0; k < INT_SIZE; k++)
{
if((lcdPixels[h][w] & (1 << k)) >> k)
{
lcd_point(((w * 16) + k), h, ON);
}
else
{
lcd_point(((w * 16) + k), h, OFF);
}
}
}
}
}
所以我现在尝试使用malloc分配数组,但是也不行。我猜我就是做不到这个,160 * 160位数据量太大了....
while(bit > 16) { bit = bit - 16; }
可以被bit %= 16
; 替换。