微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ucos-ii学习笔记——s12 lcd led 两任务信号量通信

ucos-ii学习笔记——s12 lcd led 两任务信号量通信

时间:11-28 来源:互联网 点击:
Createdon:2012-10-17

Author:zhangbin

学习笔记

forucos-iiMC9S12XS128lcd12864ser_2_pin

redesignedbyzhangbin

2012-10-17

versions:V-0.1

AllRightsReserved

//本程序实现lcd的显示和led的闪烁,这两个任务通过信号量进行通信,要实现的效果如下:

//lcd任务申请一个信号量后显示完一个周期后停止显示并且释放信号量,led任务申请到信号量后开始闪烁,闪烁了10

//次后停止,释放信号量,lcd任务再申请信号量,继续开始显示,如此循环

//本程序实现lcd的显示和led的闪烁,这两个任务通过信号量进行通信,要实现的效果如下:

//lcd任务申请一个信号量后显示完一个周期后停止显示并且释放信号量,led任务申请到信号量后开始闪烁,闪烁了10

//次后停止,释放信号量,lcd任务再申请信号量,继续开始显示,如此循环

#include"includes.h"

#include"pll.h"

#include"string.h"

#include"ser_12864.h"

#defineTASK_STK_SIZE128//定义任务堆栈长度

#defineTASK_START_PRIO5//此版本的uC/OS-II最多支持256个用户定义任务。优先级号越低,任务的优先级别就越高

#defineTASK_1_PRIO10

#defineTASK_2_PRIO12

#defineTASK_3_PRIO8

#defineTASK_4_PRIO16

#defineTASK_5_PRIO18

#defineTASK_6_PRIO20

#defineTASK_7_PRIO22

#defineTASK_8_PRIO24

#defineTASK_9_PRIO26

#defineTASK_A_PRIO28

#defineTASK_B_PRIO30

#defineTASK_C_PRIO32

#defineTASK_D_PRIO34

#defineTASK_E_PRIO36

#defineTASK_F_PRIO38

#defineMUTEX_PIP_18

#defineMUTEX_PIP_29

#defineEVENT_Q_1_SIZE10

#defineEVENT_Q_2_SIZE20

#defineMEM_BLKS_110

#defineMEM_BLK_SIZE_18

#defineMEM_BLKS_28

#defineMEM_BLK_SIZE_212

OS_STKlcd_task_stk[TASK_STK_SIZE];//定义任务堆栈

OS_STKled_task_stk[TASK_STK_SIZE];

OS_STKAppStartTaskStk[TASK_STK_SIZE];//创建任务堆栈OS_STK创建任务参数指针TASKDATA,调用函数创建任务

OS_STKAppTask1Stk[TASK_STK_SIZE];

OS_STKAppTask2Stk[TASK_STK_SIZE];

OS_STKAppTask3Stk[TASK_STK_SIZE];

OS_STKAppTask4Stk[TASK_STK_SIZE];

OS_STKAppTask5Stk[TASK_STK_SIZE];

OS_STKAppTask6Stk[TASK_STK_SIZE];

OS_STKAppTask7Stk[TASK_STK_SIZE];

OS_STKAppTask8Stk[TASK_STK_SIZE];

OS_STKAppTask9Stk[TASK_STK_SIZE];

OS_STKAppTaskAStk[TASK_STK_SIZE];

OS_STKAppTaskBStk[TASK_STK_SIZE];

OS_STKAppTaskCStk[TASK_STK_SIZE];

OS_STKAppTaskDStk[TASK_STK_SIZE];

OS_STKAppTaskEStk[TASK_STK_SIZE];

OS_STKAppTaskFStk[TASK_STK_SIZE];

INT16UAppTask1Ctr;

INT16UAppTask2Ctr;

INT16UAppTask3Ctr;

INT16UAppTask4Ctr;

INT16UAppTask5Ctr;

INT16UAppTask6Ctr;

INT16UAppTask7Ctr;

INT16UAppTask8Ctr;

INT16UAppTask9Ctr;

INT16UAppTaskACtr;

INT16UAppTaskBCtr;

INT16UAppTaskCCtr;

INT16UAppTaskDCtr;

INT16UAppTaskECtr;

INT16UAppTaskFCtr;

INT8Usensor=0;//定义8路传感器采集变量

INT8Utest_value;//定义第八路传感器故障时的变量

//下面定义一些事件等,方便使用,不习惯使用下面的定义,自己定义也可以

#ifOS_SEM_EN>0//如果信号量使能位允许

OS_EVENT*EventSem1;//声明信号量是事件控制块ECB类型的指针存放创建信号量函数返回的创建的

OS_EVENT*EventSem2;//信号量的指针

#endif

#ifOS_MBOX_EN>0

OS_EVENT*EventMbox1;//声明消息邮箱是事件控制块ECB类型的指针

OS_EVENT*EventMbox2;

#endif

#ifOS_Q_EN>0

OS_EVENT*EventQ1;//声明消息队列

OS_EVENT*EventQ2;

void*EventQTbl1[EVENT_Q_1_SIZE];

void*EventQTbl2[EVENT_Q_2_SIZE];

//定义消息指针数组

//创建消息队列,首先需要定义一个指针数组(用于存放消息邮箱),然后把各个消息数据缓冲区的首地址存入这个数组中

//最后再调用函数OSQCreate()来创建消息队列

#endif

#ifOS_MUTEX_EN>0

OS_EVENT*EventMutex1;//声明互斥信号量

OS_EVENT*EventMutex2;

#endif

#ifOS_FLAG_EN>0

OS_FLAG_GRP*FlagGrp1;//声明事件标志组是标志组OS_FLAG_GRP类型的指针

OS_FLAG_GRP*FlagGrp2;//事件控制块用来描述信号量,消息邮箱,消息队列。标志组用来描述事件标志组

#endif

#ifOS_MEM_EN>0

OS_MEM*MemPart1;//声明内存块是内存控制块OS_MEM类型的指针

OS_MEM*MemPart2;

INT8UMemPart1Tbl[MEM_BLKS_1][MEM_BLK_SIZE_1];//内存分区

INT8UMemPart2Tbl[MEM_BLKS_2][MEM_BLK_SIZE_2];

#endif

//任务的函数声明

staticvoidAppStartTask(void*pdata);

staticvoidAppTaskCreate(void);

staticvoidAppEventCreate(void);

staticvoidAppTask1(void*pdata);

staticvoidAppTask2(void*pdata);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top