hbchf 发表于 2012-6-13 20:50:17

大家帮我分析下uCos-III下,如下代码和波形的关系!我很费解

任务代码如下:
static void SHT_task_core(void *p_arg)
{
OS_ERR p_err;

while(1)
   {
   
   shtxx_calc();        //计算温湿度
   GPIO_SetBits(GPIOC,GPIO_Pin_12);
   OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
   GPIO_ResetBits(GPIOC,GPIO_Pin_12);
   OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
   
   }
}
用示波器测试PC12的波形如下:奇怪的是波形高电平持续时间不是2s而是1.7S,低电平持续的时间也不是2s而是2.3s,总共用时4s,这是什么原因?

说明: shtxx_calc(); 子函数中读取温湿度传感器数值是采用模拟I2C办法实现的,其中有用到for()循环。
我试过去掉shtxx_calc(); 这个函数时,高低电平持续时间就对了,为什么?按照程序的顺序是PC12置“1”后持续2s,再置“0”后持续2s的。
望大伙帮我分析下!

www378660084 发表于 2012-6-14 08:53:07

calc->1->0 = 1->0->calc
___------__   ----______
低电平时间比高电平时间长时必然的,不过总时间为什么是4秒就不知道了.

hbchf 发表于 2012-6-15 11:25:15

www378660084 发表于 2012-6-14 08:53 static/image/common/back.gif
calc->1->0 = 1->0->calc
___------__   ----______
低电平时间比高电平时间长时必然的,不过总时间为什么 ...

为什么“低电平时间比高电平时间长时必然的”?帮我分析下!

xingliu 发表于 2012-6-15 11:27:37

这种用OSTimeDly是不正确吧,应该用定时器产生中断控制输出。

leo_advance 发表于 2012-6-28 16:06:28

while(1)
{   
   shtxx_calc(); // 此处是否花费了0.3秒
   GPIO_SetBits(GPIOC,GPIO_Pin_12);
   OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
   GPIO_ResetBits(GPIOC,GPIO_Pin_12);
   OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
}
低电平时间“OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);” + “shtxx_calc();”
高电平时间“OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);” - “shtxx_calc();”

electrlife 发表于 2012-6-28 16:15:09

应该,低电平是2.3S,高电平为2S才对!

gwnpeter 发表于 2012-6-30 22:39:31

{   

      GPIO_SetBits(GPIOC,GPIO_Pin_12);
      shtxx_calc();   //换个位置试试,这样就好了
      OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
   GPIO_ResetBits(GPIOC,GPIO_Pin_12);
      OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_NON_STRICT,&p_err);//2s延时
}
页: [1]
查看完整版本: 大家帮我分析下uCos-III下,如下代码和波形的关系!我很费解