我需要一种不同的方式来全局访问160 * 160位数据,这不会导致我用完ram。我正在尝试为160 * 160 LCD黑白屏幕创建一个后备缓冲区。所以160 * 10整数给出160 * 160位,因为int是16位。但是我在电路板上的RAM用完了。有没有人有办法在这里我不会使用ram?也许在某种程度上分配?但我似乎无法获得分配二维数组的正确方法。还有其他方法吗?
编辑: 它是一个msp430 rbx430板,(这里是它的一个图片的链接http://i.ytimg.com/vi/rr18why8wzY/0.jpg)和yes int是这个设备上的16位。长和双是32位。该设备有64k内存,我运行16mhz。我要3,200字节
至于它有意义,它怎么没有?我有一个64k的设备,其中int是16位。我正在使用1和0创建160 * 160 lcd屏幕的地图,以跟踪像素开启或关闭的时间。在我打开我想要的所有像素之后,我将我的地图应用到液晶显示屏上。这样我就不必绘制到lcd然后擦除lcd然后再绘制。我可以简单地绘制,然后绘制它。这将使它不会闪烁。
有效地创建一个后台缓冲区来绘制到lcd。
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位只是为了太多的数据......
答案 0 :(得分:2)
你有64K的RAM或64K的闪存吗?我认为RBX430上有一个msp430f2274(http://www.ti.com/product/msp430f2274),只有1K的RAM。