开发者

Iterating through elements in an array by memory address. (C)

Im new to C. I have a const unsigned short array of 1024 hex numbers. each hex number represents is 8 bits and represents bits to be turned on and off when displaying an image to a GBA screen. But nevermind all that and the DMA syntax I have below just for reference!!

My main question is...how can I iterate through elements in an array BY ADD开发者_如何学运维RESS, grab those contents, then continue incrementing through addresses? Also, if you could give a stare to the below code and maybe see why Im getting:

"Program.c:(.text+0xe8): undefined reference to `myimg'" 

on the line that calls "drawImage3" and that would be rad.

(in the main of program.C):

const unsigned short *pt;  
pt = &myimg[0]; 
int size = 5;
drawImage3(15,15,img_WIDTH,img_HEIGHT, pt);

(defined elsewhere):

void drawImage3(int x, int y, int width, int height, const u16* image)
{
    int r;
    for (r=0; r<height; r++)
    {   
        DMA[3].src = &image;
        DMA[3].dst = &videoBuffer[OFFSET(x+width, y, 240)];
        DMA[3].cnt = width | DMA_SOURCE_FIXED | DMA_ON |   DMA_DESTINATION_INCREMENT;  
        image++;    
    }
}


You're setting DMA[3].src to the address of a pointer, which is probably not what you want to do. For clarity's sake, here's what these references mean:

*image    -- the value of the thing which image points to
 image[0] -- same as *image
 image    -- the location in memory of your thing
&image    -- the location in memory that is storing your pointer
&image[0] -- same as image
&image[n] -- the location of the nth element in your thing

So instead of DMA[3].src = &image;, you probably want one of these two:

DMA[3].src = &image[r];    # If you do this do NOT increment image

or

DMA[3].src = image;        # And continue to increment image

If you choose the latter, then

DMA[3].src = image;
image++;

Can be better written as:

DMA[3].src = image++;


From the code provided, myimg is never defined (line two in the second code block).

As for looping by address, arrays are already pointers, so doing a simple for loop is the same as looping over addresses. I'm not sure what you're trying to accomplish with the 'looping by address' business though, because that's what C is already doing.

EDIT:

AFAIK, arrays don't really exist in C, but they do in C++, so indexing into an 'array' is just saying, 'give me a chunk of memory starting at this address and this many bytes * size into it'.

For example, an int array (4 bytes per index) is just a chunk of memory that is 4 bytes * number of indexes. Getting an index into this 'array' is just getting a memory offset x bytes * 4 (sizeof int) into the memory chunk.

Simply put, you shouldn't have to worry about it much.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