STM32F4应用笔记(五)UCGUI+uC/OS-II+支持触摸屏

移植uC/OS-II
我们以上一篇工程为基础,进行移植。然后我们还需要用到正点原子F4【实验56 UCOSII实验1-任务调度】的代码,将实验56工程下的UCOSII文件夹直接复制到我们上一篇建立的工程文件夹下,然后在工程目录中添加对应的文件夹以及C文件,最后添加头文件路径。
添加及修改GUI_X_uCOS.c文件
在工程目录的GUI_X文件夹中添加GUI_X_uCOS.c文件,并修改2处:
void GUI_X_ExecIdle (void)
{
//OS_X_Delay(1);
OSTimeDly(50);
}
原来是OS_X_Delay(1);会提示没定义,所以改一下。
此外,
static void CheckInit (void)
{
if (KeyIsInited == 0) {
KeyIsInited = 1;
GUI_X_Init();
}
}
本来一个是FALSE,一个是TRUE,然后提示我FALSE和TRUE未定义,所以这么改。
修改GUI_X.c
不修改会提示和GUI_X_uCOS.c文件出现重定义错误。把GUI_X.c文件中的除了最后
void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
三句话其余的全部注释掉——最后3句不能注释,因为其他文件引用了这3个函数。
修改GUIConf.h
打开工程目录文件夹Config,修改其中的GUIConf.h文件:

#define GUI_OS                    (1) 

1代表支持操作系统。
主程序修改

#include "sys.h"
#include "delay.h"  
#include "usart.h"   
#include "led.h"
#include "ili93xx.h" 
#include "touch.h"
#include "gui.h"
#include    "24cxx.h"
#include  "ucos_ii.h"       


int t;
/////////////////////////UCOSII任务设置///////////////////////////////////
//START 任务
//设置任务优先级
#define START_TASK_PRIO                 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE                  64
//任务堆栈  
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);   


//触摸屏任务
//设置任务优先级
#define TOUCH_TASK_PRIO                 6 
//设置任务堆栈大小
#define TOUCH_STK_SIZE                      64
//任务堆栈
OS_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
//任务函数
void touch_task(void *pdata);

int main(void)
{ 
     Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
     delay_init(168);           //初始化延时函数
     LED_Init();                    //初始化LED时钟    
     uart_init(84,115200);      //初始化串口波特率为115200——必须要有这句话 
     LCD_hard_Init();
     TP_Init();             //触摸屏初始化 
     GUI_Init();
     GUI_SetBkColor(GUI_BLUE);//设置背景色
     GUI_SetColor(GUI_WHITE);
     GUI_Clear();
     GUI_SetFont(&GUI_Font24_ASCII);
   GUI_DispStringAt("- - STM32F4 - -",4,10);
   GUI_DispStringAt("- - UCGUI3.98 - -",4,40);
   GUI_DispStringAt("- - SUCCESSFULLY - -",4,70);

     delay_ms(2000);// 延时2s
   GUI_Clear();
     GUI_CURSOR_Show();

     OSInit();                  //初始化UCOSII
     OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
     OSStart();                 //启动UCOSII
}


//开始任务
void start_task(void *pdata)
{
  OS_CPU_SR cpu_sr=0;
    pdata = pdata; 
  OS_ENTER_CRITICAL();          //进入临界区(无法被中断打断)    
    OSTaskCreate(touch_task,(void *)0,(OS_STK*)&TOUCH_TASK_STK[TOUCH_STK_SIZE-1],TOUCH_TASK_PRIO);                     
    OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
    OS_EXIT_CRITICAL();             //退出临界区(可以被中断打断)
} 


//TOUCH任务
void touch_task(void *pdata)
{     
    while(1)
    {
        t++;
        delay_ms(10);
        if(t==50)
        {
            LED0=~LED0;
            t=0;
        }
    GUI_TOUCH_Exec();
        GUI_Exec();//GUI事件更新
    };
}




猜你喜欢

转载自blog.csdn.net/u014751607/article/details/72594291