您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > 嵌入式 事件标志组编程
2.2题目组合2程序设计题目-事件标志组编程目标:设计三个任务,当时间到且独立按健被按下过,让LED闪耀一下。设LED任务为高优先级任务,三个任务的处理流程如图。下面是三个任务的处理流程。主任务:无条件挂起一个任务,之后建立两个子任务(任务A与任务B),设置任务B为高优先级任务。以两组信号量(低位标志与次低位标志)组成之间标志组,完成程序设计。任务A:voidTask_A(void*p_arg){INT8Uerr;while(1){OSTimeDly(100);OSFlagPost(LED_Flag,(OS_FLAGS)2,OS_FLAG_SET,&err);if(err!=OS_NO_ERR)Uart_Printf(Task_A事件标志组失败,错误码%d\n,err);elseUart_Printf(发送标志位\r\n);}任务BvoidTask_B(void*p_arg){INT8Uerr;while(1){OSFlagPend(LED_Flag,(OS_FLAGS)3,OS_FLAG_WAIT_SET_AND|OS_FLAG_CONSUME,0,&err);Uart_Printf(LED亮\r\n);Led(ON);OSTimeDly(100);Led(OFF);OSTimeDly(100);Uart_Printf(LED灭实验成功\r\n);}}中断任务voidEInt0Isr(void){INT8Uerr;rI_ISPC=BIT_EINT0;OSIntEnter();Uart_Printf(发送按键中断\r\n);OSFlagPost(LED_Flag,(OS_FLAGS)1,OS_FLAG_SET,&err);Uart_Printf(发送低位标志\r\n);OSIntExit();Uart_Printf(退出按键中断\r\n);}试验程序#includegrobal.h/************************任务、堆栈、优先级定义***************************/OS_STKTask_Start_Stack[STACKSIZE_M];voidTask_Start(void*Id);#defineTask_Start_PRIO4OS_STKTask_A_Stack[STACKSIZE_M];voidTask_A(void*Id);#defineTask_A_PRIO16OS_STKTask_B_Stack[STACKSIZE_M];voidTask_B(void*Id);#defineTask_B_PRIO15OS_FLAG_GRP*LED_Flag;//LED事件标志组voidMain(void){charId0='1';U8err;SystemInit();Delay(5000);//延时等待有效复位Led(OFF);OSInit();//创建LED事件标志组LED_Flag=OSFlagCreate(0,&err);if(err!=OS_NO_ERR)Uart_Printf(创建LED_Flag事件标志组失败,错误码%d\n,err);OSTaskCreate(Task_Start,(void*)&Id0,(void*)&Task_Start_Stack[STACKSIZE_L-1],Task_Start_PRIO);OSStart();}voidTask_Start(void*p_arg){charId1='2';charId2='3';U16ver;(void)p_arg;Uart_Printf(\n\n考核题2...\n\n);Uart_Printf(uCOS-II实时操作系统初始化...\n);OSTimeSet(0);Uart_Printf(uCOS-II实时操作系统时钟设定.\n);ver=OSVersion();Uart_Printf(uCOS-II实时操作系统版本:%d\n,ver);TimersStart();OSTimeDly(20);OSTaskCreate(Task_A,(void*)&Id1,(void*)&Task_A_Stack[STACKSIZE_M-1],Task_A_PRIO);OSTaskCreate(Task_B,(void*)&Id2,(void*)&Task_B_Stack[STACKSIZE_M-1],Task_B_PRIO);while(1){OSTaskSuspend(OS_PRIO_SELF);}}/******************************************************************************【功能说明】A任务******************************************************************************/voidTask_A(void*p_arg){INT8Uerr;while(1){OSTimeDly(100);OSFlagPost(LED_Flag,(OS_FLAGS)2,OS_FLAG_SET,&err);if(err!=OS_NO_ERR)Uart_Printf(Task_A事件标志组失败,错误码%d\n,err);elseUart_Printf(发送标志位\r\n);}}/******************************************************************************【功能说明】B任务*****************************************************************************/voidTask_B(void*p_arg){INT8Uerr;while(1){OSFlagPend(LED_Flag,(OS_FLAGS)3,OS_FLAG_WAIT_SET_AND|OS_FLAG_CONSUME,0,&err);Uart_Printf(LED亮\r\n);Led(ON);OSTimeDly(100);Led(OFF);OSTimeDly(100);Uart_Printf(LED灭实验成功\r\n);}}//************************************************************************************************//*voidEInt0Isr(void)//*Description:外部中断0//*Argument:none//************************************************************************************************/voidEInt0Isr(void){INT8Uerr;rI_ISPC=BIT_EINT0;OSIntEnter();Uart_Printf(发送按键中断\r\n);OSFlagPost(LED_Flag,(OS_FLAGS)1,OS_FLAG_SET,&err);Uart_Printf(发送低位标志\r\n);OSIntExit();Uart_Printf(退出按键中断\r\n);调试结果}
本文标题:嵌入式 事件标志组编程
链接地址:https://www.777doc.com/doc-7037408 .html