发新帖本帖赏金 1.00元(功能说明)我要提问
返回列表
打印
[STM32F1]

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

[复制链接]
3754|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我使用的是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 | 只看该作者
百思不得其解

使用特权

评论回复
5
df_flying| | 2017-2-20 21:28 | 只看该作者
申请的总共内存够不够?将总的栈开大点试试

使用特权

评论回复
6
airwill| | 2017-2-20 22:34 | 只看该作者
我觉得会不会是优先级的高的任务太忙了, 怎么也没有释放出 CPU 去执行低优先级的任务了.

使用特权

评论回复
7
yunyoushuaiqi|  楼主 | 2017-2-21 10:31 | 只看该作者
还是内存的问题,哎。

使用特权

评论回复
8
icecut| | 2017-2-21 13:06 | 只看该作者

使用特权

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


pendsv_handler 中断返回里设个断点

使用特权

评论回复
10
世界心| | 2017-2-21 15:33 | 只看该作者
看看你的系统配置里面定义了最多可以建立多少个任务,图中红圈那里

无标题.png (486.81 KB )

无标题.png

使用特权

评论回复

打赏榜单

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

11
runningwzf| | 2017-2-21 16:57 | 只看该作者
单步跟踪

使用特权

评论回复
12
电子过客| | 2017-2-22 10:40 | 只看该作者

怎么设置单步调试

使用特权

评论回复
13
renzhijierzj| | 2018-3-2 13:59 | 只看该作者
题主,你的问题最后怎么解决的?

使用特权

评论回复
14
香水城| | 2018-3-2 14:47 | 只看该作者
renzhijierzj 发表于 2018-3-2 13:59
题主,你的问题最后怎么解决的?

见 10楼回复。

使用特权

评论回复
15
renzhijierzj| | 2018-3-2 15:57 | 只看该作者

谢谢

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

185

帖子

12

粉丝