完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
LWIP多线程强烈建议开启LWIP_ASSERT_CORE_LOCKED宏,这个在RTT里面要怎么实现,之前参考网上代码,这样写,压力测试下有概率断言失败
extern sys_mutex_t lock_tcpip_core; void lwip_assert_core_locked(void) { /* If the mutex hasn't been initialized yet, then give it a pass. */ if (NULL == lock_tcpip_core) return; /* this function must not be used in interrupt */ RT_DEBUG_IN_THREAD_CONTEXT; struct rt_thread *thread = rt_thread_self(); /* Ensure that the mutex is currently taken (locked). */ LWIP_ASSERT("TCPIP core is locked", (lock_tcpip_core->owner == thread) && (lock_tcpip_core->hold>0)); } |
|
相关推荐
1个回答
|
|
在RT-Thread中实现LWIP多线程并开启LWIP_ASSERT_CORE_LOCKED宏的方法如下:
1. 首先,确保你的RT-Thread版本支持多线程。这通常意味着你需要使用RT-Thread的完整版本,而不是精简版本。 2. 在你的LWIP配置文件(通常是lwipopts.h)中,定义LWIP_ASSERT_CORE_LOCKED宏。这可以通过添加以下行来实现: ```c #define LWIP_ASSERT_CORE_LOCKED() ``` 3. 接下来,需要创建一个互斥锁(mutex)来保护TCP/IP核心。在你的应用程序中,添加以下代码: ```c #include #include static sys_mutex_t lock_tcpip_core; ``` 4. 在TCP/IP核心初始化之前,初始化互斥锁。你可以在调用`tcpip_init()`之前添加以下代码: ```c rt_err_t result = rt_mutex_init(&lock_tcpip_core, "tcpip_core", RT_IPC_FLAG_FIFO); if (result != RT_EOK) { // 处理错误 } ``` 5. 修改`lwip_assert_core_locked()`函数,以检查当前线程是否持有互斥锁。以下是修改后的函数: ```c void lwip_assert_core_locked(void) { /* If the mutex hasn't been initialized yet, then give it a pass. */ if (NULL == lock_tcpip_core) return; /* this function must not be used in interrupt */ RT_DEBUG_IN_THREAD_CONTEXT; /* Check if the current thread holds the mutex */ if (rt_mutex_get_holder(&lock_tcpip_core) != rt_thread_self()) { rt_kprintf("LWIP core lock assertion failed!n"); // 你可以根据需要添加更多的错误处理代码 } } ``` 6. 最后,确保在所有需要保护的LWIP函数调用之前和之后使用互斥锁。例如: ```c /* Lock the TCP/IP core */ rt_mutex_take(&lock_tcpip_core, RT_WAITING_FOREVER); /* Call the LWIP function */ your_lwip_function(); /* Unlock the TCP/IP core */ rt_mutex_release(&lock_tcpip_core); ``` 通过以上步骤,你可以在RT-Thread中实现LWIP多线程并开启LWIP_ASSERT_CORE_LOCKED宏。这将有助于确保在多线程环境中正确地保护TCP/IP核心。 |
|
|
|
只有小组成员才能发言,加入小组>>
147个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
749 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
763 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
692 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1015 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
942 浏览 0 评论
STM32F407ZGT6 spi flash片选引脚无法被拉低的原因?怎么解决?
943浏览 2评论
移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?
311浏览 2评论
stm32f103zet用rtthread studio生成带finsh的项目程序,串口输入help没有反应是为什么?
328浏览 2评论
rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?
330浏览 2评论
rt-thread 4.1.1的pin的实际引脚编号和内核引脚编号的对应关系在哪个文件里面能找到?
348浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-1 06:36 , Processed in 0.666824 second(s), Total 84, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号