OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4802|回复: 2

为什么我用不了FreeRTOS动态创建任务,一调用相关函数就什么反应都没了,动态创建的宏定义也是设置成1的。

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2022-6-19
在线时间
3 小时
发表于 2022-8-23 01:04:36 | 显示全部楼层 |阅读模式
2金钱
#include "system.h"
#include "SysTick.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
void PWM_GPIO(void);     ////设置PB0推挽输出,用以检测看看灯亮不亮
/*********像这样我把main函数有关RTOS的API全都注释掉,至少能把灯点亮,串口也能发送111. *******************************************************************************************
**********但是如果我把main函数里有关RTOS的API的注释打开,那么灯也点不亮,串口也没数据,是压根没运行到main函数吗,(对了,我用静态创建任务的话是能够正常创建的,就是动态创建会这样)*****
***********************************************求助大佬求助大佬,是我遗漏了什么没设置好的参数吗****************************************************************************/

//任务优先级
#define START_TASK_PRIO                1
//任务堆栈大小       
#define START_STK_SIZE                 128  
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);

//任务优先级
#define LED1_TASK_PRIO                2
//任务堆栈大小       
#define LED1_STK_SIZE                 50  
//任务句柄
TaskHandle_t LED1Task_Handler;
//任务函数
void led1_task(void *pvParameters);


/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
        SysTick_Init(72);
        PWM_GPIO();
        USART_Configuration();
        sendstring(USART1,"111");
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
//       
//        //创建开始任务
//    xTaskCreate((TaskFunction_t )start_task,            //任务函数
//                (const char*    )"start_task",          //任务名称
//                (uint16_t       )START_STK_SIZE,        //任务堆栈大小
//                (void*          )NULL,                  //传递给任务函数的参数
//                (UBaseType_t    )START_TASK_PRIO,       //任务优先级
//                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄              
//    vTaskStartScheduler();          //开启任务调度
}

//开始任务任务函数
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();           //进入临界区

    //创建LED1任务
    xTaskCreate((TaskFunction_t )led1_task,     
                (const char*    )"led1_task",   
                (uint16_t       )LED1_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )LED1_TASK_PRIO,
                (TaskHandle_t*  )&LED1Task_Handler);
                               
    vTaskDelete(StartTask_Handler); //删除开始任务
    taskEXIT_CRITICAL();            //退出临界区
}

//LED1任务函数
void led1_task(void *pvParameters)
{
    while(1)
    {
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
        sendstring(USART1,"111");
        vTaskDelay(800);
    }
}

void PWM_GPIO(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

163

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2021-12-14
在线时间
70 小时
发表于 2022-8-23 11:29:41 | 显示全部楼层
可以把FreeRTOSConfig.h跟你的工程的替换一下   排除看看是不是API没开的原因
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2022-6-19
在线时间
3 小时
 楼主| 发表于 2022-8-23 11:55:00 | 显示全部楼层
F4PigLet 发表于 2022-8-23 11:29
可以把FreeRTOSConfig.h跟你的工程的替换一下   排除看看是不是API没开的原因

还是不行,这FreeRTOSConfig.h文件我是直接搬的野火的例程的也不行
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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