|
我同时使用三个信号量 使四个任务轮流打印 结果OS_EVENT *Fun_Semp2没办法create一直是0 请各位看看有什么问题。。
OS_EVENT *Fun_Semp;
OS_EVENT *Fun_Semp1;
OS_EVENT *Fun_Semp2;
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化为9600
LED_Init();
//OS_FlagInit();
SysTick_Configuration();
OSInit();
Fun_Semp=OSSemCreate(0);
Fun_Semp1=OSSemCreate(0);
Fun_Semp2=OSSemCreate(0);////////////////////////////////////这里一直没办法初始化,上边两个信号量没问题
//Sem_F=OSFlagCreate(0,&err);
//Sem_F1=OSFlagCreate(0,&err);
OSTaskCreate( TaskStart, //task pointer
(void *)0, //parameter
(OS_STK *)&TASK_START_STK[START_STK_SIZE-1], //task stack top pointer
START_TASK_Prio ); //task priority
OSStart();
return 0;
}
//开始任务
void TaskStart(void * pdata)
{
pdata = pdata;
OS_ENTER_CRITICAL();
OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio);
OSTaskCreate(TaskLed1, (void * )0, (OS_STK *)&TASK_LED1_STK[LED1_STK_SIZE-1], LED1_TASK_Prio);
OSTaskCreate(TaskPrint1, (void * )0, (OS_STK *)&TASKPrint1[START_STK_SIZE-1], LED1_TASK_Prio+1);
OSTaskCreate(TaskPrint2, (void * )0, (OS_STK *)&TASKPrint2[START_STK_SIZE-1], LED1_TASK_Prio+2);
OSTaskSuspend(START_TASK_Prio); //suspend but not delete
OS_EXIT_CRITICAL();
}
void TaskLed(void *pdata)
{
while(1)
{
OSSemPend(Fun_Semp,0,&err);
//OSFlagPend(Sem_F,(OS_FLAGS)3,OS_FLAG_WAIT_SET_ALL,0,&err);
LED0=!LED0;
printf("hello taskledAAAAAAAA\n");
//OSTimeDlyHMSM(0,0,1,0);
}
}
//任务2
//控制DS1的亮灭.
void TaskLed1(void *pdata)
{
int a=0;
while(1)
{
OSSemPend(Fun_Semp1,0,&err);
a++;
LED1=!LED1;
printf("hello taskled1BBBBBBBB %d \n",a);
if(a>=5)
{
OSSemPost(Fun_Semp);
a=0;
}
OSTimeDlyHMSM(0,0,0,500);
}
}
void TaskPrint1(void *pdata)
{
int a=0;
while(1)
{
a++;
OSSemPend(Fun_Semp2,0,&err);
//OSFlagPend(Sem_F1,(OS_FLAGS)3,OS_FLAG_WAIT_SET_ALL,0,&err);
//OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_SET,&err);
printf("hello print1taskCCCCCCCC\n");
if(a>=5)
{
OSSemPost(Fun_Semp1);
a=0;
}
OSTimeDlyHMSM(0,0,500,0);
//OSFlagPost(Sem_F,(OS_FLAGS)3,OS_FLAG_SET,&err);
}
}
void TaskPrint2(void *pdata)
{
int a=0;
while(1)
{
a++;
LED1=!LED1;
printf("hello taskPrint2DDDDDDDD %d \n",a);
if(a>=20)
{
OSSemPost(Fun_Semp2);
a=0;
}
OSTimeDlyHMSM(0,0,0,500);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|