3

我需要一种不同的方式来全局访问 160*160 位的数据,这不会导致我用完 ram。我正在尝试为 160*160 LCD 黑白屏幕创建一个后台缓冲区。所以 160*10 整数给了我 160*160 位,因为整数是 16 位。但是我的板上的 RAM 用完了。有没有人有办法在我不使用内存的情况下做到这一点?也许以某种方式分配?但我似乎无法找到分配二维数组的正确方法。有没有其他方法可以做到这一点?

编辑:它是一个 msp430 rbx430 板,(这里是它的图片链接http://i.ytimg.com/vi/rr18why8wzY/0.jpg)并且是的 int 在这个设备上是 16 位的。longs 和 doubles 是 32 位的。该设备有 64k 内存,我以 16mhz 运行它。我要 3,200 字节

至于说有道理,怎么没有?我有一个 64k 设备,其中 int 是 16 位。我正在为 160*160 lcd 屏幕创建地图,使用 1 和 0 来跟踪像素何时打开或关闭。在我打开所有我想要的像素后,我把我的地图应用到液晶显示器上。这样我就不必绘制到液晶显示器然后擦除液晶显示器然后再次绘制。我可以简单地画,然后在上面画。这将使它不会闪烁。

有效地创建一个后台缓冲区来绘制到液晶显示器。

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 位只是太多数据....

4

1 回答 1

2

你有 64K 的 RAM 还是 64K 的闪存?我认为 RBX430 上有一个 msp430f2274 (http://www.ti.com/product/msp430f2274),它只有 1K 的 RAM。

于 2012-12-03T00:07:30.983 回答