打印

ucos之多任务的同步问题求解~~~

[复制链接]
895|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuchang890811|  楼主 | 2015-8-6 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ucos, ST, TI, IO, gp
本帖最后由 liuchang890811 于 2015-8-6 15:59 编辑
#include "includes.h"
#include <stm32f10x.h>
#include "led.h"
#include "key.h"
#include "usart.h"

static OS_STK Start_Task_Stk[START_TASK_STK_SIZE];
static OS_STK Disp_Task_Stk[DISP_TASK_STK_SIZE];
static OS_STK LED1_Task_Stk[LED1_TASK_STK_SIZE];
static OS_STK Key_Task_Stk[KEY_TASK_STK_SIZE];

static void Target_Init(void);
static void Start_Task(void *p_arg);
static void Disp_Task(void *p_arg);
static void LED1_Task(void *p_arg);
static void Key_Task(void *p_arg);

OS_FLAG_GRP *My_FlagGroup;

int main(void)
{
        Target_Init();        
        printf(" ucos已经启动\n");
   
    OSInit();               
        
    OSTaskCreate(Start_Task,
                     (void *)0,
                     &Start_Task_Stk[START_TASK_STK_SIZE-1],
                     START_TASK_PRIO);
        
    OSStart();        
        return 0;
}

static void Start_Task(void *p_arg)
{
        INT8U err;
        OS_CPU_SysTickInit();        
        printf("Start_Task任务已经启动\n");
        
        My_FlagGroup=OSFlagCreate(0,&err);
        
        OSTaskCreate(LED1_Task,
                     (void *)0,
                     &LED1_Task_Stk[LED1_TASK_STK_SIZE-1],
                     LED1_TASK_PRIO);
        OSTaskCreate(Key_Task,
                     (void *)0,
                     &Key_Task_Stk[KEY_TASK_STK_SIZE],
                     KEY_TASK_PRIO);
        OSTaskCreate(Disp_Task,
                     (void *)0,
                     &Disp_Task_Stk[DISP_TASK_STK_SIZE-1],
                     DISP_TASK_PRIO);
        
        OSTaskDel(OS_PRIO_SELF);
}
        

static void LED1_Task(void *p_arg)
{        
        INT8U err;
        (void)p_arg;        
        
        while(1)
        {        
                OSTimeDly(1000);
                OSFlagPost(My_FlagGroup,0x01,OS_FLAG_SET,&err);
                OSFlagPend(My_FlagGroup,0x07,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&err);        
                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                OSTimeDly(OS_TICKS_PER_SEC/2);
                GPIO_SetBits(GPIOB,GPIO_Pin_0);
                OSTimeDly(OS_TICKS_PER_SEC/2);               
        }
}


static void Key_Task(void *p_arg)
{
        INT8U err;
        (void)p_arg;
        
        while(1)
        {        
                if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)
                {
                        OSTimeDly(150);
                        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) ==1)
                        {
                                OSFlagPost(My_FlagGroup,0x02,OS_FLAG_SET,&err);
                                OSFlagPend(My_FlagGroup,0x07,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&err);
                        }
                                
                }
        }
}

        
static void Disp_Task(void *p_arg)
{
        INT8U err;
    (void) p_arg;
                        
        while(1)
        {
                OSFlagPost(My_FlagGroup,0x04,OS_FLAG_SET,&err);
                OSFlagPend(My_FlagGroup,0x07,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,0,&err);
                printf("完成一次任务同步\n");
        }
}


static void Target_Init(void)
{
        LED1_Init();
        LED2_Init();
        Key_PA0_Config();
        USART1_Config(115200);
}
小弟想完成一个多任务的同步功能,可是实现不了,请大神在指点~~~现象描述:串口执行一次"完成一次任务同步",接下来我再按按键就没有反应了~~~
按照我的设想,应该是我每按一次按键,就会触发一次,只是1分钟之内不会超过60次,因为我的LED_Task延时为1秒钟触发一次;
任务优先级:#define START_TASK_PRIO                              3
                   #define DISP_TASK_PRIO                                 5
                   #define LED1_TASK_PRIO                                7
                   #define KEY_TASK_PRIO                                  9


相关帖子

沙发
cos12a| | 2016-2-13 23:55 | 只看该作者
return 0;

使用特权

评论回复
板凳
john_lee| | 2016-2-14 10:21 | 只看该作者
删掉 70,92 行看看。

使用特权

评论回复
地板
samyang13| | 2016-2-22 16:57 | 只看该作者
你的Disp_Task(void *p_arg)函数中没有Delay释放CPU的使用权

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

87

帖子

0

粉丝