我写了一个多任务的使用信号量进行同步的程序,但是加入信号量之后对程序啥影响都木有呀,和没加一样,keil调试连个警告都木有呀。。。。。
主函数:#include "includes.h"
OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE]; //定义栈
int main(void)
{
OS_EVENT *FUN_Semp;
BSP_Init();
OSInit();
FUN_Semp = OSSemCreate(0);
OSTaskCreate(Task_Start,(void *)0,&startup_task_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO);
OSStart();
return 0;
}
下边是应用函数:
#include "includes.h"
OS_STK task_led2_stk[TASK_LED2_STK_SIZE]; //定义栈
OS_STK task_led3_stk[TASK_LED3_STK_SIZE]; //定义栈
OS_EVENT *FUN_Semp;
void Task_Start(void *p_arg)
{
(void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告
SysTick_init();
OSTaskCreate(Task_LED2,(void *)0, //创建任务2
&task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);
OSTaskCreate(Task_LED3,(void *)0, //创建任务3
&task_led3_stk[TASK_LED3_STK_SIZE-1], TASK_LED3_PRIO);
while (1)
{
LED1( ON );
OSTimeDlyHMSM(0, 0,0,500);
LED1( OFF);
OSTimeDlyHMSM(0, 0,0,500);
}
}
//任务2
void Task_LED2(void *p_arg) //优先级5
{
(void)p_arg;
SysTick_init();
while (1)
{
INT8U error;
OSSemPend(FUN_Semp, 0, &error );
LED2( ON );
OSTimeDlyHMSM(0, 0,1,0);
LED2( OFF);
OSTimeDlyHMSM(0, 0,1,0);
}
}
//任务3
void Task_LED3(void *p_arg) //优先级6
{
(void)p_arg;
SysTick_init();
while (1)
{
LED3( ON );
OSTimeDlyHMSM(0, 0,5,0);
LED3( OFF);
OSSemPost(FUN_Semp);
OSTimeDlyHMSM(0, 0,5,0);
}
}
大师们帮忙看看吧,把程序中的信号量加上和没加的反应时一样的呀
|