完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
求助大神:uCOSii 添加了4个任务,其中按键扫描优先级最高,除了优先级最高的2个任务能正常工作外,低优先级的任务不能正常运行,要很偶然的时间才能触发运行!不知道哪里的原因,求大神们协助!谢谢……[C] 纯文本查看 复制代码
#include "includes.h" /////////////////////////UCOSII任务堆栈设置/////////////////////////////////////按键扫描任务//设置任务优先级#define KEY_TASK_PRIO 5 //设置任务堆栈大小#define KEY_STK_SIZE 64//创建任务堆栈空间OS_STK KEY_TASK_STK[KEY_STK_SIZE];//任务函数接口void key_task(void *pdata);/*******************************dut1任务*********************************/#define DUT1_TASK_PRIO 6 //设置任务优先级#define DUT1_STK_SIZE 64 //设置任务堆栈大小OS_STK DUT1_TASK_STK[DUT1_STK_SIZE]; //创建任务堆栈空间void dut1_task(void *pdata); //任务函数接口/*******************************dut2任务*********************************/#define DUT2_TASK_PRIO 7 //设置任务优先级#define DUT2_STK_SIZE 64 //设置任务堆栈大小OS_STK DUT2_TASK_STK[DUT2_STK_SIZE]; //创建任务堆栈空间void dut2_task(void *pdata); //任务函数接口/*******************************dut3任务*********************************/#define DUT3_TASK_PRIO 8 //设置任务优先级#define DUT3_STK_SIZE 64 //设置任务堆栈大小OS_STK DUT3_TASK_STK[DUT3_STK_SIZE]; //创建任务堆栈空间void dut3_task(void *pdata); //任务函数接口/*******************************dut4任务*********************************///#define DUT4_TASK_PRIO 5 //设置任务优先级//#define DUT4_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT4_TASK_STK[DUT4_STK_SIZE]; //创建任务堆栈空间//void dut4_task(void *pdata); //任务函数接口///*******************************dut5任务*********************************///#define DUT5_TASK_PRIO 6 //设置任务优先级//#define DUT5_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT5_TASK_STK[DUT5_STK_SIZE]; //创建任务堆栈空间//void dut5_task(void *pdata); //任务函数接口///*******************************dut6任务*********************************///#define DUT6_TASK_PRIO 7 //设置任务优先级//#define DUT6_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT6_TASK_STK[DUT6_STK_SIZE]; //创建任务堆栈空间//void dut6_task(void *pdata); //任务函数接口///*******************************dut7任务*********************************///#define DUT7_TASK_PRIO 8 //设置任务优先级//#define DUT7_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT7_TASK_STK[DUT7_STK_SIZE]; //创建任务堆栈空间//void dut7_task(void *pdata); //任务函数接口///*******************************dut8任务*********************************///#define DUT8_TASK_PRIO 9 //设置任务优先级//#define DUT8_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT8_TASK_STK[DUT8_STK_SIZE]; //创建任务堆栈空间//void dut8_task(void *pdata); //任务函数接口///*******************************dut9任务*********************************///#define DUT9_TASK_PRIO 10 //设置任务优先级//#define DUT9_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT9_TASK_STK[DUT9_STK_SIZE]; //创建任务堆栈空间//void dut9_task(void *pdata); //任务函数接口///*******************************dut10任务*********************************///#define DUT10_TASK_PRIO 11 //设置任务优先级//#define DUT10_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT10_TASK_STK[DUT10_STK_SIZE]; //创建任务堆栈空间//void dut10_task(void *pdata); //任务函数接口///*******************************dut11任务*********************************///#define DUT11_TASK_PRIO 12 //设置任务优先级//#define DUT11_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT11_TASK_STK[DUT11_STK_SIZE]; //创建任务堆栈空间//void dut11_task(void *pdata); //任务函数接口///*******************************dut12任务*********************************///#define DUT12_TASK_PRIO 13 //设置任务优先级//#define DUT12_STK_SIZE 64 //设置任务堆栈大小//OS_STK DUT12_TASK_STK[DUT12_STK_SIZE]; //创建任务堆栈空间//void dut12_task(void *pdata); //任务函数接口///*******************************总控1任务*********************************///#define ALL1_TASK_PRIO 14 //设置任务优先级//#define ALL1_STK_SIZE 64 //设置任务堆栈大小//OS_STK ALL1_TASK_STK[ALL1_STK_SIZE]; //创建任务堆栈空间//void all1_task(void *pdata); //任务函数接口///*******************************总控2任务*********************************///#define ALL2_TASK_PRIO 15 //设置任务优先级//#define ALL2_STK_SIZE 64 //设置任务堆栈大小//OS_STK ALL2_TASK_STK[ALL2_STK_SIZE]; //创建任务堆栈空间//void all2_task(void *pdata); //任务函数接口/*******************************START 任务*********************************///设置任务优先级#define START_TASK_PRIO 20 //开始任务的优先级设置为最低//设置任务堆栈大小#define START_STK_SIZE 512//创建任务堆栈空间OS_STK START_TASK_STK[START_STK_SIZE];//任务函数接口void start_task(void *pdata);//////////////////////////////////////////////////////////////////////////////OS_EVENT * msg_key;//按键邮箱事件块指针 int main(void) { IO_Init();//按键初始化 delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 ResetSYS();uart_init(19200); TIM6_Int_Init(999,71); //以1Mhz的频率计数分辨率1us,定时1ms串口超时处理 // TIM3_Int_Init(50000,71); //定时50msOSInit(); //初始化UCOSII OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务OSStart(); }//开始任务void start_task(void *pdata){ OS_CPU_SR cpu_sr=0;pdata = pdata; msg_key=OSMboxCreate((void*)0);//创建消息邮箱 OSStatInit();//初始化统计任务.这里会延时1秒钟左右 OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO); OSTaskCreate(dut1_task,(void *)0,(OS_STK*)&DUT1_TASK_STK[DUT1_STK_SIZE-1],DUT1_TASK_PRIO); OSTaskCreate(dut2_task,(void *)0,(OS_STK*)&DUT2_TASK_STK[DUT2_STK_SIZE-1],DUT2_TASK_PRIO); OSTaskCreate(dut3_task,(void *)0,(OS_STK*)&DUT3_TASK_STK[DUT3_STK_SIZE-1],DUT3_TASK_PRIO);// OSTaskCreate(dut4_task,(void *)0,(OS_STK*)&DUT4_TASK_STK[DUT4_STK_SIZE-1],DUT4_TASK_PRIO);// OSTaskCreate(dut5_task,(void *)0,(OS_STK*)&DUT5_TASK_STK[DUT5_STK_SIZE-1],DUT5_TASK_PRIO);// OSTaskCreate(dut6_task,(void *)0,(OS_STK*)&DUT6_TASK_STK[DUT6_STK_SIZE-1],DUT6_TASK_PRIO);// OSTaskCreate(dut7_task,(void *)0,(OS_STK*)&DUT7_TASK_STK[DUT7_STK_SIZE-1],DUT7_TASK_PRIO);// OSTaskCreate(dut8_task,(void *)0,(OS_STK*)&DUT8_TASK_STK[DUT8_STK_SIZE-1],DUT8_TASK_PRIO);// OSTaskCreate(dut9_task,(void *)0,(OS_STK*)&DUT9_TASK_STK[DUT9_STK_SIZE-1],DUT9_TASK_PRIO);// OSTaskCreate(dut10_task,(void *)0,(OS_STK*)&DUT10_TASK_STK[DUT10_STK_SIZE-1],DUT10_TASK_PRIO);// OSTaskCreate(dut11_task,(void *)0,(OS_STK*)&DUT11_TASK_STK[DUT11_STK_SIZE-1],DUT11_TASK_PRIO);// OSTaskCreate(dut12_task,(void *)0,(OS_STK*)&DUT12_TASK_STK[DUT12_STK_SIZE-1],DUT12_TASK_PRIO);// OSTaskCreate(all1_task,(void *)0,(OS_STK*)&ALL1_TASK_STK[ALL1_STK_SIZE-1],ALL1_TASK_PRIO);// OSTaskCreate(all2_task,(void *)0,(OS_STK*)&ALL2_TASK_STK[ALL2_STK_SIZE-1],ALL2_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO);//挂起起始任务.OS_EXIT_CRITICAL();//退出临界区(可以被中断打断)} //按键扫描任务void key_task(void *pdata){u8 key; while(1){key=KEY_Scan(); if(key)OSMboxPost(msg_key,(void*)key);//发送消息 OSTimeDlyHMSM(0,0,0,100);// delay_ms(10);}}/*******************************DUT1任务*********************************/void dut1_task(void *pdata){u32 key=0; u8 err;while(1){ key=(u32)OSMboxPend(msg_key,0,&err);switch(key){ case 0x01: { KM1=0; delay_ms(1000); KM13=0; }break; case 0x02: { KM13=1; delay_ms(800); KM1=1; }break; }OSTimeDlyHMSM(0,0,0,50);// delay_ms(10);} }/*******************************DUT2任务*********************************/void dut2_task(void *pdata){u32 key=0; u8 err;while(1){ key=(u32)OSMboxPend(msg_key,0,&err);switch(key){ case 0x03: { KM2=0; delay_ms(1000); KM14=0; }break; case 0x04: { KM14=1; delay_ms(800); KM2=1; }break; } OSTimeDlyHMSM(0,0,0,20);//delay_ms(10);} }/*******************************DUT3任务*********************************/void dut3_task(void *pdata){u32 key=0; u8 err;while(1){ key=(u32)OSMboxPend(msg_key,0,&err); switch(key){ case 0x05: { KM3=0; delay_ms(1000); KM15=0; }break; case 0x06: { KM15=1; delay_ms(800); KM3=1; }break; } OSTimeDlyHMSM(0,0,0,10);//delay_ms(10);} }///*******************************DUT4任务*********************************///void dut4_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x07:// {// KM4=0;// delay_ms(1000);// KM16=0;// }break;// case 0x08:// {// KM16=1;// delay_ms(800);// KM4=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT5任务*********************************///void dut5_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x09:// {// KM5=0;// delay_ms(1000);// KM17=0;// }break;// case 0x0a:// {// KM17=1;// delay_ms(800);// KM5=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT6任务*********************************///void dut6_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x0b:// {// KM6=0;// delay_ms(1000);// KM18=0;// }break;// case 0x0c:// {// KM18=1;// delay_ms(800);// KM6=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT7任务*********************************///void dut7_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x0d:// {// KM7=0;// delay_ms(1000);// KM19=0;// }break;// case 0x0e:// {// KM19=1;// delay_ms(800);// KM7=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT8任务*********************************///void dut8_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x0f:// {// KM8=0;// delay_ms(1000);// KM20=0;// }break;// case 0x10:// {// KM20=1;// delay_ms(800);// KM8=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT9任务*********************************///void dut9_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x11:// {// KM9=0;// delay_ms(1000);// KM21=0;// }break;// case 0x12:// {// KM21=1;// delay_ms(800);// KM9=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT10任务*********************************///void dut10_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x13:// {// KM10=0;// delay_ms(1000);// KM22=0;// }break;// case 0x14:// {// KM22=1;// delay_ms(800);// KM10=1;// }break;// }//delay_ms(5);//} //}///*******************************DUT11任务*********************************///void dut11_task(void *pdata)//{//u32 key=0;// u8 err;//while(1)//{// key=(u32)OSMboxPend(msg_key,10,&err); //switch(key)//{// case 0x15:// {// KM11=0;// delay_ms(1000);// KM23=0;// }break;[mw_shl_code=applescript,true]#ifndef OS_CFG_H#define OS_CFG_H /* ---------------------- MISCELLANEOUS ----------------------- */#define OS_APP_HOOKS_EN 0u /* Application-defined hooks are called from the uC/OS-II hooks */#define OS_ARG_CHK_EN 0u /* Enable (1) or Disable (0) argument checking */#define OS_CPU_HOOKS_EN 1u /* uC/OS-II hooks are found in the processor port files */#define OS_DEBUG_EN 0u /* Enable(1) debug variables */#define OS_EVENT_MULTI_EN 0u /* Include code for OSEventPendMulti() */#define OS_EVENT_NAME_EN 0u /* Enable names for Sem, Mutex, Mbox and Q */#define OS_LOWEST_PRIO 63u /* Defines the lowest priority that can be assigned ... */ /* ... MUST NEVER be higher than 254! */#define OS_MAX_EVENTS 20u /* Max. number of event control blocks in your application */#define OS_MAX_FLAGS 5u /* Max. number of Event Flag Groups in your application */#define OS_MAX_MEM_PART 0u /* Max. number of memory partitions */#define OS_MAX_QS 5u /* Max. number of queue control blocks in your application */#define OS_MAX_TASKS 20u /* Max. number of tasks in your application, MUST be >= 2 */#define OS_SCHED_LOCK_EN 1u /* Include code for OSSchedLock() and OSSchedUnlock() */#define OS_TICK_STEP_EN 1u /* Enable tick stepping feature for uC/OS-View */#define OS_TICKS_PER_SEC 500u /* Set the number of ticks in one second */ /* --------------------- TASK STACK SIZE ---------------------- */#define OS_TASK_TMR_STK_SIZE 128u /* Timer task stack size (# of OS_STK wide entries) */#define OS_TASK_STAT_STK_SIZE 128u /* Statistics task stack size (# of OS_STK wide entries) */#define OS_TASK_IDLE_STK_SIZE 128u /* Idle task stack size (# of OS_STK wide entries) */ // case 0x16: // { // KM23=1; // delay_ms(800); // KM11=1; // }break; // } // delay_ms(5); // } //} ///*******************************DUT12任务*********************************/ //void dut12_task(void *pdata) //{ // u32 key=0; // u8 err; // while(1) // { // key=(u32)OSMboxPend(msg_key,10,&err); // switch(key) // { // case 0x17: // { // KM12=0; // delay_ms(1000); // KM24=0; // }break; // case 0x18: // { // KM24=1; // delay_ms(800); // KM12=1; // }break; // } // delay_ms(5); // } //} ///*******************************ALL1任务*********************************/ //void all1_task(void *pdata) //{ // u32 key=0; // u8 err; // while(1) // { // key=(u32)OSMboxPend(msg_key,10,&err); // switch(key) // { // case 0x19: // { // KM1=0; // KM2=0; // KM3=0; // KM4=0; // KM5=0; // KM6=0; // delay_ms(1000); // KM13=0; // KM14=0; // KM15=0; // KM16=0; // KM17=0; // KM18=0; // }break; // case 0x1a: // { // KM13=1; // KM14=1; // KM15=1; // KM16=1; // KM17=1; // KM18=1; // delay_ms(800); // KM1=1; // KM2=1; // KM3=1; // KM4=1; // KM5=1; // KM6=1; // }break; // } // delay_ms(5); // } //} ///*******************************ALL1任务*********************************/ //void all2_task(void *pdata) //{ // u32 key=0; // u8 err; // while(1) // { // key=(u32)OSMboxPend(msg_key,10,&err); // switch(key) // { // case 0x1b: // { // KM7=0; // KM8=0; // KM9=0; // KM10=0; // KM11=0; // KM12=0; // delay_ms(1000); // KM19=0; // KM20=0; // KM21=0; // KM22=0; // KM23=0; // KM24=0; // }break; // case 0x1c: // { // KM19=1; // KM20=1; // KM21=1; // KM22=1; // KM23=1; // KM24=1; // delay_ms(1000); // KM7=1; // KM8=1; // KM9=1; // KM10=1; // KM11=1; // KM12=1; // }break; // } // delay_ms(5); // } //} [/mw_shl_code] |
|
相关推荐
8个回答
|
|
post 3次就可以了,或者建立3个不同的邮箱,这样3个任务都可以运行
|
|
|
|
creat函数是有返回值的,先看下任务创建是不是都成功了
|
|
|
|
确认是建成功了的,如果快速的顺序触发任务那么前3个任务都能工作,如果直接触发第3个任务就不可以正常触发第三个任务,前面优先级高的就能正常触发!
|
|
|
|
你确定你会使用邮箱, 一个任务里POST,三个任务里PEND,怎么可能三个任务都运行???
|
|
|
|
提供个思路(你的代码我没看哈。呵呵):有可能是某个任务出现bug(举个等价的例子:这个bug“好比”是一个while(1)死循环。)导致一直在这个任务里运行。而高优先级的任务在任务调度时可以运行,而低优先级任务就不可能运行了。这和你说的现象很像。先找到我说的“某个任务”,看看有没有这样的bug。
|
|
|
|
像我这种多个任务都PEND同一个邮箱,想要根据邮箱传递的不同信息触发不同任务工作的情况该怎么操作?初次使用UCOSII对于邮箱的使用确实不太了解,希望大神指导一下,十分感谢……
|
|
|
|
你为什么 不能,在一个PEnd里面处理 3种情况,,而是要在3个PEND里面处理
|
|
|
|
是因为3个任务要能并行运行,每个任务要出发后要运行很久,如果用一个Pend的话只能3选一的运行了,这不是我想要的实时运行效果!
|
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 0 评论
1154 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1086浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 02:22 , Processed in 1.135229 second(s), Total 96, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号