新手入门 
 
	- 积分
 - 5
 
        - 金钱
 - 5 
 
       - 注册时间
 - 2017-8-14
 
      - 在线时间
 - 0 小时
 
 
 
 | 
 
1金钱 
在我参与的一个项目里面遇到个奇葩问题:网口初始化时,引脚拉低之后会进行250ms的延时如下: 
        GPIO_ResetBits(ETH_RST_GPIO_M, ETH_RST_M);         //低电平复位W5500 
        Delay(250); 
        GPIO_SetBits(ETH_RST_GPIO_M, ETH_RST_M);                /* Restore W5500 */          
        Delay(50); 
这个Delay函数如下: 
void Delay( u32 ms){ 
        u32 start;         
        start = sysTime; 
        while( (sysTime - start) < ms){ 
        } 
} 
 
当延时为250时,延时1000us delay_10us(100)实测是937.5us,但是把Delay(250)调为Delay(300)时,实测1000us延时得到的结果是1009.375us,结果相差很大。delay_10us函数如下 
void delay_10us(vu32 count) 
{ 
    vu32 i; 
    vu16 j; 
    for(i = 0; i < count; i++) 
    {  
        for(j = 0; j < 48; j++) 
        {                         
        } 
    } 
} 
网口的初始化延时应该完全不会影响别的东西,然而它做到了,而且影响的还不止delay_10us函数,还影响了我们项目的另外一个功能。有个朋友说是Delay函数调用了系统时钟引起的,不知道是不是这个问题? 
然后我的设备初始化是在系统滴答中断(SysTick_Handler)初始化之前的: 
    Peripheral_Init();        /* Initialize driver module */ 
 
        caculate_record_cnt_in_flash();         
        CPU_Init(); 
 
    cpu_clk_freq = BSP_CPU_ClkFreq();                           /* Determine SysTick reference freq.                    */ 
    cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;        /* Determine nbr SysTick increments                     */ 
    OS_CPU_SysTickInit(cnts);   
不知道这个网口初始化延时时间为什么影响其它的东西,希望各位大大给点思路,求解求解,谢谢啦 
 
 
 |   
 
 
 
 
 
 |