ucos到底能使用几个信号量?
我同时使用三个信号量 使四个任务轮流打印 结果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, //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_TASK_Prio);
OSTaskCreate(TaskLed1, (void * )0, (OS_STK *)&TASK_LED1_STK, LED1_TASK_Prio);
OSTaskCreate(TaskPrint1, (void * )0, (OS_STK *)&TASKPrint1, LED1_TASK_Prio+1);
OSTaskCreate(TaskPrint2, (void * )0, (OS_STK *)&TASKPrint2, 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);
}
} 信号量的多少可以使用,是看你是如何配置的,
#define OS_MAX_EVENTS 10u /* Max. number of event control blocks in your application */
看你定义的多少,注意不公SEM要用其它的一些事件也要使用! 回复【1楼】clingos
信号量的多少可以使用,是看你是如何配置的,
#define os_max_events 10u /* max. number of event control blocks in your application */
看你定义的多少,注意不公sem要用其它的一些事件也要使用!
-----------------------------------------------------------------------
非常感谢 应该没限制吧看配置了
页:
[1]