您的位置 首页 传感器

ucos-ii学习笔记——s12 lcd led 两使命信号量通讯

Createdon:2012-10-17Author:zhangbin学习笔记forucos-iiMC9S12XS128lcd12864ser_2_pinredesignedbyzhangbin201

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);

staticvoidAppTask3(void*pdata);

staticvoidAppTask4(void*pdata);

staticvoidAppTask5(void*pdata);

staticvoidAppTask6(void*pdata);

staticvoidAppTask7(void*pdata);

staticvoidAppTask8(void*pdata);

staticvoidAppTask9(void*pdata);

staticvoidAppTaskA(void*pdata);

staticvoidAppTaskB(void*pdata);

staticvoidAppTaskC(void*pdata);

staticvoidAppTaskD(void*pdata);

staticvoidAppTaskE(void*pdata);

staticvoidAppTaskF(void*pdata);

staticvoidAppTickInit(void);

staticvoidlcd_task(void*pdata);

staticvoidled_task(void*pdata);

OS_EVENT*event_sem;//声明信号量是事情操控块ECB类型的指针寄存创立信号量函数回来的创立的

INT8Uerr;//界说一个错误信息

//12864要显现的内容

staticunsignedchars1[]={“汉字显现LCD“};

staticunsignedchars2[]={“MC9S12开发体系”};

staticunsignedchars3[]={“goodgoodstudy“};

staticunsignedchars4[]={“2012-10-17-H23木”};

//INT8Utimes_lcd=0;//记载使命lcd的运转次数

//INT8Utimes_led=0;//使命led的运转次数

voidmain(void)

{//由于没有外设,所以不存在硬件初始化函数

INT8Uerr;

INT16UStartdata=0x1234;//???

//开端履行的方位另一种界说方法:TASKDATA.myPPAGE=0x1234,为结构体变量的初始化

DDRB=0xff;//B口led设为输出

PORTB=0xff;//led初始状况为灭

DDRA|=0x03;//液晶的两条线

init_lcd();

pllbus_init16m();//时钟初始化为16M

//LcdInit();//LCD初始化

OSInit();

event_sem=OSSemCreate(1);

//在主函数中创立信号量回来值为创立的信号量指针,参数是信号量的计数器的值

//用该参数对信号量计数器OSEventCnt进行初始化

//1即代表只创立一个信号量,代表信号量用于对共享资源的拜访(例如,把它作为二值信号量运用),详见P166

//创立开端使命,效果:初始化时钟滴答,为操作体系供给时钟。初始化计算使命,创立使用使命,树立事情

OSTaskCreateExt(AppStartTask,//创立开端使命处于休眠态的使命通过这个函数处理后转为安排妥当态

(void*)&Startdata,//???

(OS_STK*)&AppStartTaskStk[TASK_STK_SIZE-1],

TASK_START_PRIO,//优先级为5

TASK_START_PRIO,

(OS_STK*)&AppStartTaskStk[0],

TASK_STK_SIZE,

(void*)0,

OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

//该函数参数的详细介绍见P121

OSTaskNameSet(TASK_START_PRIO,“StartTask”,&err);//设置使命的称号效果??

OSTaskNameSet(OS_TASK_IDLE_PRIO,“uC/OS-IIIdle”,&err);//闲暇使命

OSTaskNameSet(OS_TASK_STAT_PRIO,“uC/OS-IIStat”,&err);//计算使命

//#defineOS_TASK_STAT_EN1u//Enable(1)orDisable(0)thestatisticstask

//由于在本体系中os_cfg_r.h文件中把OS_TASK_STAT_EN设为了1(如上),所以体系的计算使命会树立

//计算使命的树立是在OSInit()中被创立的,代码如下:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/256264.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部