打印
[STM32F1]

UCOS2创建任务超过10个部分任务不运行

[复制链接]
2592|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2021-9-7 18:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的是STM32F103VET6的单片机,创建了13个任务,运行的时候发现总是有3个任务没法运行,随机屏蔽掉别的任务发现就可以运行了,最后发现最多只能跑10个任务,多了就会有不能运转的任务。每个人物都有系统延时释放控制权

使用特权

评论回复
沙发
houcs|  楼主 | 2021-9-7 18:52 | 只看该作者

int main(void)
{
        Robot_Sys_Init();                                                                                  //机器人系统初始化
//****操作系统************************************
  OSInit();                                                                                            //UC-OS操作系统初始化
        Signal_SEM=OSSemCreate(0);                                                                         //建立信号量   
  OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);      //创建一个开始任务   
        OSStart();           //启动操作系统         
        return 0;
}

使用特权

评论回复
板凳
houcs|  楼主 | 2021-9-7 18:54 | 只看该作者
//*************创建开始任务**************************************
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;     //防止重启
OSStatInit();    //初始化统计任务
OS_ENTER_CRITICAL();
                OSTaskCreate(Timer_task,(void *)0,(OS_STK *)&Timer_TASK_STK[Timer_STK_SIZE-1],Timer_TASK_PRIO);  
                OSTaskCreate(Signal_task,(void *)0,(OS_STK *)&Signal_TASK_STK[Signal_STK_SIZE-1],Signal_TASK_PRIO);
                OSTaskCreate(led2_task,(void *)0,(OS_STK *)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);  
          OSTaskCreate(Receive_task,(void *)0,(OS_STK *)&Receive_TASK_STK[Receive_STK_SIZE-1],Receive_TASK_PRIO);        
          OSTaskCreate(Wave_task,(void *)0,(OS_STK *)&Wave_TASK_STK[Wave_STK_SIZE-1],Wave_TASK_PRIO);        
                OSTaskCreate(VL53L0X_task,(void *)0,(OS_STK *)&DISTANCE_TASK_STK[DISTANCE_STK_SIZE-1],DISTANCE_TASK_PRIO);   
    OSTaskCreate(key_task,(void *)0,(OS_STK *)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);               
                OSTaskCreate(led1_task,(void *)0,(OS_STK *)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
    OSTaskCreate(MPU6050_task,(void *)0,(OS_STK *)&MPU6050_TASK_STK[MPU6050_STK_SIZE-1],MPU6050_TASK_PRIO);        
                OSTaskCreate(AIR_task,(void *)0,(OS_STK *)&AIR_TASK_STK[AIR_STK_SIZE-1],AIR_TASK_PRIO);
                OSTaskCreate(Moto_task,(void *)0,(OS_STK *)&Moto_TASK_STK[Moto_STK_SIZE-1],Moto_TASK_PRIO);                    
                OSTaskCreate(Task_Manager_task,(void *)0,(OS_STK *)&Task_Manager_TASK_STK[Task_Manager_STK_SIZE-1],Task_Manager_TASK_PRIO);  
                OSTaskSuspend(START_TASK_PRIO);//挂起开始任务
OS_EXIT_CRITICAL();   


}

使用特权

评论回复
地板
zwll| | 2021-9-7 18:58 | 只看该作者
申请的总共内存够不够?

使用特权

评论回复
5
songqian17| | 2021-9-7 19:02 | 只看该作者
将总的栈开大点试试

使用特权

评论回复
6
supernan| | 2021-9-7 19:04 | 只看该作者
我觉得会不会是优先级的高的任务太忙了, 怎么也没有释放出 CPU 去执行低优先级的任务了.

使用特权

评论回复
7
houcs|  楼主 | 2021-9-7 19:06 | 只看该作者
还是内存的问题,哎。

使用特权

评论回复
8
dengdc| | 2021-9-7 19:08 | 只看该作者

使用特权

评论回复
9
tian111| | 2021-9-7 19:10 | 只看该作者
前些日子学了3天UCOS , 你说超过10个就不能运行?  你看看内存空任务链表里面有多少组。 再看看任务链表里有没有这个任务


pendsv_handler 中断返回里设个断点

使用特权

评论回复
10
xxmmi| | 2021-9-7 19:31 | 只看该作者
单步跟踪

使用特权

评论回复
11
liuzaiy| | 2021-9-7 19:37 | 只看该作者
怎么设置单步调试

使用特权

评论回复
12
kangzj| | 2021-9-7 19:47 | 只看该作者
题主,你的问题最后怎么解决的?

使用特权

评论回复
13
dengdc| | 2021-9-7 19:49 | 只看该作者
用iar看任务状态。

使用特权

评论回复
14
huangchui| | 2021-9-7 19:51 | 只看该作者
好多任务啊

使用特权

评论回复
15
zhanghqi| | 2021-9-7 19:56 | 只看该作者
还真么做过这么多任务一起跑的

使用特权

评论回复
16
houcs|  楼主 | 2021-9-7 20:00 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
17
nawu| | 2021-10-4 17:39 | 只看该作者
会不会是负担太重啦

使用特权

评论回复
18
qcliu| | 2021-10-4 17:46 | 只看该作者
不超过就没有问题吗

使用特权

评论回复
19
tfqi| | 2021-10-4 17:52 | 只看该作者
我觉得就是数量过多了

使用特权

评论回复
20
wiba| | 2021-10-4 17:54 | 只看该作者
内存不够用了吧

使用特权

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

本版积分规则

743

主题

8382

帖子

5

粉丝