Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c

pointers

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 ADDRESS, 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++;    
    }
}
like image 542
Phil Avatar asked Jul 20 '26 20:07

Phil


1 Answers

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++;
like image 137
unpythonic Avatar answered Jul 22 '26 11:07

unpythonic