在前几次的GUI实验中,依次完成了,GUI核心部分移植,加入触屏功能,添加中文字库。这三个实验都是在裸机上运行。在裸机上跑没办法发挥GUI的最大作用,那就配上UCOS_II操作系统一起跑一跑,看是否可行,是否更爽。
将UCGUI没有移植完成的部分给添加进来:
修改GUI的配置文件:
#define GUI_OS (1) /* Compile with multitasking support */ #define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */ #define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */ #define GUI_DEFAULT_FONT &GUI_FontHZ16 #define GUI_ALLOC_SIZE 12500 /* Size of dynamic memory ... For WM and memory devices*/ /********************************************************************* * * Configuration of available packages */ #define GUI_WINSUPPORT 1 /* Window manager package available */ #define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */ #define GUI_SUPPORT_AA 0 /* Anti aliasing available */
支持操作系统,支持触屏功能。使能窗口管理等。
GUI_X_uCOS文件需要修改,具体的修改方式可以下载楼主的工程文件查看。
操作系统的移植也是相当方面,可以说是GD32在这方面是兼容STM32的,毕竟都是Cortex-M3核。在移植完成后,新建了一个初始任务,在初始任务中新建了3个新任务,一个是触屏检测,另外两个是显示一行文字:
void GUI_TOUCH_TASK(void *pdata) { pdata = pdata; for(;;) { OSTimeDly(TIMEDELAY_TOUCH); GUI_TOUCH_Exec(); } } void GUI_EEPW_TASK(void *pdata) { u8 cFlag = 0; pdata = pdata; for(;;) { OSTimeDlyHMSM(0,0,1,0); GUI_DispStringAt("µç×Ó²úÆ·ÊÀ½ç--liklon",20,100); if(cFlag == 0) { GUI_SetColor(GUI_RED); cFlag = 1; } else { GUI_SetColor(GUI_BLUE); cFlag = 0; } } } void GUI_GD32_TASK(void *pdata) { u8 cFlag = 0; pdata = pdata; for(;;) { OSTimeDlyHMSM(0,0,1,0); if(cFlag == 0) { GUI_SetColor(GUI_RED); cFlag = 1; } else { GUI_SetColor(GUI_BLUE); cFlag = 0; } GUI_DispStringAt("GD32107C-EVAL-ucGUI-uCos-II",20,180); } } void FirstTask(void *pdata) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; OSStatInit(); OS_ENTER_CRITICAL(); OSTaskCreate(GUI_TOUCH_TASK,(void *)0,&stkTOUCHTask[STK_TOUCH_TASK_SIZE - 1],PRO_TOUCH_TASK); OSTaskCreate(GUI_EEPW_TASK,(void *)0,&stkEEPWTask[STK_EEPW_TASK_SIZE - 1],PRO_EEPW_TASK); OSTaskCreate(GUI_GD32_TASK,(void *)0,&stkGD32Task[STK_GD32_TASK_SIZE - 1],PRO_GD32_TASK); OS_EXIT_CRITICAL(); OSTaskDel(OS_PRIO_SELF); } int main() { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(); FlashInit(); GUI_Init(); TouchInit(); GUI_SetBkColor(Lcd_InfoStruct.b_color); GUI_SetColor(Lcd_InfoStruct.f_color); GUI_Clear(); OSInit(); OSTaskCreate(FirstTask,(void *)0,&stkFirstTask[STK_FIRST_TASK_SIZE - 1],PRO_FIRST_TASK); OSStart(); while(1) { ; } }
整体效果图:
这样测试后感觉移植应该没有问题,,那么接下来就可以基于UCOS和UCGUI来进行设计了