在前几次的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来进行设计了
我要赚赏金
