我是C的新手。我有一个包含1024个十六进制数的const无符号短数组。每个十六进制数表示8位,表示在向GBA屏幕显示图像时要打开和关闭的位。但是请不要忘记所有这些以及我在下面的DMA语法仅供参考!!
我的主要问题是......如何迭代数组BY ADDRESS中的元素,抓取这些内容,然后继续递增地址?另外,如果您可以盯着下面的代码,也许可以看看为什么我会:
"Program.c:(.text+0xe8): undefined reference to `myimg'"
在调用“drawImage3”的行上,那将是rad。
(在program.C的主要部分):
const unsigned short *pt;
pt = &myimg[0];
int size = 5;
drawImage3(15,15,img_WIDTH,img_HEIGHT, pt);
(在其他地方定义):
void drawImage3(int x, int y, int width, int height, const u16* image)
{
int r;
for (r=0; r<height; r++)
{
DMA[3].src = ℑ
DMA[3].dst = &videoBuffer[OFFSET(x+width, y, 240)];
DMA[3].cnt = width | DMA_SOURCE_FIXED | DMA_ON | DMA_DESTINATION_INCREMENT;
image++;
}
}
答案 0 :(得分:1)
您将DMA[3].src
设置为指针的地址,这可能不是您想要做的。为清楚起见,以下是这些参考文献的含义:
*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
所以代替DMA[3].src = ℑ
,你可能想要这两个中的一个:
DMA[3].src = &image[r]; # If you do this do NOT increment image
或
DMA[3].src = image; # And continue to increment image
如果你选择后者,那么
DMA[3].src = image;
image++;
可写得更好:
DMA[3].src = image++;
答案 1 :(得分:0)
从提供的代码中,永远不会定义myimg
(第二个代码块中的第二行)。
对于按地址循环,数组已经是指针,因此执行简单的for循环与循环地址相同。我不确定你要通过“循环地址”业务来完成什么,因为这就是C已经在做的事情。
编辑:
AFAIK,数组在C中并不存在,但是它们在C ++中存在,所以索引到'数组'只是说,'从这个地址开始给我一块内存,这个字节大小为* ”。
例如,一个int数组(每个索引4个字节)只是一块4 bytes * number of indexes
的内存。获取这个'数组'的索引只是将内存偏移x字节* 4(sizeof int)放入内存块。
简单地说,你不必担心它。