最近用 MDK 4.10 编译 调试STM32 程序时发现个奇怪故障,费了很大劲,也没有排去,故只能发帖请教原子老师了。
利用我买的不完全板的程序,在其他板上(由于原子板只能用串口下载程序,不能直接使用LINK,所以才在别的板上编译调试)编了个图片文字显示,MP3播放等程序,编译后HEX可
达 540KB, 只要使用下面原子的ILI9320画圆函数,开机就白屏,什么也不显示?把这段画圆程序去掉,程序运行正常, 用单步 一步一步地 调试 ,程序工作就正常,画圆程序也能画出个
漂亮的大园圈,可是只要重新启动,进入初始化,就拜拜了,一片白,什么也显示不出来,我又认为是这画圆的鬼程序影响的,初始化到它那里,就白屏了,就把画圆程序放到初始化
程序的最后,可是没有运行到它,也同样白屏,好像只要有这段画圆程序,程序就根本没有运行,直接就白屏了,这是什么鬼蜮故障,只得请教原子老师了。
下面就是那段的画圆程序,没看出它有多么鬼蜮,但是它又怎么去干那样的“坏事”呢?
void Draw_Circle(u16 x0,u16 y0,u8 r)
{
int a,b;
int di;
a=0;b=r;
di=3-(r<<1); //判断下个点位置的标志
while(a<=b)
{
LCD_DrawPoint(x0-b,y0-a); //3
LCD_DrawPoint(x0+b,y0-a); //0
LCD_DrawPoint(x0-a,y0+b); //1
LCD_DrawPoint(x0-b,y0-a); //7
LCD_DrawPoint(x0-a,y0-b); //2
LCD_DrawPoint(x0+b,y0+a); //4
LCD_DrawPoint(x0+a,y0-b); //5
LCD_DrawPoint(x0+a,y0+b); //6
LCD_DrawPoint(x0-b,y0+a);
a++;
//使用Bresenham算法画圆
if(di<0)di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
LCD_DrawPoint(x0+a,y0+b);
} |