设备打算通过一个液晶的菜单项决定是否启动modbusTCP(通过以太网口+LWIP+LIBMODBUS+静态IP配置实现),因为LWIP这块启用与否占用不少资源,所以想通过一个开关控制是否关闭该功能。但该功能的实现依赖LWIP创建的几个线程:etx/erx/tcip/modbustcptest,如果优雅稳定可靠地的通过开关信号(按键,菜单启停)做到这一点?
查看更多
啥意思?系统运行起来以后人工决定要不要开启网络协议?这个比较有点儿难度。重点儿在清理过程,重启就调用一个初始化函数清理过程,你得自己写卸载网卡接口,然后几个线程可以直接 delete 。简单点儿就是关中断,然后 delete 掉所有相关线程。
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
一 rt-thread不支持从A线程删除B线程,因为线程有多个,信号量也不能通知多个线程,那通知各线程时用事件集?
二 从运行到关掉只要线程删掉就不会运行了;但若又从禁掉到开启,只重开各线程不重启,驱动会正常吗?
删除函数就是a删除b这样用啊。
删除一个线程容易,麻烦的是怎么清理线程运行过程中申请的内存,也就是释放线程使用的资源
重启得从 rt_hw_eth_init 开始
那加入你有一个产品,根据菜单配置是否启用网络功能或者在有线方式和无线方式切换你都是怎么设计的?@出出啊
@杰瑞鼠
禁用网络 down 掉就好了,不需要完全卸载掉。
切换就 up。
上周刚把有线的 dhcp 改了。官方给的是静态 dhcp 配置,没有在应用里动态切换。
menuconfig生成.config进而形成rtconfig.h中的宏,scons脚本根据rtconfig.h中的宏进行源文件的选择性构建,那么,能否由菜单或者按键操作影响或生成define宏呢?PC的ini文件都是怎么用的?这个可以办到吗?@出出啊
@杰瑞鼠
一个编译期的概念,一个运行期的概念,风马牛不相及
你可以用 json,rtt 里有这个包,我也在用,挺好使的。
把你需要改变的状态,比如 dhcp 的开启关闭状态保存到 json 文件。下次开机读文件,然后配置网络 dhcp 开启和关闭。我的现在就是这样的。
你的意思是不是这样的步骤:
1 在app运行的时候(status1)通过ftp或者ymode将新的“cfg.json”发到文件系统分区位置。
2 重启系统。
3 读cfg.json文件,根据K的V值选择加载驱动,IP分配模式。等于原来有的软件包自己启动/创建的东西把它禁掉,该由自己控制启动/创建的时机或流程顺序,进而达到所需目的?核心是将原来RTT自动初始化的软件包操作该成手动?
4 能否贴些代码demo图片帮助理解一下?
5 作为配置文件的ini和json作为配置文件的优缺点可以探头一下:ini是否是主要作为系统的配置参数而json作为结构体类的工作参数配置
@出出啊
@杰瑞鼠
有一个 json 就够了,不建议用 ini了。
任何配置都可以放json文件里。
cfg.json 也不用 ftp 传输进去啊。程序启动后找这个文件,没找到加载代码内置的默认参数,有这个文件读这个文件里的配置。
后面就根据你的配置文件,进行网卡 ip 地址,dhcp 等等配置。
上电 dhcp 设置修改后的代码,有时间整理一下放出来。
在程序运行过程中修改(比如液晶菜单)IP地址(最终保存在一个二进制文件中),想让它生效,因为上电从文件系统的文件中加载配置参数是在main函数创建的线程中调用,而网络配置是在INIT_DEVICE_EXPORT(rt_hw_stm32_eth_init),网络应用是INIT_APP_EXPORT(tcp_test_init);中,加载参数晚于后面的网络驱动和网络应用,如何解决这个问题?
修改IP应该是不一定非的重启才要生效吧?
搜索到MSH_CMD_EXPORT_ALIAS(netdev_ifconfig, ifconfig, list the information of all network interfaces)调用的netdev_ifconfig函数可以重设网络参数;
还有FINSH_FUNCTION_EXPORT(set_if, set network interface address)调用的set_if函数也可以从设网络参数。
我修改ip后保存到配置文件中的值该如何修改让其生效?如果调用上面的函数加入我只修改ip该如何调用?请指点一下谢谢!
@出出啊
@杰瑞鼠
所有配置修改都可以在运行的时候修改,不需要再回到 init 才能配置。启动以后任意时间都能改。
@杰瑞鼠
只是,目前没有现成的接口。
那结论呢?现在先不说一键启动/停用,就简单的修改新IP生效如何来做?我发现用ifconfig e0 ip gw mask 命令行修改是不行的,无法修改成功@出出啊
@杰瑞鼠
看 ifconfig 源码就知道怎么做了,你要的所有操作都在 ifconfig 命令里,这就是结论
关键是用ifconfig动态修改IP没有成功,不生效!!!,如果好使那就好办了@出出啊
@杰瑞鼠
说明你的lwip还没弄好
可以了@杰瑞鼠
虽然能动态改变,但是复位后又变回去了,因为加载路径inet_addr(RT_LWIP_IPADDR)加载,难道物理网卡就没有寄存器来保存这些网络参数,以掉电不丢失吗?有的话在这里判断如何寄存器设置过就跳过,没设置就调用初始缺省的IP地址宏@出出啊
@杰瑞鼠
⊙﹏⊙b汗,你知道这里是设置的固定值了,就把那个宏改掉嘛,换成变量,从配置文件读ip然后调用这句改掉就好了
主要还是加载时机问题,tcpip初始化太早,此时系统参数还远未加载,倒是可以手动修改tcpip初始化的时机,但感觉这样用也不太合理@出出啊
@杰瑞鼠
默认初始配置了以后,应用程序还可以更改的啊,也不一定必须第一次就设置成应用配置的
所以,前边我说需要改的地方很多。想简单就在应用层改一次ip
@杰瑞鼠
方法很多,没有强制的必须怎么怎么做