硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3665|回复: 10
收起左侧

[μCOS-III] UCOSIII中创建DHT11任务显示温湿度的问题

[复制链接]

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2016-8-22 09:57:37 | 显示全部楼层 |阅读模式
在UCOSIII中,当只有一个读取DHT11值任务执行的时候可以正常读取,当加入一个LED闪烁任务的时候,读取DHT11的值就是一个定值(加入了禁止任务调度也不不行,就只有读取DHT11一个任务执行时才可以正常显示),请问这是什么原因? 谢谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-8-22 10:02:36 | 显示全部楼层
把两个任务的代码,和创建都贴出来。
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 10:25:27 | 显示全部楼层

回 eric2013 的帖子

  1. #include "led.h"
  2. #include "beep.h"
  3. #include "delay.h"
  4. #include "key.h"
  5. #include "sys.h"
  6. #include "ILI93xx.h"
  7. #include "usart.h"     
  8. #include "24cxx.h"
  9. #include "flash.h"
  10. #include "touch.h"
  11. #include "sram.h"
  12. #include "timer.h"
  13. #include "sdio_sdcard.h"
  14. #include "malloc.h"
  15. #include "GUI.h"
  16. #include "ff.h"
  17. #include "exfuns.h"
  18. #include "w25qxx.h"
  19. #include "includes.h"
  20. #include "dht11.h"
  21. /************************************************
  22. UCOSIIIÖDòÔÏÂóÅÏè¼¶óû§3ìDò2»Äüê1óã¬ALIENTEK
  23. ½«ÕaD©óÅÏè¼¶·ÖÅ䏸áËUCOSIIIμÄ5¸öÏμí3Äú2¿èÎÎñ
  24. óÅÏè¼¶0£oÖD¶Ï·tÎñ·tÎñ1üàíèÎÎñ OS_IntQTask()
  25. óÅÏè¼¶1£oê±Öó½úÅÄèÎÎñ OS_TickTask()
  26. óÅÏè¼¶2£o¶¨ê±èÎÎñ OS_TmrTask()
  27. óÅÏè¼¶OS_CFG_PRIO_MAX-2£oí3¼ÆèÎÎñ OS_StatTask()
  28. óÅÏè¼¶OS_CFG_PRIO_MAX-1£o¿ÕÏDèÎÎñ OS_IdleTask()
  29. ************************************************/
  30. //èÎÎñóÅÏè¼¶
  31. #define START_TASK_PRIO                3
  32. //èÎÎñ¶ÑÕ»′óD¡   
  33. #define START_STK_SIZE                 128
  34. //èÎÎñ¿ØÖÆ¿é
  35. OS_TCB StartTaskTCB;
  36. //èÎÎñ¶ÑÕ»   
  37. CPU_STK START_TASK_STK[START_STK_SIZE];
  38. //èÎÎñoˉêy
  39. void start_task(void *p_arg);
  40. //DHT11èÎÎñ
  41. //éèÖÃèÎÎñóÅÏè¼¶
  42. #define DHT11_TASK_PRIO                 4
  43. //èÎÎñ¶ÑÕ»′óD¡
  44. #define DHT11_STK_SIZE                128
  45. //èÎÎñ¿ØÖÆ¿é
  46. OS_TCB Dht11TaskTCB;
  47. //èÎÎñ¶ÑÕ»
  48. CPU_STK DHT11_TASK_STK[DHT11_STK_SIZE];
  49. //led0èÎÎñ
  50. void dht11_task(void *p_arg);
  51. //LED0èÎÎñ
  52. //éèÖÃèÎÎñóÅÏè¼¶
  53. #define LED0_TASK_PRIO                 5
  54. //èÎÎñ¶ÑÕ»′óD¡
  55. #define LED0_STK_SIZE                128
  56. //èÎÎñ¿ØÖÆ¿é
  57. OS_TCB Led0TaskTCB;
  58. //èÎÎñ¶ÑÕ»
  59. CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
  60. //led0èÎÎñ
  61. void led0_task(void *p_arg);
  62. int main(void)
  63. {   
  64.     OS_ERR err;
  65.     CPU_SR_ALLOC();
  66.    
  67.     delay_init();            //Ñóê±oˉêy3õê¼»ˉ      
  68.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
  69.     uart_init(115200);         //′®¿ú3õê¼»ˉÎa115200
  70.      LED_Init();                //LED¶Ë¿ú3õê¼»ˉ
  71.     TFTLCD_Init();            //LCD3õê¼»ˉ   
  72.     KEY_Init();                 //°′¼ü3õê¼»ˉ
  73.     BEEP_Init();            //3õê¼»ˉ·äÃùÆ÷
  74.     DHT11_Init();     //3õê¼»ˉDHT11
  75.     FSMC_SRAM_Init();        //3õê¼»ˉSRAM
  76.     my_mem_init(SRAMIN);     //3õê¼»ˉÄú2¿Äú′æ3Ø
  77.    
  78.     exfuns_init();            //ÎafatfsÎļtÏμí3·ÖÅäÄú′æ
  79.     f_mount(fs[0],"0:",1);    //1òÔØSD¿¨
  80.     TP_Init();                //′¥ÃtÆá3õê¼»ˉ
  81.    
  82.     OSInit(&err);            //3õê¼»ˉUCOSIII
  83.     OS_CRITICAL_ENTER();    //½øèëáù½çÇø
  84.     //′′½¨¿aê¼èÎÎñ
  85.     OSTaskCreate((OS_TCB     * )&StartTaskTCB,        //èÎÎñ¿ØÖÆ¿é
  86.                  (CPU_CHAR    * )"start task",         //èÎÎñÃû×Ö
  87.                  (OS_TASK_PTR )start_task,             //èÎÎñoˉêy
  88.                  (void        * )0,                    //′«μY¸øèÎÎñoˉêyμÄ2Îêy
  89.                  (OS_PRIO      )START_TASK_PRIO,     //èÎÎñóÅÏè¼¶
  90.                  (CPU_STK   * )&START_TASK_STK[0],    //èÎÎñ¶ÑÕ»»ùμØÖ·
  91.                  (CPU_STK_SIZE)START_STK_SIZE/10,    //èÎÎñ¶ÑÕ»éî¶èÏTλ
  92.                  (CPU_STK_SIZE)START_STK_SIZE,        //èÎÎñ¶ÑÕ»′óD¡
  93.                  (OS_MSG_QTY  )0,                    //èÎÎñÄú2¿ÏûÏ¢¶óáDÄü1»½óêÕμÄ×î′óÏûÏ¢êyÄ¿,Îa0ê±½ûÖ1½óêÕÏûÏ¢
  94.                  (OS_TICK      )0,                    //μ±ê1Äüê±¼äÆ¬ÂÖ×aê±μÄê±¼äÆ¬3¤¶è£¬Îa0ê±ÎaĬèÏ3¤¶è£¬
  95.                  (void       * )0,                    //óû§213äμÄ′æ′¢Çø
  96.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //èÎÎñÑ¡Ïî
  97.                  (OS_ERR     * )&err);                //′æ·Å¸Ãoˉêy′íÎóê±μÄ·μ»ØÖμ
  98.     OS_CRITICAL_EXIT();    //íË3öáù½çÇø     
  99.     OSStart(&err);  //¿aÆôUCOSIII
  100.     while(1);
  101. }
  102. //¿aê¼èÎÎñoˉêy
  103. void start_task(void *p_arg)
  104. {
  105.     OS_ERR err;
  106.     CPU_SR_ALLOC();
  107.     p_arg = p_arg;
  108.     CPU_Init();
  109. #if OS_CFG_STAT_TASK_EN > 0u
  110.    OSStatTaskCPUUsageInit(&err);      //í3¼ÆèÎÎñ               
  111. #endif
  112.    
  113. #ifdef CPU_CFG_INT_DIS_MEAS_EN        //èç1ûê1ÄüáË2aá¿ÖD¶Ï1رÕê±¼ä
  114.     CPU_IntDisMeasMaxCurReset();   
  115. #endif
  116. #if    OS_CFG_SCHED_ROUND_ROBIN_EN  //μ±ê1óÃê±¼äÆ¬ÂÖ×aμÄê±oò
  117.      //ê1Äüê±¼äÆ¬ÂÖ×aμ÷¶è1|Äü,ê±¼äÆ¬3¤¶èÎa1¸öÏμí3ê±Öó½úÅÄ£¬¼è1*5=5ms
  118.     OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  119. #endif        
  120.    
  121.     OS_CRITICAL_ENTER();    //½øèëáù½çÇø
  122.     //DHT11èÎÎñ
  123.     OSTaskCreate((OS_TCB*     )&Dht11TaskTCB,        
  124.                  (CPU_CHAR*   )"dht11 task",         
  125.                  (OS_TASK_PTR )dht11_task,            
  126.                  (void*       )0,                    
  127.                  (OS_PRIO      )DHT11_TASK_PRIO,     
  128.                  (CPU_STK*    )&DHT11_TASK_STK[0],   
  129.                  (CPU_STK_SIZE)DHT11_STK_SIZE/10,   
  130.                  (CPU_STK_SIZE)DHT11_STK_SIZE,        
  131.                  (OS_MSG_QTY  )0,                    
  132.                  (OS_TICK      )0,                     
  133.                  (void*       )0,                    
  134.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  135.                  (OS_ERR*     )&err);                                 
  136.     //LED0èÎÎñ
  137.     OSTaskCreate((OS_TCB*     )&Led0TaskTCB,        
  138.                  (CPU_CHAR*   )"Led0 task",         
  139.                  (OS_TASK_PTR )led0_task,            
  140.                  (void*       )0,                    
  141.                  (OS_PRIO      )LED0_TASK_PRIO,     
  142.                  (CPU_STK*    )&LED0_TASK_STK[0],   
  143.                  (CPU_STK_SIZE)LED0_STK_SIZE/10,   
  144.                  (CPU_STK_SIZE)LED0_STK_SIZE,        
  145.                  (OS_MSG_QTY  )0,                    
  146.                  (OS_TICK      )0,                     
  147.                  (void*       )0,                    
  148.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  149.                  (OS_ERR*     )&err);         
  150.     OS_CRITICAL_EXIT();    //íË3öáù½çÇø
  151.     OSTaskDel((OS_TCB*)0,&err);    //é¾3ystart_taskèÎÎñ×Ôéí
  152. }
  153. //DHT11èÎÎñ
  154. void dht11_task(void *p_arg)
  155. {
  156.     u8 temperature,humidity;
  157.     OS_ERR err;
  158. //    CPU_SR_ALLOC();
  159.   p_arg = p_arg;   
  160.     POINT_COLOR = BLACK;
  161.     while(1)
  162.     {
  163. //        OS_CRITICAL_ENTER();    //½øèëáù½çÇø
  164.         OSSchedLock(&err);
  165.         DHT11_Read_Data(&temperature,&humidity);    //¶áè¡ÎÂêa¶èÖμ        
  166.         
  167.         
  168.         LCD_ShowNum(70,150,temperature,2,16);    //ÏÔê¾ÎÂ¶è                  
  169.         LCD_ShowNum(70,170,humidity,2,16);        //ÏÔê¾êa¶è
  170.         OSSchedUnlock(&err);   
  171.             OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //Ñóê±1s
  172.         
  173. //        OS_CRITICAL_EXIT();    //íË3öáù½çÇø   
  174.         
  175.    
  176.         
  177.     }
  178. }
  179. //LED0èÎÎñ
  180. void led0_task(void *p_arg)
  181. {
  182.     OS_ERR err;
  183.     while(1)
  184.     {
  185.         LED0 = !LED0;
  186.         OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//Ñóê±500ms
  187.     }
  188. }
