OpenEdv-开源电子网

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

freertos在创建的任务里面再次创建任务发生程序不能运行

[复制链接]

5

主题

5

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-1-15
在线时间
9 小时
发表于 2021-1-15 14:56:00 | 显示全部楼层 |阅读模式
我创建了三个任务,逐级嵌套,但是发生程序移植不能进入最后一个任务中                    |-----任务A  
                    |               
开始任务----- |
                    |                  |--------任务C
                    |-----任务B---|
                                       |--------任务D


其中任务D是由外部中断触发的才会执行的,请问为啥程序一直在任务A里面,其中任务A和任务B的优先级为6,任务C的优先级为4,任务D的优先级为5,开始任务优先级
为3,开始执行完之后就删除开始开始:
void start_task(void *pvParameters)
{
        taskENTER_CRITICAL();                //进入临界区       
        xTaskCreate((TaskFunction_t)task_A,.........);
        xTaskCreate((TaskFunction_t)task_B,...................);                                               
        vTaskDelete(StartTask_Handler);                                //删除开始任务
        taskEXIT_CRITICAL();                                                                        //退出临界区
}

void task_A(void *pvParameters)
{
      while(1)
     {

    }
}

void task_B(void *pvParameters)
{
      xTaskCreate((TaskFunction_t)task_C,.........);
      xTaskCreate((TaskFunction_t)task_D,...................);                       
}



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

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
发表于 2021-1-27 16:33:17 | 显示全部楼层
我认为:
1、单单从你贴出来的代码来看,任务B没有循环语句;
2、假如你配置freeRTOS为抢占式调度,并且你操作系统的任务优先级数字越大表示优先级越高的话,
      那么任务A的优先级就是最大的。任务A没有挂起等待函数,所以任务A一直占有mcu运行权导致其它任务没法运行。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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