7395|9

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ucos中加入温度采集任务导致程序卡死 [复制链接]

 请教大神这怎么解决

static void task4(void *p_arg)
{
   float T;
   OS_CPU_SR  cpu_sr;
        while(1)
        {  
       
        OS_ENTER_CRITICAL();
                T=Get_Temperature();//开始采集温度
                OS_EXIT_CRITICAL();
                GUI_DispStringAt("The temperature is:",20,120);
          GUI_DispStringAt("      ",20,150);
         GUI_DispFloat(T, 7);
         GUI_DispString(" 'C");       
                OSTimeDly(2260);
        }
}

任务代码比较简单,但是只要把这个任务加入os,所有任务就跑一次就卡住了,如果不加ucos,裸机采集温度是正常的。我初学ucos,很多不知道的地方请大师们指点指点

最新回复

问题解决了就好,我也刚开始学UCOSii  详情 回复 发表于 2014-9-1 14:42
点赞 关注
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
补充
static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task1_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task2_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task3_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task4_stk[STARTUP_TASK_STK_SIZE];
static OS_STK task5_stk[STARTUP_TASK_STK_SIZE];
  static OS_STK task6_stk[STARTUP_TASK_STK_SIZE];
static void task1(void *p_arg);
static void task2(void *p_arg);
static void task3(void *p_arg);
static void task4(void *p_arg);
static void task5(void *p_arg);
  static void task6(void *p_arg);

static void startup_task(void *p_arg)
{
        systick_init();     /* Initialize the SysTick. */
#if (OS_TASK_STAT_EN > 0)
        OSStatInit();      /* Determine CPU capacity. */
#endif
/* TODO: create application tasks here */
//        RTC_Configuration();
//                RTC_Set(14,6,10,1,15,0);

         OSTaskCreate((void (*)(void *))task1, (void *)0,
              &task1_stk[STARTUP_TASK_STK_SIZE - 1],6);

         OSTaskCreate((void (*)(void *))task2, (void *)0,
              &task2_stk[STARTUP_TASK_STK_SIZE - 1], 7);
         OSTaskCreate((void (*)(void *))task3, (void *)0,
              &task3_stk[STARTUP_TASK_STK_SIZE - 1], 8);
         OSTaskCreate((void (*)(void *))task4, (void *)0,
              &task4_stk[STARTUP_TASK_STK_SIZE - 1], 9);
         OSTaskCreate((void (*)(void *))task5, (void *)0,
              &task5_stk[STARTUP_TASK_STK_SIZE - 1], 10);
//         OSTaskCreate((void (*)(void *))task6, (void *)0,
  //            &task6_stk[STARTUP_TASK_STK_SIZE - 1], 11);
     
        OSTaskDel(OS_PRIO_SELF);
}
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
内存不足,堆栈溢出,访问越界都有可能

点评

试了下把其他任务删除,只留了2个led闪烁的任务和温度采集的任务,这样还是会卡住,执行了一次就死在那里  详情 回复 发表于 2014-7-16 10:40
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

4
 
armcu 发表于 2014-7-16 08:38
内存不足,堆栈溢出,访问越界都有可能

试了下把其他任务删除,只留了2个led闪烁的任务和温度采集的任务,这样还是会卡住,执行了一次就死在那里

点评

看看堆栈有没有溢出  详情 回复 发表于 2014-7-16 11:07
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

5
 
20140715 发表于 2014-7-16 10:40
试了下把其他任务删除,只留了2个led闪烁的任务和温度采集的任务,这样还是会卡住,执行了一次就死在那里 ...

看看堆栈有没有溢出

点评

调试运行,发现死在空闲任务那里切换不出去,这怎么解  详情 回复 发表于 2014-7-16 18:12
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
armcu 发表于 2014-7-16 11:07
看看堆栈有没有溢出

调试运行,发现死在空闲任务那里切换不出去,这怎么解

点评

首先 你看看你的那个获取温度是不是把中断给变了,LED如果闪烁正常,说明中断么事。 检查你的堆栈,你先把堆栈设置足够大,程序中不要有局部大数组 查看这个任务在等待什么,是什么让他挂起 看看你的滴答是多长时  详情 回复 发表于 2014-7-17 11:37
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

7
 
20140715 发表于 2014-7-16 18:12
调试运行,发现死在空闲任务那里切换不出去,这怎么解

首先 你看看你的那个获取温度是不是把中断给变了,LED如果闪烁正常,说明中断么事。
检查你的堆栈,你先把堆栈设置足够大,程序中不要有局部大数组
查看这个任务在等待什么,是什么让他挂起
看看你的滴答是多长时间,你osdelay 那么多行不行啊  
 
 
 

回复

151

帖子

0

TA的资源

一粒金砂(中级)

8
 
把你的温度采集程序贴上来看看,是死在温度采集里面了吗
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢大家,我的问题已解决了,是delay_ms和系统滴答起了冲突导致
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

10
 
问题解决了就好,我也刚开始学UCOSii
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表