复制代码
eric2013:
把两个任务的代码,和创建都贴出来。
你们的程序只有UCOSII入门实验和出厂附带的综合测试,没有UCOSIII和EMWIN结合的。基础打得不好,所以弄起来较费劲。可以弄个其他的传感器,18B20[s:130]
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 10:26:47 | 显示全部楼层

回 eric2013 的帖子

eric2013:把两个任务的代码,和创建都贴出来。 (2016-08-22 10:02) 
DHT11的程序是你们的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-8-22 10:33:41 | 显示全部楼层

回 坚持再坚持 的帖子

坚持再坚持:DHT11的程序是你们的 (2016-08-22 10:26)
1. 首先,你这个帖子中说是我们的板子,链接 。从你帖子的程序看,你的这个程序配套的板子明显不是我们的,就是用的我们,修改的工作量太大了,你现在DHT11显示都还没有搞定,修改这些,你暂时还搞不定。我的猜测对不。
2. 你的DHT11程序也不是我们的,我们的函数命名不会是这个样子,我们的是DHT11_ReadData。
3. 复制粘贴时汉字的乱码可以安装这个字体解决,https://forum.anfulai.cn/forum.php?mod=viewthread&tid=2293
4. 创建的任务也没有问题的,理论是可以正确显示的。
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 10:42:11 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 首先,你这个帖子中说是我们的板子,链接 。从你帖子的程序看,你的这个程序配套的板子明显不是我们的,就是用的我们,修改的工作量太大了,你现在DHT11显示都还没有搞定,修改这些,你暂时还搞不定。我的猜测对不。
2. 你的DHT11程序也不是我们的,我们的函数命名不会是这个 .. (2016-08-22 10:33) 
把你们和另一个论坛混淆啦,[s:129]。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-8-22 10:43:19 | 显示全部楼层

