|
如题,用开发板调式看到只有两个任务执行,大家帮忙看看程序有什么问题。
#include <includes.h>
static OS_STK GstkStart[TASK_START_STK_SIZE]; /* The stack of start task */
/* 启动任务的堆栈 */
static OS_STK GstkLED1[TASK_LED_STK_SIZE];
static OS_STK GstkLED2[TASK_LED_STK_SIZE];
static OS_STK GstkLED3[TASK_LED_STK_SIZE];
static OS_STK GstkLED4[TASK_LED_STK_SIZE];
OS_EVENT *LEDCON;
/*********************************************************************************************************
FUNCTION PROTOTYPES 函数声明
*********************************************************************************************************/
static void taskStart (void *pdata); /* The start task 启动任务 */
static void taskLed1 (void *pdata);
static void taskLed2 (void *pdata);
static void taskLed3 (void *pdata);
static void taskLed4 (void *pdata);
int main (void)
{
OSInit(); // Initialize the kernel of uC/OS-II
// LEDCON:结构体成员变量,返回为结构体数据
LEDCON = OSSemCreate(1); // 建立信号量LEDCON,
OSTaskCreate( taskStart, // Initialize the start task
(void *)0, // 任务参数指针
&GstkStart[TASK_START_STK_SIZE-1], // 任务栈顶指针
TASK_START_PRIO ); //
OSStart(); // Start uC/OS-II 启动uC/OS-II,在这之前必须创建至少一个任务
return(0);
}
static void taskStart (void *pdata)
{
(void)pdata;
pdata = pdata; /* 避免编译器警告 */
targetInit(); /* Initialize the target's MCU */
#if OS_TASK_STAT_EN > 0
OSStatInit(); /* 使能统计功能 */
#endif
OSTaskCreate(taskLed1, (void *)0, &GstkLED1[TASK_LED_STK_SIZE-1], TASK_LED1_PRIO); /* 建立LED的处理任务 */
OSTaskCreate(taskLed2, (void *)0, &GstkLED2[TASK_LED_STK_SIZE-1], TASK_LED2_PRIO);
OSTaskCreate(taskLed3, (void *)0, &GstkLED3[TASK_LED_STK_SIZE-1], TASK_LED3_PRIO);
OSTaskCreate(taskLed4, (void *)0, &GstkLED4[TASK_LED_STK_SIZE-1], TASK_LED4_PRIO);
while (1) {
/*
* OSTaskSuspend(OS_PRIO_SELF);
* The start task can be pended here. 启动任务可在这里挂起
*/
OSTaskSuspend(OS_PRIO_SELF);
}
}
static void taskLed1(void *pdata)
{
(void)pdata;
INT8U err;
pdata = pdata;
for(;;)
{
OSSemPend(LEDCON,0,&err); // uC/OS-II检查信号量LEDCON的状态
LED_Toggle(LED1); // 反转LED1
OSTimeDlyHMSM(0,0,0,500); // 延时500ms
LED_Toggle(LED1);
OSTimeDlyHMSM(0,0,0,500);
OSSemPost(LEDCON); // 释放信号量,同时一直在等待该信号量的taskLed2从挂起处开始执行
}
}
static void taskLed2(void *pdata)
{
(void)pdata;
pdata = pdata;
INT8U err;
for(;;)
{
OSSemPend(LEDCON,0,&err); // uC/OS-II检查信号量LEDCON的状态
LED_Toggle(LED2); // 反转LED1
OSTimeDlyHMSM(0,0,0,500); // 延时500ms
LED_Toggle(LED2);
OSTimeDlyHMSM(0,0,0,500);
OSSemPost(LEDCON); // 释放信号量
}
}
static void taskLed3(void *pdata)
{
(void)pdata;
pdata = pdata;
INT8U err;
for(;;)
{
OSSemPend(LEDCON,0,&err); // uC/OS-II检查信号量LEDCON的状态
LED_Toggle(LED3); // 反转LED1
OSTimeDlyHMSM(0,0,0,500); // 延时500ms
OSSemPost(LEDCON); // 释放信号量
}
}
static void taskLed4(void *pdata)
{
(void)pdata;
pdata = pdata;
INT8U err;
for(;;)
{
OSSemPend(LEDCON,0,&err); // uC/OS-II检查信号量LEDCON的状态
LED_Toggle(LED4); // 反转LED1
OSTimeDlyHMSM(0,0,0,500); // 延时500ms
OSSemPost(LEDCON); // 释放信号量
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|