完善资料让更多小伙伴认识你,还能领取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核心。 |
|
|
|
只有小组成员才能发言,加入小组>>
156个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
900 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1300 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
930 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1196 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1203 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:46 , Processed in 0.464249 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号