ucosii单个任务可以运行,多个任务无法运行

2019-07-20 22:43发布

这是主函数
#include "includes.h"
/************************优先级定义**************************************/
/*#define task_start_prio      12*/
#define task_led_reset_prio   13
#define task_led_set_prio   14
/**********************堆栈大小定义**************************************/
#define task_led_reset_stack_size   500
static  OS_STK  task_led_reset_stack[task_led_reset_stack_size];
#define task_led_set_stack_size   500
static  OS_STK  task_led_set_stack[task_led_set_stack_size];
/*
#define  task_start_stack_size     256u
static  OS_STK       task_start_stack[task_start_stack_size];
*/
/************************主函数******************************************/
int main(void)
{
    HAL_Init();
    gpio_init();
    BSP_Init();
    OSInit();
   /* OSTaskCreate(task_start,(void *)0,(OS_STK *)&task_start_stack[task_start_stack_size-1],task_start_prio);*/
    OSTaskCreate(task_led_set,(void *)0,(OS_STK *)&task_led_set_stack[task_led_set_stack_size-1],task_led_set_prio);
    OSTaskCreate(task_led_reset,(void *)0,(OS_STK *)&task_led_reset_stack[task_led_reset_stack_size-1],task_led_reset_prio);
    OSStart();   
}
/***********************初始化外设**************************************/
void gpio_init(void)
      {
            __HAL_RCC_GPIOC_CLK_ENABLE();
            GPIO_InitTypeDef  GPIO_Initstruct;
            GPIO_Initstruct.Mode=GPIO_MODE_OUTPUT_PP;
            GPIO_Initstruct.Pin=GPIO_PIN_13;
            GPIO_Initstruct.Pull=GPIO_PULLUP;
            GPIO_Initstruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
            HAL_GPIO_Init(GPIOC,&GPIO_Initstruct);
      }
/************************建立任务***************************************/
/*static  void  task_start (void *p_arg)
{
    (void)p_arg;
    OSTaskCreate(task_led_set,(void *)0,(OS_STK *)&task_led_set_stack[task_led_set_stack_size-1],task_led_set_prio);
    OSTaskCreate(task_led_reset,(void *)0,(OS_STK *)&task_led_reset_stack[task_led_reset_stack_size-1],task_led_reset_prio);
    while(1)
          {
            OSTimeDlyHMSM(1, 0,,0);
          }
    OSTimeDlyHMSM(1, 0,0,0);
}*/
void task_led_reset(void *p_arg)
    {
        (void)p_arg;
        while (1)
            {
                  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
                  OSTimeDlyHMSM(0, 0,1,0);
            }
    }
void task_led_set(void *p_arg)
    {
        (void)p_arg;
        while (1)
            {
                  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
                 OSTimeDlyHMSM(0, 0,1,0);
            }
    }
/**********************************************************************/






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
特朗姆斯
1楼-- · 2019-07-21 02:08
 精彩回答 2  元偷偷看……
hellcatembert
2楼-- · 2019-07-21 06:03
而且每次都是执行低优先级的任务
特朗姆斯
3楼-- · 2019-07-21 06:05
不是多个任务无法运行,而是一个任务运行完之后马上又运行了第二个任务,你就没法看到现象了

如果是新手的话就先尝试在两个任务里操作两个灯以不同频率闪烁就可以了,你现在的程序我不太明白你的意图或者说你想实现的功能是什么。

hellcatembert
4楼-- · 2019-07-21 10:04
特朗姆斯 发表于 2016-4-21 11:02
不是多个任务无法运行,而是一个任务运行完之后马上又运行了第二个任务,你就没法看到现象了

如果是新手 ...

我是想控制一个灯以1s频率暗灭,我建立了两个任务,一个亮,延时1s,一个是灭,延时1s,但是,现象是,总是运行低优先级的那个,因为,我更改,两个任务的优先级,有两个不同的现象,就是总是低优先级的运行
hellcatembert
5楼-- · 2019-07-21 10:30
 精彩回答 2  元偷偷看……
jermy_z
6楼-- · 2019-07-21 13:27
 精彩回答 2  元偷偷看……

一周热门 更多>