用完ram声明全局二维数组问题

时间:2012-12-02 22:22:48

标签: c arrays multidimensional-array bit-manipulation

我需要一种不同的方式来全局访问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位只是为了太多的数据......

1 个答案:

答案 0 :(得分:2)

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