初级会员
- 积分
- 160
- 金钱
- 160
- 注册时间
- 2014-1-7
- 在线时间
- 24 小时
|
1金钱
求助大神:uCOSii 添加了4个任务,其中按键扫描优先级最高,除了优先级最高的2个任务能正常工作外,低优先级的任务不能正常运行,要很偶然的时间才能触发运行!不知道哪里的原因,求大神们协助!谢谢……[mw_shl_code=c,true]#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); //定时50ms
OSInit(); //初始化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) */
[/mw_shl_code]
// 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]
|
|