野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3958|回复: 5

[freertos] FreeRTOS 任务调度不起来

[复制链接]
发表于 2020-5-15 11:22:41 | 显示全部楼层 |阅读模式
写了一个极简单的程序,控制一个LED灯的闪烁,Keil环境,使用FreeRTOS系统。烧录到板上后,发现LED灯没有按照预期的闪烁。任务应该是创建成功了,感觉好像是任务调度器没工作起来。请大家指导一下是啥原因。

#include "FreeRTOS.h"
#include "task.h"
#include "stm32f10x.h"

static void BSP_Init(void)
{
                NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
       
                GPIO_InitTypeDef GPIO_InitStructure;

                RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       

                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

                GPIO_Init(GPIOB, &GPIO_InitStructure);       
               
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}

void LED_ON()                //点亮LED
{
        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}

void LED_OFF()               //关闭LED
{
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
}

/*********************LED任务函数*************************/
static void LED_Task()
{       
    while (1)
    {
        LED_ON();
        vTaskDelay(500);

        LED_OFF();
        vTaskDelay(500);                                
    }
}

static TaskHandle_t LED_Task_Handle = NULL;    //创建LED任务句柄

int main(void)
{       
  BaseType_t xReturn = pdPASS;

  BSP_Init();                //初始化硬件
       
/**********************************创建LED任务***********************************/
  xReturn = xTaskCreate((TaskFunction_t )LED_Task,                  //任务入口函数
                        (const char*    )"LED_Task",                        //任务名称
                        (uint16_t       )512,                                          //任务栈大小
                        (void*          )NULL,                                        //任务入口函数参数
                        (UBaseType_t    )1,                                         //任务的优先级
                        (TaskHandle_t*  )&LED_Task_Handle);                //任务控制块指针

  if(pdPASS == xReturn)
        {
                vTaskStartScheduler();         //启动任务调度器
        }
  else
    return -1;  

  while(1);   
}



回复

使用道具 举报

发表于 2020-5-20 00:08:02 | 显示全部楼层
用串口输出   看看哪里没有成功
回复 支持 反对

使用道具 举报

发表于 2020-6-9 17:47:06 | 显示全部楼层
去掉行尾的while(1);
回复 支持 反对

使用道具 举报

发表于 2020-6-12 08:55:39 | 显示全部楼层
sunhuayang 发表于 2020-6-9 17:47
去掉行尾的while(1);

if(pdPASS == xReturn)
        {
                vTaskStartScheduler();         //启动任务调度器
        }

  如果调度成功,程序是不会走到行尾的while(1);的
  是其它原因导致的
回复 支持 反对

使用道具 举报

发表于 2020-6-12 08:58:18 | 显示全部楼层
参见:
      FreeRTOS和FreeMODBUS移植到STM32F407傻瓜教程(Keil5)
     链接为   https://download.csdn.net/download/ba_wang_mao/12054262

    FreeRTOS和FreeMODBUS移植到STM32F103傻瓜教程(Keil5)
     链接为     https://download.csdn.net/download/ba_wang_mao/12054217

手把手教你一步步移植成功,图文并茂。先从大的方向讲解应该如何移植,要移植哪些,然后着重将移植过程中感到困惑的、容易忽略的地方进行了讲解,每一步关键点都有截屏。
回复 支持 反对

使用道具 举报

发表于 2020-10-30 20:04:27 | 显示全部楼层
xtaskcreat返回值不是任务句柄
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-15 13:13 , Processed in 0.032452 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表