查看: 8313|回复: 24

UCOS下UCGUI使用方法研究

  [复制链接]
  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-4-9 22:38:39 | 显示全部楼层 |阅读模式
    分享到:
    笔者亮点STM32板子下,首先将UCOS运行起来,然后创建了几个简单的例程
    现在需要显示,显示要有界面,于是将UCGUI装进来
    建立了几个任务:
    int main(void)
    {               
    INT8U  os_err;
    pput=USART1_BUF;
    pget=USART1_BUF;
    BUFEXCEED=USART1_BUF+RECEBUFSIZE;
    bpboard_init();//初始化硬件 增加执行屏幕位置校准
       //bp_selfcheck(1);
    GUI_Init();
    OSInit(); //初始化UCOS
        GUI_SetBkColor(GUI_WHITE);//设置背景颜色为白色
    GUI_FillRect(0,0,480,272);//清屏
    os_err = OSTaskCreate((void (*)(void *)) App_TaskStart,  // 创建启动任务
                              (void          * ) 0,   
                              (OS_STK        * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],    //堆栈地址
                              (INT8U           ) APP_TASK_START_PRIO); //优先级3,最高
    if (OS_ERR_NONE!=os_err)
    {
      beep_run(100);
      printf("err OSTaskCreate prio:%d result:%d\r\n",APP_TASK_START_PRIO,os_err);
    }
    os_err = OSTaskCreate((void (*)(void *)) App_TaskTouch,  // 创建触摸屏检测任务
                              (void          * ) 0,   
                              (OS_STK        * )&App_TaskTouchStk[APP_TASK_TOUCH_STK_SIZE - 1],    //堆栈地址
                              (INT8U           ) APP_TASK_TOUCH_PRIO); //优先级4
    if (OS_ERR_NONE!=os_err)
    {
      beep_run(100);
      printf("err OSTaskCreate prio:%d result:%d\r\n",APP_TASK_TOUCH_PRIO,os_err);
    }
    os_err = OSTaskCreate((void (*)(void *)) App_TaskDisp,
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskDispStk[APP_TASK_DISP_STK_SIZE - 1],
                              (INT8U           ) APP_TASK_DISP_PRIO);
    os_err = OSTaskCreate((void (*)(void *)) App_TaskProc,
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskProcStk[APP_TASK_PROC_STK_SIZE - 1],
                              (INT8U           ) APP_TASK_PROC_PRIO);
    os_err = OSTaskCreate((void (*)(void *)) App_TaskTest,                             
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskTestStk[APP_TASK_TEST_STK_SIZE - 1],
                              (INT8U           ) APP_TASK_TEST_PRIO);  

    OSStart();
    return(0);
    }
    App_TaskTouch是屏幕触摸任务,获得触摸信息后调用 GUI_TOUCH_Exec()这个函数,然后一定要调用OSTimeDly(10)来阻塞自己哦,否则系统崩溃对吧?
    static  void  App_TaskTouch(void *p_arg)
    {
    //OSTimeDly(100);
        while (1)
        {
            //RA8875_WAITSTATUS();
         //if(ISDEBUG)  printf("task touch!\r\n");
      tft_gettouchpoint(&TouchX,&TouchY);
            GUI_TOUCH_Exec();
      clear_TP_interrupt();  //清除RA8875中断标志
            OSTimeDly(10);
        }
    }
    //任务App_TaskTest调用BP_UCGUI_Task()来显示
    static  void  App_TaskTest(void *p_arg)
    {
        (void)p_arg;
       BP_UCGUI_Task();
        while(1);
    }

    void BP_UCGUI_Task(void) {
      
      WM_HWIN hMainFrame, hClientWindow;
      GUI_RECT Rect;
      GUI_Init();  //GUI 初始化,最先被调用
      GUI_CURSOR_Show();  //GUI函数,显示游标
      //GUI_SetFont(&GUI_FontHZ_SimSun_16); //设置字体

      #if GUI_SUPPORT_MEMDEV //使用内存设备
        WM_SetCreateFlags(WM_CF_MEMDEV);
        WM_EnableMemdev(WM_HBKWIN);
      #endif

      WM_SetDesktopColor(GUI_BLACK); //设置背景颜色 黑在GUI.H中定义

      //在背景之上,创建并执行第一个对话框
      GUI_ExecDialogBox(_aIntro, GUI_COUNTOF(_aIntro), _cbIntro, WM_HBKWIN, 0, 0);
      //GUI_ExecDialogBox(_MainDialogCreate, GUI_COUNTOF(_MainDialogCreate), _MainCallback, WM_HBKWIN, 0, 0);
      //按START之后,该窗口关闭
      //Showain();



      hMainFrame = FRAMEWIN_CreateEx(0, 0, LCD_XSIZE, LCD_YSIZE,
                                     WM_HBKWIN, WM_CF_SHOW, 0, 0, "", 0);
      FRAMEWIN_SetTextAlign(hMainFrame, GUI_TA_HCENTER);
      hClientWindow = WM_GetClientWindow(hMainFrame);
      WM_GetClientRectEx(hClientWindow, &Rect);      
      hClientWindow=WM_HBKWIN;

      _hDialogMain=
      GUI_CreateDialogBox(_MainDialogCreate, GUI_COUNTOF(_MainDialogCreate), _MainCallback, hClientWindow, 0, 0);
      _hDialogControl=
      GUI_CreateDialogBox(_ControlDialogCreate, GUI_COUNTOF(_ControlDialogCreate), _ControlCallback, hClientWindow, Rect.x1 - 60, 0);
      _hDialogPower=
      GUI_CreateDialogBox(_PowerDialogCreate, GUI_COUNTOF(_ControlDialogCreate), _PowerCallback, hClientWindow, 0, 0);
      //WM_ShowWindow(_hDialogMain);
      WM_HideWindow(_hDialogPower);
      while(1) {
        WM_Exec(); //这里开始消息循环
        GUI_X_WAIT_EVENT();
      }
    }
    注意:WM_Exec()开始消息循环,然后还是要OSTimeDly来阻塞自己
    这里会GUI_X_WAIT_EVENT()会调用OSTimeDly(50)!;

    总结一下:无论什么任务,除非是优先级最低的,都不要无限制的利用资源
    RTOS不是让你去想办法充分利用资源,而是想办法让每个任务去充分睡觉休息,让系统空闲下来,这个系统才能够充分的运行,这是才能更好的享受资源。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-4-24 14:41:50 | 显示全部楼层
    这么好的原创文章怎么没有顶的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-6-4 13:58
  • 签到天数: 188 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-5-8 09:36:05 | 显示全部楼层
    顶一个                                         
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-8-20 09:30
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2013-9-14 12:50:39 | 显示全部楼层
    顶一个,很难找到合适的uCGUI和uCOSII的资料和讲解
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-9-16 16:32:18 | 显示全部楼层
    顶一个~~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-1-9 21:05
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-1-4 20:50:29 | 显示全部楼层
    顶一个!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-7-6 08:47
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-1-6 08:31:48 | 显示全部楼层
    :lol:lol:lol:lol:lol
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-1-4 13:26
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-1-7 09:03:24 | 显示全部楼层
    好帖要顶起
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-1-14 13:08:21 | 显示全部楼层
    收下!!谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2014-2-14 16:55
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-2-14 17:04:29 | 显示全部楼层
    顶亮哥。我的偶像
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-12 07:37 , Processed in 0.206895 second(s), 36 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.