初级会员 
  
	- 积分
 - 137
 
        - 金钱
 - 137 
 
       - 注册时间
 - 2014-8-11
 
      - 在线时间
 - 3 小时
 
 
 
 | 
 
 
发表于 2017-7-17 11:39:16
|
显示全部楼层
 
 
 
 本帖最后由 xinshou 于 2017-7-17 17:25 编辑  
 
为了满足misra规范,我将代码改成了: 
[mw_shl_code=c,true]void  delay_ms(u16 nms) 
{ 
         u8 t; 
 
         if( nms > 65U ) 
         { 
                  t = (u8)(nms/65U);          /* if nms=16640, then t=256, U8 max=255 */ 
 
                  t--; 
                  while( t > 0U) 
                  { 
                          delay_us(65000);      /* U16 max= 65535 */ 
                          t--; 
                  } 
 
                  nms = nms%65U; 
         } 
 
         delay_us(nms*1000U); 
}[/mw_shl_code] 
 
不知道执行的延时的准确性 如何? 
 
此外, 函数void delay_us(u16 nus)  的注释: 
 /*    延时nus 
    延时时间=(fac_us*4+4)*nus*(T) 
    其中,T为CPU运行频率(Mhz)的倒数,单位为us. 
    ...... 
 
    这里的 “单位为us” 是指函数的参数的单位是微秒还是CPU的运行频率的倒数? 
 
承蒙各位大神指教! 
 
 |   
 
 
 
 |