OpenEdv-开源电子网

标题: 关于lwip移植的问题 [打印本页]

作者: 邵壮    时间: 2018-1-25 12:03
标题: 关于lwip移植的问题
之前裸机移植lwip成功了,后来打算在FreeRTOS上移植lwip就把freertos的源文件添加到了工程里,发现裸机配置PHY的延时函数用了systick,现在freertos也要用到systick,于是就把lwip源文件中的USE_DELAY的宏注释掉了,然后看源码是如果把USE_DELAY注释掉则配置PHY的程序中的延时函数就会被一个简单的循环计数的函数替代,但是现在调试程序发现一到延时函数_eth_delay_出 就会进入hardfault_handler,为什么一个简单的循环计数都会让系统进入硬件异常呢?


作者: 正点原子    时间: 2018-1-26 01:44
你先进入函数,看看,不要执行过这个函数
作者: 邵壮    时间: 2018-1-26 09:08
正点原子 发表于 2018-1-26 01:44
你先进入函数,看看,不要执行过这个函数

调试的时候一进入这个循环计数的延时函数 就直接执行了hardfault_handler了 我自定义硬件异常函数串口会输出一个错误信息,感觉好怪啊,循环计数都会使程序进入硬件异常
作者: 正点原子    时间: 2018-1-27 00:40
邵壮 发表于 2018-1-26 09:08
调试的时候一进入这个循环计数的延时函数 就直接执行了hardfault_handler了 我自定义硬件异常函数串口会 ...

哪个循环?
作者: 邵壮    时间: 2018-1-29 10:50
ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这个循环就会进入硬件异常
static void ETH_Delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0;
  for(index = nCount; index != 0; index--)
  {
  }
}
作者: 邵壮    时间: 2018-1-29 10:50
正点原子 发表于 2018-1-27 00:40
哪个循环?

ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这个循环就会进入硬件异常
static void ETH_Delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0;
  for(index = nCount; index != 0; index--)
  {
  }
}
作者: 正点原子    时间: 2018-1-30 01:08
邵壮 发表于 2018-1-29 10:50
ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这 ...

这个函数不应该导致异常才对,你确定是仿真跟踪到这个函数里面了?
作者: 邵壮    时间: 2018-1-30 08:28
正点原子 发表于 2018-1-30 01:08
这个函数不应该导致异常才对,你确定是仿真跟踪到这个函数里面了?

真的是的,把断点打在for那里 一到这里再继续执行串口就输出硬件异常处理函数的错误信息
作者: writeing    时间: 2018-1-30 19:29
我怎么感觉,有点像线程竞争,,导致的系统蹦了,你用一个非线性安全的delay,有可能的
作者: 邵壮    时间: 2018-1-31 08:38
writeing 发表于 2018-1-30 19:29
我怎么感觉,有点像线程竞争,,导致的系统蹦了,你用一个非线性安全的delay,有可能的

我还没调用FreeRTOS的API,只是调用了ETH外设的初始化函数,然后执行到这个延时函数就崩溃了
作者: writeing    时间: 2018-1-31 17:06
邵壮 发表于 2018-1-31 08:38
我还没调用FreeRTOS的API,只是调用了ETH外设的初始化函数,然后执行到这个延时函数就崩溃了

但是你使用了FreeRTOS系统啊,从开机开始他的时钟就开始跑了,,,,,

话说这头两天了,还没解决?
作者: raywang    时间: 2018-2-26 17:30
是不是非法指向,导致硬件错误了




欢迎光临 OpenEdv-开源电子网 (http://openedv.com/) Powered by Discuz! X3.4