OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4341|回复: 11

关于lwip移植的问题

[复制链接]

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
发表于 2018-1-25 12:03:23 | 显示全部楼层 |阅读模式
10金钱
之前裸机移植lwip成功了,后来打算在FreeRTOS上移植lwip就把freertos的源文件添加到了工程里,发现裸机配置PHY的延时函数用了systick,现在freertos也要用到systick,于是就把lwip源文件中的USE_DELAY的宏注释掉了,然后看源码是如果把USE_DELAY注释掉则配置PHY的程序中的延时函数就会被一个简单的循环计数的函数替代,但是现在调试程序发现一到延时函数_eth_delay_出 就会进入hardfault_handler,为什么一个简单的循环计数都会让系统进入硬件异常呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-26 01:44:23 | 显示全部楼层
你先进入函数,看看,不要执行过这个函数
回复

使用道具 举报

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
 楼主| 发表于 2018-1-26 09:08:07 | 显示全部楼层
正点原子 发表于 2018-1-26 01:44
你先进入函数,看看,不要执行过这个函数

调试的时候一进入这个循环计数的延时函数 就直接执行了hardfault_handler了 我自定义硬件异常函数串口会输出一个错误信息,感觉好怪啊,循环计数都会使程序进入硬件异常
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-27 00:40:23 | 显示全部楼层
邵壮 发表于 2018-1-26 09:08
调试的时候一进入这个循环计数的延时函数 就直接执行了hardfault_handler了 我自定义硬件异常函数串口会 ...

哪个循环?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
 楼主| 发表于 2018-1-29 10:50:01 | 显示全部楼层
ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这个循环就会进入硬件异常
static void ETH_Delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0;
  for(index = nCount; index != 0; index--)
  {
  }
}
回复

使用道具 举报

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
 楼主| 发表于 2018-1-29 10:50:20 | 显示全部楼层

ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这个循环就会进入硬件异常
static void ETH_Delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0;
  for(index = nCount; index != 0; index--)
  {
  }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-30 01:08:05 | 显示全部楼层
邵壮 发表于 2018-1-29 10:50
ST官方提供的lwip例程里定义了这样一个函数,用于在对ETH外设进行配置之后的延时,在我的工程里一进入这 ...

这个函数不应该导致异常才对,你确定是仿真跟踪到这个函数里面了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
 楼主| 发表于 2018-1-30 08:28:32 | 显示全部楼层
正点原子 发表于 2018-1-30 01:08
这个函数不应该导致异常才对,你确定是仿真跟踪到这个函数里面了?

真的是的,把断点打在for那里 一到这里再继续执行串口就输出硬件异常处理函数的错误信息
回复

使用道具 举报

0

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-29
在线时间
5 小时
发表于 2018-1-30 19:29:45 | 显示全部楼层
我怎么感觉,有点像线程竞争,,导致的系统蹦了,你用一个非线性安全的delay,有可能的
回复

使用道具 举报

14

主题

30

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2017-9-26
在线时间
27 小时
 楼主| 发表于 2018-1-31 08:38:21 | 显示全部楼层
writeing 发表于 2018-1-30 19:29
我怎么感觉,有点像线程竞争,,导致的系统蹦了,你用一个非线性安全的delay,有可能的

我还没调用FreeRTOS的API,只是调用了ETH外设的初始化函数,然后执行到这个延时函数就崩溃了
回复

使用道具 举报

0

主题

19

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-29
在线时间
5 小时
发表于 2018-1-31 17:06:39 | 显示全部楼层
邵壮 发表于 2018-1-31 08:38
我还没调用FreeRTOS的API,只是调用了ETH外设的初始化函数,然后执行到这个延时函数就崩溃了

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

话说这头两天了,还没解决?
回复

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2012-10-21
在线时间
11 小时
发表于 2018-2-26 17:30:26 | 显示全部楼层
是不是非法指向,导致硬件错误了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表