Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
k_server
这家伙很懒,什么也没写!
注册于 12年前
回答
31
文章
0
关注者
0
关注TA
向TA提问
发私信
TA的回答
问
请教一下网卡注册的问题
发布于5年前
>你看看是不是你设备网卡驱动自动初始化等级高于 lwip 自动初始化等级,导致 eth_netif_device_init 函数未 ... 之前没有开组件自动初始化的宏,今天看了下组件的自动初始化里面好像也没有把网卡驱动给加上去,所以就不敢确定自己加的对不对。 而且STM32F207的默认工程,是没开组件自动初始话,自己即使打开了相关宏定义,发现也有其它问题:components里面rtthread_startup()里面没有对heap的初始化。后面找了个默认开启了组件自动初始化的工程(不是207的工程),对比发现开了组件自动初始话的工程里面heap的初始化被移到了rt_hw_board_init()里面。 所以目前还是暂时采用默认的(未开启组件自动初始话),用的我上面的方式注册了网卡,然后自己添加下面几个组件的初始话: ```c #ifdef RT_USING_FINSH /* init finsh */ finsh_system_init(); #endif #ifdef RT_USING_ULOG ulog_console_backend_init(); #endif #ifdef RT_USING_SAL sal_init(); #endif rt_work_sys_workqueue_initial(); ``` 添加了examples里面的tcpserver到工程,通过msh启动TCP server,log记录如下,但是TCP server却怎么都连不上。是不是还是漏了什么初始化? ``` \ | / - RT - Thread Operating System \ | / - RT - Thread Operating System / | \ 3.1.3 build Aug 15 2019 2006 - 2019 Copyright by rt-thread team found part[0], begin: 4194304, size: 3.652GB SD Card init OK File System initialized! ETH FullDuplex ETH speed 100M BIST pass lwIP-2.0.2 initialized! TCP/IP initialized! rtc is not configured please configure with set_date and set_time 01-01 00:00:00 I/sal.skt init: Socket Abstraction Layer initialize success. msh />tcpserver -p 10011 01-01 00:00:17 I/TCP tcp_serv: TCPServer Waiting for client on port 10011... ``` 后面有添加了mqtt组件测试(都是通过Env生成的工程),但是也总是过不去,log如下: ``` 01-01 00:00:51 D/mqtt.sample mqtt0: inter mqtt_connect_callback! 01-01 00:00:51 D/mqtt mqtt0: ipv4 address port: 1883 01-01 00:00:51 D/mqtt mqtt0: HOST = 'pq6ytz5.mqtt.iot.gz.baidubce.com' msh /> msh /> 01-01 00:00:58 E/mqtt mqtt0: getaddrinfo err: 202 'pq6ytz5.mqtt.iot.gz.baidubce.com' 01-01 00:00:58 E/mqtt mqtt0: resolve uri err 01-01 00:00:58 E/mqtt mqtt0: Net connect error(-1). 01-01 00:00:58 D/mqtt.sample mqtt0: inter mqtt_offline_callback! ``` 这个HOST是我自己注册的百度云的,肯定是可以用的
问
请教一下网卡注册的问题
发布于5年前
说明文档里面是这么说的: --- 每一个网卡在初始化完成之后,需要调用网卡注册函数注册网卡到网卡列表中,注册网卡的接口如下所示:int netdev_register(struct netdev *netdev, const char *name, void *user_data);[table=98%,rgb(252, 252, 252)] [td][tr][td]**参数**[/td][td]**描述**[/td][/tr] [tr][td]netdev[/td][td]网卡对象[/td][/tr] [tr][td]name[/td][td]网卡名称[/td][/tr] [tr][td]user_data[/td][td]用户使用数据[/td][/tr] [tr][td]**返回**[/td][td]**——**[/td][/tr] [tr][td]0[/td][td]网卡注册成功[/td][/tr] [tr][td]-1[/td][td]网卡注册失败[/td][/tr] [/table]该函数不需要在用户层调用,一般为网卡驱动初始化完成之后自动调用,如 esp8266 网卡的注册在 esp8266 设备网络初始化之后自动完成。 --- 开始以为系统会自动注册的,结果发现没有;后面我在以下代码添加了一句,网卡就注册上了,不知道这样添加有潜在的问题没: ```c /* Keep old drivers compatible in RT-Thread */ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_uint16_t flags) { struct netif* netif; netif = (struct netif*) rt_malloc (sizeof(struct netif)); if (netif == RT_NULL) { rt_kprintf("malloc netif failed\n"); return -RT_ERROR; } rt_memset(netif, 0, sizeof(struct netif)); /* set netif */ dev->netif = netif; /* device flags, which will be set to netif flags when initializing */ dev->flags = flags; /* link changed status of device */ dev->link_changed = 0x00; dev->parent.type = RT_Device_Class_NetIf; /* register to RT-Thread device manager */ rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR); rt_sem_init(&(dev->tx_ack), name, 0, RT_IPC_FLAG_FIFO); /* set name */ netif->name[0] = name[0]; netif->name[1] = name[1]; /* set hw address to 6 */ netif->hwaddr_len = 6; /* maximum transfer unit */ netif->mtu = ETHERNET_MTU; /* get hardware MAC address */ rt_device_control(&(dev->parent), NIOCTL_GADDR, netif->hwaddr); /* set output */ netif->output = etharp_output; netif->linkoutput = ethernetif_linkoutput; #if LWIP_NETIF_HOSTNAME /* Initialize interface hostname */ netif->hostname = "rtthread"; #endif /* LWIP_NETIF_HOSTNAME */ /* if tcp thread has been started up, we add this netif to the system */ if (rt_thread_find("tcpip") != RT_NULL) { ip4_addr_t ipaddr, netmask, gw; #if !LWIP_DHCP ipaddr.addr = inet_addr(RT_LWIP_IPADDR); gw.addr = inet_addr(RT_LWIP_GWADDR); netmask.addr = inet_addr(RT_LWIP_MSKADDR); #else IP4_ADDR(&ipaddr, 0, 0, 0, 0); IP4_ADDR(&gw, 0, 0, 0, 0); IP4_ADDR(&netmask, 0, 0, 0, 0); #endif netifapi_netif_add(netif, &ipaddr, &netmask, &gw, dev, eth_netif_device_init, tcpip_input); } #ifdef RT_USING_NETDEV /* network interface device flags synchronize */ netdev_flags_sync(netif); eth_netif_device_init(netif); #endif /* RT_USING_NETDEV */ return RT_EOK; } ``` `“eth_netif_device_init”`这个函数,我看没有调用到,里面就有注册的部分,我就直接在这里加上了。 麻烦看看这样合适不?
问
RT-Thread_3.0.3(bsp为stm32f20x),系统内存占用问题
发布于7年前
>相同,开了文件系统和lwip >并且文件系统没有使用长文件名 --- 是lwip组件占用了40多K的内存,我看rtt_3.0.3用的是lwip-2.0.2,原来的版本用的是lwip1.4.1。 请教下,这2个版本怎么这么大的差距呢?
问
RT-Thread_3.0.3(bsp为stm32f20x),系统内存占用问题
发布于7年前
>用了组件相同吗?仔细对比一下配置 --- 相同,开了文件系统和lwip 并且文件系统没有使用长文件名
问
rt_free函数卡死的问题
发布于7年前
找到问题点了,问题不是出在这里,谢谢!
问
rt_free函数卡死的问题
发布于7年前
>代码请加标签 > >pBuff的定义是什么? --- pBff的定义: ``` char *pBuff = RT_NULL; ``` 卡死的问题不是必出,偶尔出现一次
问
有没有LWIP在DHCP和静态IP之间动态切换的参考啊
发布于7年前
>启动前判断下网卡配置,再根据 dhcp enable 状态决定 --- 谢谢你的分享! 顺便在请教几个问题: 你判断!dhcp_enable,那段程序,是只根据设置调用一次,还是有其它情况自动运行到这一块,因为我之前也是这么处理的,发现一次IP变成DHCP分配的了。 我之前这么处理的时候,发现系统刚启动的时候,如果不等DHCP完成(因为RTT的宏定义开了DHCP),就调用dhcp_stop,后面网络会不可用
问
文件系统卡死的问题
发布于8年前
>如果没有关中断,中断是不会丢的。 > >即使有关中断,来了中断也会被pend起来,只要不来第二次中断,也不会丢。建议深入分析。 --- 我怀疑是没产生中断,而不是丢中断 在read的关键地方,被抢占了,导致异常,就没有产生中断。
问
文件系统卡死的问题
发布于8年前
具体多少不好算,加入的延时部分如下: ``` static void Mrfi_DelayUsec(u32 howLong) { u32 count; while (howLong--) { count = 28; while(count--); } return; } ``` 无线数据接收线程(前面提到的高优先级线程)中有如下处理: { uint8_t rxBytesVerify; rxBytesVerify = cc2500_read_status_reg( CCxxx0_RXBYTES ); do { rxBytes = rxBytesVerify; Mrfi_DelayUsec(100); rxBytesVerify = cc2500_read_status_reg( CCxxx0_RXBYTES ); } while (rxBytes != rxBytesVerify); } Mrfi_DelayUsec(100)就是前几天才加进去的。 这是个无线接收的部分,这里循环的次数和数据包长度有关,一般情况下可能会执行4,5次Mrfi_DelayUsec(100) 还有个主要的原因是,这个线程是处理无线数据接收的,优先级高,并且很可能这个线程被无线数据中断的事件连续触发运行
问
文件系统卡死的问题
发布于8年前
经过几天的测试,发现有可能是在open或者read的时候,被高优先级的线程给抢占了,并且高优先级的线程可能占用用的时间比较长,导致文件操作被中断了,才导致整个操作异常,SD卡中断也没有。 1,通过把操作文件的线程改为最高优先级,测试了一段时间(比之前会出问题的间隔长很多),暂时未发现卡死的问题 2,前面提到的高优先级的线程,几天前刚改动过,确实也增加了一些占用系统的时间的地方,改回去测试一段时间,也暂时未发现卡死的情况,并且改之前,也很少有反馈卡死的情况。 通过以上2点,就比较怀疑是在open或者read的时候,被高优先级线程抢占过长时间导致的异常 大家帮忙分析分析是不是有这种可能出现,谢谢!
问
文件系统卡死的问题
发布于8年前
>原来f1的时候出现过sdio外设有bug,难道f2依然存在? --- 是不是BUG还真不好说,不知道其它人遇到过同样的问题没?
问
文件系统卡死的问题
发布于8年前
>使用参考 realtouch项目,使用SDIO驱动框架。 >更加标准和规范,至少有对各种命令超时有处理,而不是像厂家提供的SD卡驱动特事特办。 >虽然,问题最后还是存在,但解决的方式更高靠谱。 --- 谢谢! 可以参考! 我自己也试着简单的加了超时处理来测试,发现虽然出问题的那次读取文件会失败,但是至少不会卡死
问
文件系统卡死的问题
发布于8年前
``` SD_Error SD_ProcessIRQSrc(void) { if (StopCondition == 1) { SDIO->ARG = 0x0; SDIO->CMD = 0x44C; TransferError = CmdResp1Error(SD_CMD_STOP_TRANSMISSION); } else { TransferError = SD_OK; } SDIO_ClearITPendingBit(SDIO_IT_DATAEND); SDIO_ITConfig(SDIO_IT_DATAEND, DISABLE); TransferEnd = 1; rt_kprintf(" TransferError = %d ",TransferError); return(TransferError); } ``` 我在SD卡中断服务里面加了打印信息,发现如果卡死的时候,是没有进中断 如果没进中断,就肯定有问题,系统这里是不是需要优化一下?
问
文件系统卡死的问题
发布于8年前
排除了 我自己关中断造成的问题,用jlink调试发现会卡在这里: SD_Error SD_WaitReadOperation(void) { SD_Error errorstatus = SD_OK; while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK)) {} if (TransferError != SD_OK) { return(TransferError); } return(errorstatus); }
问
文件系统卡死的问题
发布于8年前
``` rt_kprintf("test tag1 "); ret = stat(filename,&tmpstat); rt_kprintf("test tag1 end "); if(ret < 0 || tmpstat.st_size < 26){ rt_kprintf("control content is empty "); return; } //! allocation pBuffer = rt_malloc(tmpstat.st_size + 1); if(pBuffer == RT_NULL){ rt_kprintf("out of memory for processing control "); return; } rt_memset(pBuffer,0,tmpstat.st_size + 1); //! open control content file rt_kprintf("test tag2 "); fd_conf = open(filename,O_RDONLY,0); rt_kprintf("test tag2 end "); if(fd_conf < 0){ rt_kprintf("control content file open failed "); rt_free(pBuffer); return; } //! read content rt_kprintf("test tag3 "); readlen = read(fd_conf,pBuffer,tmpstat.st_size); rt_kprintf("test tag3 end "); if(readlen != tmpstat.st_size){ rt_kprintf("control content read failed "); close(fd_conf); rt_free(pBuffer); return; } ``` 我最发现线程卡死后 是上面那样测试的,结果出现卡死的时候,就未打印出test tag2 end 或者test tag3 end
«
1
2
3
»
TA的主页
TA的回答
TA的提问
TA的文章
TA的粉丝
TA的关注
会员统计
注册于 12年前
个人主页被 720 人浏览
回到
顶部
发布
问题
投诉
建议
问 请教一下网卡注册的问题