完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include "STM32f10x.h"
#include "ucos_ii.h" /* task stack size */ #define STARTUP_TASK_STK_SIZE 128 #define TASK1_STK_SIZE 128 #define TASK2_STK_SIZE 128 #define TASK3_STK_SIZE 128 #define TASK4_STK_SIZE 128 #define TASK5_STK_SIZE 128 /* task priority */ #define MUTEX_PRIO 5 #define STARTUP_TASK_PRIO 7 #define TASK1_PRIO 9 #define TASK2_PRIO 11 #define TASK3_PRIO 13 #define TASK4_PRIO 15 #define TASK5_PRIO 17 OS_STK startup_stk[STARTUP_TASK_STK_SIZE]; OS_STK task1_stk[TASK1_STK_SIZE]; OS_STK task2_stk[TASK2_STK_SIZE]; OS_STK task3_stk[TASK3_STK_SIZE]; OS_STK task4_stk[TASK4_STK_SIZE]; OS_STK task5_stk[TASK5_STK_SIZE]; u8 os_err; OS_EVENT* Fun_mutex; /*********************************************************/ static void task1(void *p_arg) { for (;;) { GPIO_WriteBit(GPIOD,GPIO_Pin_9|GPIO_Pin_8,Bit_SET); OSTimeDly(500); GPIO_WriteBit(GPIOD,GPIO_Pin_9|GPIO_Pin_8,Bit_RESET); OSTimeDly(500); } } /*********************************************************/ static void task2(void *p_arg) { for (;;) { if(Time_Status==SET) { Time_Status=RESET; key_value0=Read_Key0(); key_value1=Read_Key1(); } OSTimeDly(5); } } /*********************************************************/ static void task3(void *p_arg) { for (;;) { if(key_value0==SET) { key_value0=RESET; GPIO_SetBits(GPIOD,GPIO_Pin_12); OSMutexPost(Fun_mutex); //释放信号量 } OSTimeDly(5); } } /*********************************************************/ static void task4(void *p_arg) { for (;;) { if(key_value1==SET) { key_value1=RESET; GPIOD->ODR^=(1<<13); OSMutexPost(Fun_mutex); //释放信号量 } OSTimeDly(5); } } /*********************************************************/ static void task5(void *p_arg) { for (;;) { OSMutexPend(Fun_mutex,0,&os_err); //等待信号量 GPIOD->ODR^=(1<<11); GPIOD->ODR^=(1<<10); OSTimeDly(5); } } /*********************************************************/ static void startup(void *p_arg) { OS_CPU_SysTickInit(); //初始化时钟滴答 os_err = OSTaskCreate(task1, //任务1 (void *)0, //不带参数 (OS_STK *)&task1_stk[TASK1_STK_SIZE - 1],//堆栈指针 (INT8U)TASK1_PRIO); //优先级 os_err = OSTaskCreate(task2, //任务2 (void *)0, //不带参数 (OS_STK *)&task2_stk[TASK2_STK_SIZE - 1],//堆栈指针 (INT8U)TASK2_PRIO); //优先级 os_err = OSTaskCreate(task3, //任务3 (void *)0, //不带参数 (OS_STK *)&task3_stk[TASK3_STK_SIZE - 1],//堆栈指针 (INT8U)TASK3_PRIO); //优先级 os_err = OSTaskCreate(task4, //任务4 (void *)0, //不带参数 (OS_STK *)&task4_stk[TASK4_STK_SIZE - 1],//堆栈指针 (INT8U)TASK4_PRIO); os_err = OSTaskCreate(task5, //任务5 (void *)0, //不带参数 (OS_STK *)&task5_stk[TASK5_STK_SIZE - 1],//堆栈指针 (INT8U)TASK5_PRIO); OSTaskDel(OS_PRIO_SELF); //任务建立完成删掉这个任务 } /******************************************************************************/ int main(void) { SystemInit(); RCC_Configuration(); NVIC_Configuration(); GPIO_Configuration(); TIM1_Configuration(); Var_Init(); TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); TIM_Cmd(TIM1,ENABLE); Time_Status=RESET; OSInit(); Fun_mutex= OSMutexCreate(MUTEX_PRIO,&os_err); OSTaskCreate(startup, (void *)0, &startup_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO); OSStart(); return 0; } 之前有用信号量方式执行过,程序运行是正常的,但将其改成互斥信号量的方式进行控制,就不正常了,大家帮忙看看问题出在哪里,谢谢。 |
|
相关推荐
2个回答
|
|
一般都很少用到互斥量,除非是进程之间需要同步。
|
|
|
|
OS_MUTEX 不是OS_EVENT* Fun_mutex;
|
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
4984 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3196 浏览 1 评论
565浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 19:13 , Processed in 0.546765 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号