完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我用的是战舰旧版的,是信号量和邮箱的实验,关于信号量程序的理解
//蜂鸣器任务 void beep_task(void *pdata) { u8 err; while(1) { OSSemPend(sem_beep,0,&err); BEEP=1; delay_ms(60); BEEP=0; delay_ms(940); } } ······ void main_task(void *pdata) { u32 key=0; u8 err; u8 semmask=0; u8 tcnt=0; while(1) { key=(u32)OSMboxPend(msg_key,10,&err); switch(key) { case 1://控制DS1 LED1=!LED1; break; case 2://发送信号量 semmask=1; OSSemPost(sem_beep); break; case 3://清除 LCD_Fill(0,121,lcddev.width,lcddev.height,WHITE); break; case 4://校准 OSTaskSuspend(TOUCH_TASK_PRIO); //挂起触摸屏任务 TP_Adjust(); OSTaskResume(TOUCH_TASK_PRIO); //解挂 ucos_load_main_ui(); //重新加载主界面 break; } if(semmask||sem_beep->OSEventCnt)//需要显示sem { POINT_COLOR=BLUE; LCD_ShowxNum(192,50,sem_beep->OSEventCnt,3,16,0X80);//显示信号量的值 if(sem_beep->OSEventCnt==0)semmask=0; //停止更新 } 关于信号量我是这样理解的,在main_task中,我按键连续按下好几个,比如连续按下5下,这时候由于main_task的任务级别较高, 连续执行5次 case 2://发送信号量 semmask=1; OSSemPost(sem_beep); break; 此时,sem_beep->OSEventCnt就记数达到5,液晶显示LCD_ShowxNum(192,50,sem_beep->OSEventCnt,3,16,0X80);//显示信号量的值 当beep_task()执行时,每次执行请求函数,sem_beep->OSEventCnt就减一次,知道为0,蜂鸣器就响了5次。 我的问题:是否当sem_beep->OSEventCnt减到0,后面的蜂鸣器就不响了???? |
|
相关推荐
1个回答
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1022 浏览 1 评论
1852 浏览 0 评论
1833 浏览 1 评论
3258 浏览 5 评论
3585 浏览 9 评论
1022浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:44 , Processed in 0.668618 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2798