LWIP2.1.3+UCOSIII3.08的系统接口arch.c修改

2024-04-14 17:52

本文主要是介绍LWIP2.1.3+UCOSIII3.08的系统接口arch.c修改,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自己的笔记不保证正确

err_t
sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg)
{BaseType_t ret;BaseType_t xHigherPriorityTaskWoken = pdFALSE;LWIP_ASSERT("mbox != NULL", mbox != NULL);
//  LWIP_ASSERT("mbox->mbx != NULL", mbox->mbx != NULL);ret = xQueueSendToBackFromISR(mbox->mbx, &msg, &xHigherPriorityTaskWoken);if (ret == pdTRUE) {if (xHigherPriorityTaskWoken == pdTRUE) {return ERR_NEED_SCHED;}return ERR_OK;} else {LWIP_ASSERT("mbox trypost failed", ret == errQUEUE_FULL);
//    SYS_STATS_INC(mbox.err);return ERR_MEM;}
}freeRTOS移植LWIP的这个函数的讲解

这段代码是FreeRTOS移植LWIP网络协议栈时使用的函数,用于在中断服务程序中向消息邮箱(mbox)发送消息。函数的返回类型是err_t,表示错误码。

函数的实现逻辑如下:

  1. 首先,通过断言(LWIP_ASSERT)确保传入的消息邮箱(mbox)不为空。
  2. 调用xQueueSendToBackFromISR函数将消息发送到消息邮箱中,并将返回值赋给ret变量。同时,还会更新一个标志位xHigherPriorityTaskWoken,用于指示是否有更高优先级的任务需要立即唤醒。
  3. 如果发送成功(ret == pdTRUE),则判断是否有更高优先级的任务需要唤醒。如果需要唤醒,则返回ERR_NEED_SCHED错误码;否则,返回ERR_OK表示发送成功。
  4. 如果发送失败(ret != pdTRUE),则通过断言(LWIP_ASSERT)确保发送失败的原因是消息邮箱已满(ret == errQUEUE_FULL)。然后返回ERR_MEM错误码,表示内存不足。

 

 

void sys_mutex_lock(sys_mutex_t *mutex)
{BaseType_t ret;LWIP_ASSERT("mutex != NULL", mutex != NULL);LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL);ret = xSemaphoreTakeRecursive(mutex->mut, portMAX_DELAY);LWIP_ASSERT("failed to take the mutex", ret == pdTRUE);
}freeRTOS移植LWIP的这个函数的讲解

这是一个用于在FreeRTOS中移植LWIP的函数,它用于获取一个互斥锁(mutex)。下面是对该函数的详细讲解:

  1. 首先,函数接受一个指向sys_mutex_t类型的指针作为参数,该类型是LWIP中定义的互斥锁结构体。

  2. 接下来,使用LWIP_ASSERT宏来进行断言检查,确保传入的mutex指针和mutex->mut指针都不为空。如果断言失败,将会触发断言错误。

  3. 然后,调用xSemaphoreTakeRecursive函数来获取互斥锁。xSemaphoreTakeRecursive函数是FreeRTOS中用于获取递归互斥锁的函数。它的第一个参数是要获取的互斥锁对象,第二个参数是等待时间,这里使用了portMAX_DELAY表示无限等待。

  4. 最后,使用LWIP_ASSERT宏再次进行断言检查,确保成功获取了互斥锁。如果断言失败,将会触发断言错误。

总结一下,该函数的作用是在FreeRTOS中获取一个互斥锁,并通过断言检查确保操作的正确性。

void sys_mutex_unlock(sys_mutex_t *mutex)
{BaseType_t ret;LWIP_ASSERT("mutex != NULL", mutex != NULL);LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL);ret = xSemaphoreGiveRecursive(mutex->mut);LWIP_ASSERT("failed to give the mutex", ret == pdTRUE);
}freeRTOS移植LWIP的这个函数的讲解

这是一个用于在FreeRTOS中移植LWIP的函数,它的作用是释放一个互斥锁(mutex)。下面是对该函数的详细讲解:

  1. 首先,函数接受一个指向sys_mutex_t类型的指针作为参数,该类型是LWIP中定义的互斥锁结构体。

  2. 在函数内部,使用LWIP_ASSERT宏来进行断言检查,确保传入的参数不为空。如果参数为空,则会触发断言错误。

  3. 接下来,通过xSemaphoreGiveRecursive函数来释放互斥锁。xSemaphoreGiveRecursive函数是FreeRTOS提供的函数,用于递归地释放一个二值信号量(互斥锁)。

  4. 在释放互斥锁之后,再次使用LWIP_ASSERT宏来检查是否成功释放了互斥锁。如果释放失败,则会触发断言错误。

总结一下,该函数的主要作用是释放一个互斥锁,确保在使用完互斥锁后能够正确地释放资源。

xSemaphoreGiveRecursive(mutex->mut);请用UCOSIII替换

替换为OSSemPost(&mutex);

void
sys_mutex_free(sys_mutex_t *mutex)
{LWIP_ASSERT("mutex != NULL", mutex != NULL);LWIP_ASSERT("mutex->mut != NULL", mutex->mut != NULL);SYS_STATS_DEC(mutex.used);vSemaphoreDelete(mutex->mut);mutex->mut = NULL;
}freeRTOS移植LWIP的这个函数的讲解

这段代码是FreeRTOS移植LWIP时使用的函数,用于释放互斥锁(mutex)。下面是对代码的解释:

  1. 首先,通过断言(LWIP_ASSERT)来确保传入的互斥锁指针(mutex)和互斥锁对象(mutex->mut)不为空。断言是一种在程序中检查条件是否满足的方法,如果条件不满足,会触发断言失败并输出错误信息。

  2. 接下来,通过SYS_STATS_DEC宏来减少互斥锁的使用计数。SYS_STATS_DEC是一个用于统计的宏,用于减少指定统计项的计数。

  3. 然后,调用vSemaphoreDelete函数来删除互斥锁对象。vSemaphoreDelete是FreeRTOS提供的函数,用于删除一个二进制信号量(互斥锁)。这样可以释放互斥锁所占用的资源。

  4. 最后,将互斥锁对象指针(mutex->mut)设置为NULL,表示该互斥锁已被释放。

vSemaphoreDelete函数不需要等待直到没有任务申请。vSemaphoreDelete函数是FreeRTOS中用于删除一个二值信号量或计数信号量的函数。它会立即删除信号量,并释放相关的资源,而不会等待任务完成对信号量的申请。

这篇关于LWIP2.1.3+UCOSIII3.08的系统接口arch.c修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1