RTthread erx 线程死掉了啊

在使用STM32和RTthread 0.4.0 ( lwip ) 构建的Web服务器中,观察到在通过浏览器访问大约30次后,erx线程在rt_mb_recv()调用rt_schedule()后出现故障,导致客户端无法再ping通服务端。此问题在RTthread 0.3.0中同样存在。erx线程主要负责接收网络数据,其代码包含在提供的示例中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



这段时间在弄stm32  +rtthread0.4.0 (lwip) ,可以说是什么问题都遇到过啊 各种各样地,非常难受

下面这个问题 期待高手过来
我用stm32做了个简单的web服务器,结果在PC端用浏览器访问web服务器发现问题了,大概访问30多次 ,rtthread底层的erx线程就挂掉了。
在rt_mb_recv函数中rt_schedule();以后,似乎就再也回不来了。之后,客户端就再也ping不通stm32的服务端了
不知道rtthread0.3.0有没有这个问题   已经试过了0.3.0也有这个问题,现在就不知道linux下如何了
另外我在发数据send的时候也遇到过 这样的问题。

erx线程如下:
void eth_rx_thread_entry(void* parameter)
{
        struct eth_device* device;

        while (1)
        {
                if (rt_mb_recv(&eth_rx_thread_mb, (rt_uint32_t*)&device, RT_WAITING_FOREVER) == RT_EOK)
                {
                        struct pbuf *p;

       

### 如何在 RT-Thread 上移植 LwIP 协议栈 #### 1. LWIP 的基本概念 LWIP 是一种轻量级的 TCP/IP 协议栈,广泛应用于资源受限的嵌入式系统中。其设计目标是在保持较小内存占用的同时提供完整的网络功能支持[^1]。 #### 2. 移植前准备 为了成功完成 LwIP 在 RT-Thread 中的移植工作,需确保以下条件满足: - 已经搭建好 RT-Thread 开发环境并能够运行基础项目。 - 配置了适合的目标硬件平台(如 STM32 或 HC32 系列 MCU),并且具备必要的外设接口(例如以太网控制器或 Wi-Fi 模块)。 - 安装了 RT-Thread 提供的相关工具链以及包管理器 env/ps 来获取最新版本的 lwip 组件[^2]。 #### 3. 使用在线软件包安装 LwIP 通过 RT-Thread 的包管理系统可以快速集成 LwIP 到工程当中。具体步骤如下所示: 打开命令行界面输入 `menuconfig` 命令进入配置菜单,在其中导航至 **RT-Thread online packages -> IoT - Internet Of Things -> WiFi**, 并启用选项 `rw007: SPI WIFI rw007 driver` 。这一步骤会自动下载所需依赖文件并将它们加入到构建流程之中。 #### 4. 设备驱动适配 由于 RT-Thread 对于底层硬件访问进行了抽象化处理, 所以其内部实现了一个新的设备框架来替代传统 lwIP 自带的部分代码逻辑。因此需要针对具体的芯片型号编写相应的网卡驱动程序并与之对接起来[^3]。 以下是基于 STM32F429 微控制器的一个简单实例演示如何添加自定义以太网 MAC 层驱动: ```c #include "drv_eth.h" // 初始化函数声明 int eth_init(void); /* 实现细节省略 */ static struct rt_device _eth_dev; void drv_register_network_interface() { /* 注册网络接口 */ if (rt_hw_eth_device_attach("eth0", &(_eth_dev)) != RT_EOK) LOG_E("Failed to attach Ethernet device!"); } INIT_DEVICE_EXPORT(drv_register_network_interface); ``` 上述片段展示了怎样创建一个新的设备对象 `_eth_dev`, 同时将其关联到物理名称 `"eth0"` 下面去形成最终可供应用程序使用的虚拟路径节点 /dev/eth0. #### 5. 调整线程设置 默认情况下,LwIP 运行在一个单独的任务上下文中执行所有的核心操作(比如 ARP 解析,TCP连接建立等等).然而考虑到实时性和性能优化方面的需求,RT-Thread 版本引入额外两个辅助子进程分别负责接收(`erx`) 和 发送 (`etx`).这两个实体之间共享相同优先级别但允许开发者依据实际情况灵活调整相对权重以便更好地平衡吞吐率与延迟表现. #### 6. 测试验证 最后阶段应该编译整个解决方案并烧录固件镜像到目标板上测试连通性状况。可以通过 ping 请求确认远程主机可达状态或者启动简单的 HTTP server 功能进一步检验整体架构稳定性. ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值