gd32+gcc+rtthread+lwip+ppp+nat开发总结

1、背景
自研DTU项目,替代别家产品,降低装置成本。技术路线上,采用国产gd32f450芯片和rtthread实时操作系统,运行轻量化tcp/ip协议栈lwip,通过ppp协议拨号上网,分别通过串口和网口透传数据,网口使用nat。

2、总结
▶串口6中断模式接收数据导致芯片崩溃
当时的现象是这样的,不开中断的情况下,串口6收发数据正常;如果打开中断模式,发送数据没有问题,一旦收到任何数据,芯片立马跑飞挂掉。一开始怀疑的是中断处理函数有问题,然而怎么修改也不见有效,也看了启动文件,前面几眼也没发现有什么问题,过了几天再看,发现问题了,启动文件的中断向量表有缺失,因为在串口6的中断之前,所以造成了地址偏移,然后串口6的中断号处填的是串口7的中断处理函数,详细可以看rtthread论坛的帖子GD32 GCC下startup中断向量表有遗漏
todo:如果提供了串口7的中断处理函数,芯片是否能正常工作?

▶使用外部时钟时,串口打印乱码
当初在排除串口工具和电脑的问题后,也看了系统的时钟配置,觉得没啥问题,就是一个宏定义而已,过了几天后再看,发现开启外部时钟时,默认的外部时钟是25M,但是我们的板子上是8M的晶振,不乱码才怪!详细可以看rtthread论坛的帖子外部时钟配置

▶boot跳转到app后,rtthread出现栈溢出
这个问题,一开始各种增加heap和stack的大小,但是一直没用,周末在家搜索的时候,看到一个帖子说gd32官方eth的驱动内,在配置eth的中断前,重新设置了中断向量表的地址为0x08000000,个人认为有点多余,回头再看rtthread的bsp中,也有此设置,导致跳转到app之后,使用的是boot的中断向量表,stack大小也是boot中的配置,比较小一些,rtthread直接报stack overflow!详细可以看rtthread论坛的帖子eth驱动重设中断向量表

▶nat移植,不知道怎么测试,报文也没有按照配置转发
做nat之前,一直懵逼,socket编程还有点基础,但是网络报文,真是从来都没有碰过,在煎熬了几天之后,终于痛下决心,买了tcp/ip详解卷一卷二和卷三。其实工作的第一年我的师傅就给我推荐过这三本书,很经典,但是一直也没碰到过这类问题,加上一直不求上进的态度,也就没看。当时师傅还给我推荐过比特币,12年的价格10刀左右…而我都买了啥?单反,手机,ipad,山地车…
rtthread组件中nat的源文件,看了好几遍,报文也没有正确转发,当时的配置是这样的,服务器ip:123.123.123.123,4G的公网ip:234.234.234.234,然后我把ppp的net dev设成192.168.1.1,eth设成192.168.1.30,pc设成192.168.1.210,看出问题了么?当时我知道要设.1的地址进行转发,但是设成了ppp,其实还是不理解网关的意思和作用,回头详细看一遍再写个博客,正确配置应该是这样的,ppp的net dev不用配置,eth设为192.168.1.1,然后就通了。最后多说一句,nat的转发函数,应当加入到err_t ip4_input(struct pbuf *p, struct netif *inp)函数中,回头做个总结,esp官方的SDK中也有nat的移植可供参考。

▶pbuf_free: p->ref > 0内存问题

3、感悟
出现问题,第一时间确定发生问题的原因,方向错了,怎么跑都是偏的;
不熟悉的技术方向,开发之前一定要补基础知识,否则就一直懵逼下去。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值