打印

STM32在一个for循环中莫名奇妙的死机

[复制链接]
5674|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BitFu|  楼主 | 2012-11-4 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 BitFu 于 2012-11-4 21:37 编辑

void
uip_init(void)
{
  for(c = 0; c < UIP_LISTENPORTS; ++c) {
    uip_listenports[c]=0;
}
   
  for(c=0; c < UIP_CONNS; ++c) {
    uip_conns[c].tcpstateflags = UIP_CLOSED;
  }
#if UIP_ACTIVE_OPEN
  lastport = 1024;
#endif /* UIP_ACTIVE_OPEN */
#if UIP_UDP
  for(c = 0; c < UIP_UDP_CONNS; ++c) {
    uip_udp_conns[c].lport = 0;
  }
#endif /* UIP_UDP */
  
  /* IPv4 initialization. */
#if UIP_FIXEDADDR == 0
  /*  uip_hostaddr[0] = uip_hostaddr[1] = 0;*/
#endif /* UIP_FIXEDADDR */
}


为了测试此函数是否运行正常我在调用后观察一个LED
......................
    uip_init();
    while(1)
    {
                DelayMs(500);
                LED_FLASH;        
    }     
发现调用uip_init后CPU就死机了,但如果在for循环内加一些延时就可以看到LED闪烁,如下:
void
uip_init(void)
{
  for(c = 0; c < UIP_LISTENPORTS; ++c) {
    uip_listenports[c]=0;
        DelayUs(1);
  }
                                
  for(c=0; c < UIP_CONNS; ++c) {
    uip_conns[c].tcpstateflags = UIP_CLOSED;
        DelayUs(1);
  }

#if UIP_ACTIVE_OPEN
  lastport = 1024;
#endif /* UIP_ACTIVE_OPEN */

#if UIP_UDP
  for(c = 0; c < UIP_UDP_CONNS; ++c) {
    uip_udp_conns[c].lport = 0;
  }
#endif /* UIP_UDP */
  
  /* IPv4 initialization. */
#if UIP_FIXEDADDR == 0
  /*  uip_hostaddr[0] = uip_hostaddr[1] = 0;*/
#endif /* UIP_FIXEDADDR */
}

请教各位,这是什么原因?
是系统时钟太快了?我配置的是72MHz,STM32F103C8T6.
沙发
经常补钙| | 2012-11-5 11:32 | 只看该作者
检查看一下是否有数组溢出的现象。很多死机都是地址溢出了导致的。

使用特权

评论回复
板凳
IJK| | 2012-11-5 13:57 | 只看该作者
从症状不大看得出问题在哪里,建议连着仿真器调试一下看。

使用特权

评论回复
地板
BitFu|  楼主 | 2012-12-27 10:47 | 只看该作者
问题已解决,原来UIP使用全局变量做循环计数,这个在KEIL下就变成死循环了,计数全局变量加volatile属性后OK.

使用特权

评论回复
5
dld2| | 2012-12-27 11:10 | 只看该作者
BitFu 发表于 2012-12-27 10:47
问题已解决,原来UIP使用全局变量做循环计数,这个在KEIL下就变成死循环了,计数全局变量加volatile属性后O ...

不明觉厉

使用特权

评论回复
6
杨爱林林| | 2012-12-27 17:14 | 只看该作者
居然。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:芯艺工作室

194

主题

1053

帖子

3

粉丝