環境 VMware® Workstation 9.0.2 build-1031769
gcc (GCC) 4.6.0 20110428 (Red Hat 4.6.0-6)@fedora15
arm-none-linux-gnueabi-gcc (ctng-1.6.1) 4.4.3
arm926裸機開發
// 繪製同心圓
void lcd_draw_circle(void)
{
int x,y;
int color;
unsigned char red,green,blue,alpha;
int xsize = ROWSIZE;
int ysize = COLSIZE;
for (y = 0; y < ysize; y++)
for (x = 0; x < xsize; x++)
{
color = ((x-xsize/2)*(x-xsize/2) + (y-ysize/2)*(y-ysize/2))/64;
red = (color/8) % 256;
green = (color/4) % 256;
blue = (color/2) % 256;
alpha = (color*2) % 256;
color |= ((int)red << 11);
color |= ((int)green << 5 );
color |= ((int)blue );
lcd_draw_pixel(x,y,color);
}
}
將
color = ((x-xsize/2)*(x-xsize/2) + (y-ysize/2)*(y-ysize/2))/64;
改爲:
color = ((x-xsize/2)*(x-xsize/2) /25+ (y-ysize/2)*(y-ysize/2)/9);
報錯,錯誤信息:
lcd.o: In function `lcd_draw_circle':
lcd.c:(.text+0x2d8): undefined reference to `__aeabi_idiv'lcd.c:(.text+0x2e4): undefined reference to `__aeabi_idiv'
猜測可能是ARM沒有除法指令所以除法還得用庫函數實現。在網上查了下果然如此,於是就在Makefile裏改了編譯選項,改後輸出結果如下:
CCFLAG is -I ./ -c
LDFLAG is -Bstatic -T my.lds -Ttext 0x0c000000 -nostdlib -L /opt/FriendlyARM/toolschain/4.5.1/ lib/gcc/arm-none-linux-gnueabi/4.5.1 -lgcc
__aeabi_uidiv在libgcc.a裏面,
ld這個.a就OK了