完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#ifndef __APP_CFG_H__
#define __APP_CFG_H__ #define STARTUP_TASK_PRIO 5 #define STARTUP_LED1_PRIO 4 #define STARTUP_KEY_PRIO 3 #define STARTUP_TASK_STK_SIZE 80 #define STARTUP_LED1_STK_SIZE 80 #define STARTUP_KEY_STK_SIZE 128 #endif APP.c #include "includes.h" OS_EVENT *Sem; INT8U err; static OS_STK STARTUP_LED1_STK[STARTUP_LED1_STK_SIZE]; static OS_STK STARTUP_KEY_STK[STARTUP_KEY_STK_SIZE]; void Task_LED1(void *pdata) { pdata=pdata; SysTick_init(); while (1) { OSSemPend(Sem,0,&err); for(;;) { LED1( ON ); OSTimeDly(1000); LED1( OFF); OSTimeDly(1000); LED2( ON ); OSTimeDly(1000); LED2( OFF); OSTimeDly(1000); } } } void Task_KEY(void *pdata) { INT8U KeyAState; pdata=pdata; while(1) { OSTimeDly(20); KeyAState=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13); if(KeyAState==0) { OSTimeDly(20); KeyAState=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13); if(KeyAState==0) { Sem=OSSemCreate(0); OSSemPost(Sem); } } } } void Task_LED(void *pdata) { pdata=pdata; SysTick_init(); while (1) { OSTaskCreate(Task_LED1,(void *) 0,(OS_STK *)&STARTUP_LED1_STK[STARTUP_LED1_STK_SIZE-1], STARTUP_LED1_PRIO ); OSTaskCreate(Task_KEY,(void *) 0,(OS_STK *)&STARTUP_KEY_STK[STARTUP_KEY_STK_SIZE-1], STARTUP_KEY_PRIO ); } } main.c #include "includes.h" static OS_STK STARTUP_start_STK[STARTUP_TASK_STK_SIZE]; int main(void) { BSP_Init(); OSInit(); OSTaskCreate(Task_LED,(void *) 0,(OS_STK *)&STARTUP_start_STK[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO ); OSStart(); return 0; } |
|
相关推荐
12个回答
|
|
正在学习总,帮顶
|
|
|
|
再顶!!!!!!!!!!!
|
|
|
|
再定!!!!!!!!!!!!!!!!!!!!
|
|
|
|
你试一下把按键的抖动延时去掉,直接长按看看能不能控制
|
|
|
|
程序中几个问题帮你提出来:
1、你信号量创建有问题。要在while外面创建! 2、你按键的任务根本没有创建!所以只有一个LED任务当然会一闪一闪! 3、虽然你LED任务创建了,里面也在等待信号量,可是由于的你按键任务没有创建所以信号量也没有创建成功,LED任务就等于没有在等待信号量一样。 4、你按键的这样子消抖会连续POST多个信号量CNT! 5、最后,当然会一闪一闪(要改的东西太多了,一步一步来!) |
|
|
|
程序中几个问题帮你提出来:
1、你信号量创建有问题。要在while外面创建! 2、你按键的任务根本没有创建!所以只有一个LED任务当然会一闪一闪! 3、虽然你LED任务创建了,里面也在等待信号量,可是由于的你按键任务没有创建所以信号量也没有创建成功,LED任务就等于没有在等待信号量一样。 4、你按键的这样子消抖会连续POST多个信号量CNT! 5、最后,当然会一闪一闪(要改的东西太多了,一步一步来!) |
|
|
|
a985338980 发表于 2016-7-24 22:21 对不起 分析错误了,你一直在创建任务!初始化创建任务后要不挂起,要不删除!第一步就错了!按键你是创建了可是信号量第一定义错误,所以按键没有按下也可以闪烁因为没有创建成功,所LED闪烁任务根本没有等待信号量! |
|
|
|
1、你信号量创建有问题。要在while外面创建!
|
|
|
|
2、你按键的任务根本没有创建!所以只有一个LED任务当然会一闪一闪!
|
|
|
|
3、虽然你LED任务创建了,里面也在等待信号量,可是由于的你按键任务没有创建所以信号量也没有创建成功,LED任务就等于没有在等待信号量一样。 |
|
|
|
a985338980 发表于 2016-7-24 22:21 4、你按键的这样子消抖会连续POST多个信号量CNT! |
|
|
|
a985338980 发表于 2016-7-24 22:21 5、最后,当然会一闪一闪(要改的东西太多了,一步一步来!) |
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
4979 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3193 浏览 1 评论
561浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 07:58 , Processed in 0.722919 second(s), Total 71, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号