ucos,综合范例,详解

本章我们在 UCOSII 里面创建 7 个任务:开始任务、 LED 任务、触摸
屏任务、队列消息显示任务、信号量集任务、按键扫描任务和主任务,开始任务用于创建邮箱、
消息队列、信号量集以及其他任务,之后挂起;触摸屏任务用于在屏幕上画图,测试 CPU 使
用率;队列消息显示任务请求消息队列,在得到消息后显示收到的消息数据;信号量集任务用
于测试信号量集,采用 OS_FLAG_WAIT_SET_ANY 的方法,任何按键按下(包括 TPAD),
该任务都会控制蜂鸣器发出“滴”的一声;按键扫描任务用于按键扫描,优先级最高,将得到
的键值通过消息邮箱发送出去;主任务创建 3 个软件定时器(定时器 1, 100ms 溢出一次,显
示 CPU 和内存使用率;定时 2, 200ms 溢出一次,在固定区域不停的显示不同颜色;定时
3, ,100ms 溢出一次,用于自动发送消息到消息队列),并通过查询消息邮箱获得键值,根据
键值执行 DS1 控制、控制软件定时器 3 的开关、触摸区域清屏、触摸屏校和软件定时器 2 的

开关控制等。


一、宏定义修改。

os_cfg.h 里面修改软件定时器管理部分的宏定义,修改如下:
#define OS_TMR_EN 1u //使能软件定时器功能
#define OS_TMR_CFG_MAX 16u //最大软件定时器个数
#define OS_TMR_CFG_NAME_EN 1u //使能软件定时器命名
#define OS_TMR_CFG_WHEEL_SIZE 8u //软件定时器轮大小
#define OS_TMR_CFG_TICKS_PER_SEC 100u //软件定时器的时钟节拍( 10ms)
#define OS_TASK_TMR_PRIO 0u //软件定时器的优先级,设置为最高

二、各种任务的设置

start、LED、触摸屏、队列消息显示、主任务、信号量集任务、按键扫描任务。

start_task led_task touch_task qmsgshow_task main_task flags_task key_task

三、参数定义

OS_EVENT * msg_key; //按键邮箱事件块 OS_EVENT结构体:事件类型,信号量计数器,

消息队列指针,等待事件的任务组,

等待中的任务表,事件名。
OS_EVENT * q_msg; //消息队列
OS_TMR * tmr1; //软件定时器 1 定时器的控制块结构体
OS_TMR * tmr2; //软件定时器 2 OSTmrCreate(参数)参数中即为结构体中的参数
OS_TMR * tmr3; //软件定时器 3

OS_FLAG_GRP * flags_key;//按键信号量集 标志组OS_FLAG_GRP描述信号量集。与Create和Post和Pend等函数一起用。

结构体元素:识别是否为信号量集的标志、指向等待任务链表的指针、所有信号列表
void * MsgGrp[256];

四、定时器回调函数

tmr1_callback、tmr2_callback、tmr3_callback

五、加载主界面

六、主函数、

 int main(void)
 {    
delay_init();     //
 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
uart_init(115200); //
 
  LED_Init(); //
LCD_Init();   // 
BEEP_Init(); //
KEY_Init(); //
TPAD_Init(6); //
my_mem_init(SRAMIN); //
    tp_dev.init(); //
ucos_load_main_ui(); //

OSInit();   //
  OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//´´½¨ÆðʼÈÎÎñ
OSStart();  
}

七、触屏操作函数、

画线、画圆等等

八、start_task

{

msg_key=OSMboxCreate((void*)0); //创建消息邮箱
q_msg=OSQCreate(&MsgGrp[0],256); //创建消息队列
flags_key=OSFlagCreate(0,&err); //创建信号量集

进临界区

创建其他几个任务

出临界区

}

九、几个任务的执行代码

led_task touch_task qmsgshow_task main_task flags_task key_task

灵活运用Post和Pend函数




你可能感兴趣的:(ucos,综合范例,详解)