回 坚持再坚持 的帖子

坚持再坚持:把你们和另一个论坛混淆啦,[s:129]。 (2016-08-22 10:42) 
没事的,[s:142]
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 10:44:03 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 首先,你这个帖子中说是我们的板子,链接 。从你帖子的程序看,你的这个程序配套的板子明显不是我们的,就是用的我们,修改的工作量太大了,你现在DHT11显示都还没有搞定,修改这些,你暂时还搞不定。我的猜测对不。
2. 你的DHT11程序也不是我们的,我们的函数命名不会是这个 .. (2016-08-22 10:33) 
一直认为你们这个论坛是那个板子的
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 10:57:37 | 显示全部楼层

回 坚持再坚持 的帖子

坚持再坚持:把你们和另一个论坛混淆啦,[s:129]。 (2016-08-22 10:42) 
我看了一下你们的板子是F4的,请问有没有基于F1的UCOS和EMWIN读取外部数值进行显示的。
一般情况下这种程序找人写会不会太贵啊?http://www.openedv.com/thread-79165-1-1.html
网址里有要设计的大概说明。
谢谢啊
回复

使用道具 举报

39

主题

127

回帖

244

积分

高级会员

积分
244
 楼主| 发表于 2016-8-22 11:01:18 | 显示全部楼层

回 eric2013 的帖子

eric2013:没事的,[s:142] (2016-08-22 10:43) 
我看了一下你们的板子是F4的,请问有没有基于F1的UCOS和EMWIN读取外部数值进行显示的。
一般情况下这种程序找人写会不会太贵啊?http://www.openedv.com/thread-79165-1-1.html
网址里有要设计的大概说明。
谢谢啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-8-23 10:01:06 | 显示全部楼层

回 坚持再坚持 的帖子

坚持再坚持:我看了一下你们的板子是F4的,请问有没有基于F1的UCOS和EMWIN读取外部数值进行显示的。
一般情况下这种程序找人写会不会太贵啊?http://www.openedv.com/thread-79165-1-1.html
网址里有要设计的大概说明。
谢谢啊 (2016-08-22 11:01) 
好弄,就用uCOS+emWin就行,使用中有什么问题了,发出来探讨。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 23:52 , Processed in 0.055524 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表