初级会员
- 积分
- 69
- 金钱
- 69
- 注册时间
- 2019-6-19
- 在线时间
- 14 小时
|
楼主 |
发表于 2022-7-5 10:53:12
|
显示全部楼层
经过确认,屏幕初始化并无异常。
经过一系列的对比测试,发现雪花屏的出现是因为采用了静态内存分配的原因,除了出现雪花外,还可能出现上次程序的残留(不经断电刷程序)。如果采用MALLOC分配则出现纯黑背景。
经过这几天的学习,对GUI_Delay()和桌面窗口概念的理解,加之雪花的出现在执行了GUI_Delay()之后,我认为问题应该是出在了桌面窗口的刷新上,于是重写并替代了桌面窗口的回调函数:
static void _BkCallback(WM_MESSAGE *pMsg)
{
switch(pMsg->MsgId)
{
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_YELLOW);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("MEMDEV_MemDev - Sample", 400, 0);
GUI_SetFont(&GUI_Font20_ASCII);
GUI_DispStringHCenterAt("Shows the advantage of using a\nmemorydevice", 400,50);
GUI_SetFont(&GUI_Font16_ASCII);
GUI_DispStringHCenterAt("Draws the picture\nwithout a\nmemory device", 250, 100);
GUI_DispStringHCenterAt("Draws the picture\nusing a\nmemory device", 550, 100);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
另外,_Draw(int Delay)在此情况下需要设置蓝色背景,否则演示部分的背景会是纯黑。
这也解释了为什么使用操作系统的演示函数不会有问题,因为操作系统的演示函数并不进行刷新操作。
虽然程序运行起来没有问题,不过还是对于原子哥例程中没有改写桌面回调函数感到困惑,难道有什么开关可以改变GUI_Delay()的动作,让它不执行刷新,或者其他的什么原因?
|
|