|
楼主 |
发表于 2012-2-15 09:10:49
|
显示全部楼层
#define RT_EOK 0 /* There is no error */
#define RT_ERROR 1 /* A generic error happens */
#define RT_ETIMEOUT 2 /* Timed out */
#define RT_EFULL 3 /* The resource is full */
#define RT_EEMPTY 4 /* The resource is empty */
#define RT_ENOMEM 5 /* No memory */
#define RT_ENOSYS 6 /* No system */
#define RT_EBUSY 7 /* Busy */
以上报错信息都是定义在“rtdef.h”利用串口可以查看RTT的报错信息。
我的问题主要是 To initialize device:e0 failed. The error code is -1。
1;首先在工程里查找 “e0”所在的位置。共两处:
即 eth_device_init(&(dm9000_device.parent), "e0");
eth_device_init(&(enc28j60_dev->parent), "e0");
我仅定义使用DM9000,所以重点查找DM9000的情况;
2;接下来我查找是在哪里报错所在地 “The error code is”查找到两处
rt_err_t rt_device_init_all()
rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ;
判断是初始化,重点查找谁调用rt_err_t rt_device_init_all(),同时设断点查看是否报错信息来源于
rt_err_t rt_device_init_all();并确认。
3;找到何处调用 rt_err_t rt_device_init_all(),查看其前面初始化什么设备,发现是rt_hw_dm9000_ini();
验证之前的e0这个信息,重点调试此段初始化过程。结合硬件发现是初始读取ID与DM9000不符合,发现是FSMC部分IO未初始化。
过程如此 非常同意四楼的说法及建议,并且经常对别人作出的问题进行耐心解答,再一次感谢你的奉献精神
【4楼】 aozima
积分:2106
派别:
等级:------
来自:张家界
回复【3楼】notebook
解决了
-----------------------------------------------------------------------
“解决了”对N年后搜到这个贴子的人来说基本没啥帮助。
应该把
“To initialize device:e0 failed. The error code is -1。”
的原因和解决方法解释清楚(主要是过程)。
甚至有可能看起来是解决了,但你的思路和作法可能并不是最优的。
看起来是帮助了别人,其实是帮了自己。
至于五楼的同志,你别动不动就鄙视,别人也有时间分配问题。 |
|