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

[复制链接]
4525|14
 楼主| yunyoushuaiqi 发表于 2017-2-20 15:18 | 显示全部楼层 |阅读模式
我使用的是STM32F103VET6的单片机,创建了13个任务,运行的时候发现总是有3个任务没法运行,随机屏蔽掉别的任务发现就可以运行了,最后发现最多只能跑10个任务,多了就会有不能运转的任务。每个人物都有系统延时释放控制权。贴出代码求大神指导一下。
 楼主| yunyoushuaiqi 发表于 2017-2-20 15:19 | 显示全部楼层
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;
}
 楼主| yunyoushuaiqi 发表于 2017-2-20 15:19 | 显示全部楼层
//*************创建开始任务**************************************
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();   


}
 楼主| yunyoushuaiqi 发表于 2017-2-20 15:21 | 显示全部楼层
百思不得其解
df_flying 发表于 2017-2-20 21:28 | 显示全部楼层
申请的总共内存够不够?将总的栈开大点试试
airwill 发表于 2017-2-20 22:34 | 显示全部楼层
我觉得会不会是优先级的高的任务太忙了, 怎么也没有释放出 CPU 去执行低优先级的任务了.
 楼主| yunyoushuaiqi 发表于 2017-2-21 10:31 | 显示全部楼层
还是内存的问题,哎。
icecut 发表于 2017-2-21 13:06 | 显示全部楼层
yjmwxwx 发表于 2017-2-21 13:29 | 显示全部楼层
前些日子学了3天UCOS , 你说超过10个就不能运行?  你看看内存空任务链表里面有多少组。 再看看任务链表里有没有这个任务


pendsv_handler 中断返回里设个断点
世界心 发表于 2017-2-21 15:33 | 显示全部楼层
看看你的系统配置里面定义了最多可以建立多少个任务,图中红圈那里
无标题.png

打赏榜单

yunyoushuaiqi 打赏了 1.00 元 2017-02-21
理由:感谢你的帮助,确实是这个原因

runningwzf 发表于 2017-2-21 16:57 | 显示全部楼层
单步跟踪
电子过客 发表于 2017-2-22 10:40 | 显示全部楼层

怎么设置单步调试
renzhijierzj 发表于 2018-3-2 13:59 | 显示全部楼层
题主,你的问题最后怎么解决的?
香水城 发表于 2018-3-2 14:47 | 显示全部楼层
renzhijierzj 发表于 2018-3-2 13:59
题主,你的问题最后怎么解决的?

见 10楼回复。
renzhijierzj 发表于 2018-3-2 15:57 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

185

帖子

12

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