打印
[STM32F1]

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

[复制链接]
837|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 | 只看该作者

申请的总共内存够不够?

使用特权

评论回复
5
songqian17| | 2019-9-13 13:08 | 只看该作者
将总的栈开大点试试

使用特权

评论回复
6
huwr| | 2019-9-13 13:10 | 只看该作者

我觉得会不会是优先级的高的任务太忙了, 怎么也没有释放出 CPU 去执行低优先级的任务了.

使用特权

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

使用特权

评论回复
8
dengdc| | 2019-9-13 13:17 | 只看该作者

使用特权

评论回复
9
tian111| | 2019-9-13 13:20 | 只看该作者

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


pendsv_handler 中断返回里设个断点

使用特权

评论回复
10
xxmmi| | 2019-9-13 13:23 | 只看该作者
单步跟踪

使用特权

评论回复
11
zwll| | 2019-9-13 13:26 | 只看该作者
怎么设置单步调试

使用特权

评论回复
12
llljh| | 2019-9-13 13:31 | 只看该作者
题主,你的问题最后怎么解决的?

使用特权

评论回复
13
R2D2| | 2019-9-13 13:32 | 只看该作者
用iar看任务状态。

使用特权

评论回复
14
houcs|  楼主 | 2019-9-13 13:34 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
15
labasi| | 2019-10-12 14:33 | 只看该作者
研究的好深入啊

使用特权

评论回复
16
paotangsan| | 2019-10-12 14:40 | 只看该作者
好多任务啊

使用特权

评论回复
17
renzheshengui| | 2019-10-12 14:48 | 只看该作者
还有优化的余地吗

使用特权

评论回复
18
zljiu| | 2019-10-13 11:42 | 只看该作者
好多任务啊

使用特权

评论回复
19
coshi| | 2019-10-13 11:56 | 只看该作者
还真么做过这么多任务一起跑的

使用特权

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

本版积分规则

743

主题

8382

帖子

5

粉丝