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

[复制链接]
1375|18
 楼主| houcs 发表于 2019-9-13 12:00 | 显示全部楼层 |阅读模式
我使用的是STM32F103VET6的单片机,创建了13个任务,运行的时候发现总是有3个任务没法运行,随机屏蔽掉别的任务发现就可以运行了,最后发现最多只能跑10个任务,多了就会有不能运转的任务。每个人物都有系统延时释放控制权
 楼主| houcs 发表于 2019-9-13 12:02 | 显示全部楼层

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 发表于 2019-9-13 13:02 | 显示全部楼层
//*************创建开始任务**************************************
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();   


}
chenho 发表于 2019-9-13 13:05 | 显示全部楼层

申请的总共内存够不够?
songqian17 发表于 2019-9-13 13:08 | 显示全部楼层
将总的栈开大点试试
huwr 发表于 2019-9-13 13:10 | 显示全部楼层

我觉得会不会是优先级的高的任务太忙了, 怎么也没有释放出 CPU 去执行低优先级的任务了.
 楼主| houcs 发表于 2019-9-13 13:14 | 显示全部楼层
还是内存的问题,哎。
dengdc 发表于 2019-9-13 13:17 | 显示全部楼层
tian111 发表于 2019-9-13 13:20 | 显示全部楼层

前些日子学了3天UCOS , 你说超过10个就不能运行?  你看看内存空任务链表里面有多少组。 再看看任务链表里有没有这个任务


pendsv_handler 中断返回里设个断点
xxmmi 发表于 2019-9-13 13:23 | 显示全部楼层
单步跟踪
zwll 发表于 2019-9-13 13:26 | 显示全部楼层
怎么设置单步调试
llljh 发表于 2019-9-13 13:31 | 显示全部楼层
题主,你的问题最后怎么解决的?
R2D2 发表于 2019-9-13 13:32 | 显示全部楼层
用iar看任务状态。
 楼主| houcs 发表于 2019-9-13 13:34 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽
labasi 发表于 2019-10-12 14:33 | 显示全部楼层
研究的好深入啊
paotangsan 发表于 2019-10-12 14:40 | 显示全部楼层
好多任务啊
renzheshengui 发表于 2019-10-12 14:48 | 显示全部楼层
还有优化的余地吗
zljiu 发表于 2019-10-13 11:42 | 显示全部楼层
好多任务啊
coshi 发表于 2019-10-13 11:56 | 显示全部楼层
还真么做过这么多任务一起跑的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部