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

2024-02-16 03:08

本文主要是介绍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、感悟
出现问题,第一时间确定发生问题的原因,方向错了,怎么跑都是偏的;
不熟悉的技术方向,开发之前一定要补基础知识,否则就一直懵逼下去。

这篇关于gd32+gcc+rtthread+lwip+ppp+nat开发总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713311

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.