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

来源:互联网 发布:template.js helper 编辑:程序博客网 时间:2024/06/06 09:29

移植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事件更新    };}