1.Python接口自动化-requests模块之post请求
2.FreeRTOS系列教程(六):如何使用队列集
3.FreeRTOS系列教程(四):如何使用信号量
Python接口自动化-requests模块之post请求
在探讨Python接口自动化时,源码小栈requests模块在处理HTTP请求方面扮演了重要角色。源码小栈在上篇文章中,源码小栈我们详细介绍了requests模块及其get请求的源码小栈使用。本文将聚焦于requests模块中的源码小栈post请求。 一、源码小栈借贷网站系统源码源码解析 在处理post请求时,源码小栈我们首先需要理解其参数解析机制。源码小栈post请求允许我们向服务器发送数据,源码小栈常见于表单提交、源码小栈发送JSON数据等场景。源码小栈 二、源码小栈data与json的源码小栈区别 小伙伴们在面对如何选择使用data还是json参数时,可能会感到困惑。源码小栈其实,源码小栈选择的关键在于请求头中的content-type类型。 举例说明,若使用data参数,通常意味着请求数据以表单形式(application/x-www-form-urlencoded)发送。反之,若content-type为application/json,则应使用json参数,以确保数据以JSON格式传输。 三、form形式发送post请求 假设当前接口接受类型为application/x-www-form-urlencoded的数据,我们通过正确的gameserver扩展源码参数格式发送post请求,如上文所示。 四、json形式发送post请求 同样,当接口要求应用类型为application/json时,我们需确保数据以JSON格式传递。若选择使用data参数而未转换为JSON字符串,可能会导致请求失败。 总结,本文阐述了post请求的源码解析、data与json参数的应用场景及实战操作。为了提升实践能力,读者可以利用公司项目或在线资源进行实际操作。 未来,我们将深入探讨接口自动化中cookie、session的原理与应用。对于感兴趣的读者,欢迎关注微信公众号:ITester软件测试小栈,获取更多测试相关资讯。FreeRTOS系列教程(六):如何使用队列集
本文主要探讨FreeRTOS中的队列集功能,如何在多任务环境下实现高效的消息传递和信号处理。队列集允许任务同时等待多个队列或信号量,解决单一资源等待可能导致的阻塞问题。
在传统的FreeRTOS实现中,任务只能逐一处理消息队列或信号量。例如,在线传奇源码任务A需要接收消息并获取信号量,如果消息队列无数据,信号量未释放,任务A会阻塞。队列集的引入则提供了解决方案:创建一个队列集,任务A不断从队列集中获取消息,根据句柄类型(队列或信号量)执行相应操作,这样就能确保任务在收到任何类型的事件时都能立即响应,避免了阻塞。
队列集的使用涉及几个关键API函数,如xQueueCreateSet()用于创建队列集,xQueueAddToSet()和xQueueRemoveFromSet()用于添加和删除队列,xQueueSelectFromSet()用于从队列集中获取消息。通过这些函数,可以灵活地管理任务之间的通信。
接下来,我们通过一个实验展示了队列集的应用。创建三个任务,任务1优先级最高,用于接收队列集中的消息。实验结果显示,任务能及时响应队列或信号量的变化,无论消息队列还是二值信号量,都能使任务从阻塞状态恢复。
总结来说,非源码app队列集是FreeRTOS中提升任务协作效率的重要工具,它扩展了任务的并发处理能力,降低了阻塞风险。如果你对队列集的使用还有疑问,欢迎在评论区交流。感谢你的关注与支持,如果你需要相关源码或学习资料,可关注微信公众号:硬件电子与嵌入式小栈,获取更多信息和资源。
FreeRTOS系列教程(四):如何使用信号量
大家好,我是旭辉君,一个智能硬件领域深度探索的技术博主。
在上篇文章中,我们理解了在FreeRTOS中如何使用消息队列进行任务间的数据传递,链接如下:
本文我们就一起来探索信号量的使用。所谓信号量,可以简单的理解为就是一个状态标志,我们可以用这个状态标志来进行任务间的同步,有序访问,或者互斥访问。从这些对于信号量不同的应用,常用的信号量可以分为:
本文我们将重点讲述二值信号量与计数信号量的使用。互斥信号量放在下一篇文章讲解。通过本文,我们将会知道:
接下来让我们一起,网格划分源码进入信号量的探索之旅!
如前文所述,信号量可以提供任务间数据的同步机制。我们假设有两个任务TaskA和TaskB,其中TaskB等待TaskA产生的数据并进行处理,按照之前我们在裸机编程时候的思路,一般都是设置一个全局变量,然后在while1中轮流执行这两个任务,若TaskA产生的数据让这个全局变量发生改变,TaskB在轮询到之后就能处理这些数据,但是,如果TaskA里面的数据久久不发生改变,那么一直轮询TaskB就是无效的,CPU做了许多的无用功。
所以应该怎么优化呢?
假若在TaskA数据发生不改变的时候,TaskB进入阻塞态不执行,当TaskA数据发生改变的时候才去执行TaskB,这样就不会浪费CPU的资源。为此,FreeRTOS引入了信号量(Semaphore)概念,通过信号量的同步机制可以使任务在数据还没到达的时候进入阻塞状态,在数据到达之后才得以执行,提高系统资源利用率。
二进制信号量只有两个状态,只能用于两个任务间的同步;计数信号量中信号量的数目可以自定义设定为多个,可用于多个任务间的同步。
创建信号量时, 系统会为创建的信号量对象分配内存, 二值信号量的最大可用信号量个数为 1。创建成功后,任何任务都可以从创建的二值信号量资源中获取这个二值信号量,获取成功则任务继续运行, 否则任务会根据用户指定的阻塞超时时间来等待其它任务或者中断释放信号量。在等待这段时间,系统将任务变成阻塞态, 任务将被挂到该信号量的阻塞等待列表中。下图为任务获取信号量时的示意图:获取信号量无效时任务进入阻塞,其他任务释放信号量后,信号量有效,该任务恢复为就绪态。
相比于二值信号量,计数信号量允许多个任务获取同一个信号量,这多个任务的数目可以由我们设定。比如我们设定,某个资源只能有 3 个任务访问,那么第 4 个任务访问的时候,会因为获取不到信号量而进入阻塞,等到有任务(比如任务 1)释放掉该资源的时候,第 4 个任务才能获取到信号量从而进行资源的访问,其运作的机制具体见下图:
观察信号量控制块结构体以及信号量创建函数的源码,我们就会惊奇的发现:FreeRTOS 的信号量控制块结构体与消息队列结构体是一模一样的!信 号 量 的 创 造 实 际 调 用 的 函 数 xQueueGenericCreate()也与消息队列一样!只是参数或者其代表的意义有一些差异。
所以我们可以理解为:信号量就是一种特殊的消息队列!由于我们只关注信号状态,不关注消息内容,这个队列就没有设置消息存储空间。
其中,xSemaphoreCreateBinary()是一个宏定义,展开后调用xQueueGenericCreate(),也就是上一篇文章我们创建队列时候使用的函数,只是传递的参数不同。
与二值信号量一样,xSemaphoreCreateCounting()展开后也是调用xQueueGenericCreate(),创建的计数信号量只有消息队列控制块结构体存储空间而没有消息存储空间 。
删除信号量函数vSemaphoreDelete()是一个宏定义,其调用的是vQueueDelete()函数。删除信号量过程其实就是删除消息队列过程, 因为信号量其实就是特殊的,无法存储消息的消息队列。
xSemaphoreGive()是一个用于释放信号量的宏, 真正的实现该过程是调用消息队列通用发送函数xQueueGenericSend()。释放信号量实际上是一次入队操作,并且阻塞时间为0,也就是释放信号量时,如果信号量计数值已满,就返回信号量释放错误。
xSemaphoreTake()是一个用于获取信号量的宏, 真正的实现该过程是调用消息队列通用接收函数xQueueGenericReceive()。信号量获取实际上就是一次消息出队操作,所以我们也可以按照消息队列的接收机制来理解信号量的获取:当有任务试图获取信号量的时候,当且仅当信号量有效,也就是队列中存在可用信号量的时候,任务才能获取到信号量。
如果信号量无效,在用户指定的阻塞超时时间中,该任务将保持阻塞状态以等待信号量有效。在阻塞超时等待的时间内,如果有其它任务或中断释放了有效的信号量,该任务将自动由阻塞态转移为就绪态。如果任务等待的时间超过了指定的阻塞时间,即使信号量中还是没有可用信号量,任务也会自动从阻塞态转移为就绪态。
创建三个任务,task_example_1,task_example_2和task_example_3。其中task_example_1用于计时,每3s让task_example_2释放二值信号量,task_example_3用于信号量获取,在获取不到信号量的时候一直死等。主体代码如下:
下图为运行后的串口输出结果:可以看到,cnt计数的时候,每3s释放一个二值信号量,然后立即就能被获取到,实现了Task2与Task3两个任务间的同步。
创建计数信号量xSemaphoreCreateCounting(5,3),其中参数5表示最大可容纳五个状态,任务每获取一个信号量,信号量计数减一,每释放一个信号量,信号量计数加一。初始值为3,表示初始里面已经有了三个信号量。同样三个任务,task_example_3每ms获取一个信号量, task_example_2每2s释放一个信号量,task_example_1用于每1s的计时显示。程序主体代码如下:
运行程序后串口输出如下:可以看到,初始计数信号量有3个,随着不断获取,计数信号量为空,之后就获取失败,只有计数信号量释放后才能继续获取。
本文主要探索了二值信号量与计数信号量的原理及其使用方法,包括信号量的原理,信号量的运行机制,信号量与消息队列的比较,信号量的相关API函数,以及信号量的使用实验等。通过本文,不知道大家对第一节的几个问题,有没有自己的答案。有疑问的同学,欢迎评论区留言交流。原创不易,大家的点赞和关注是对我持续更新最大的鼓励,谢谢!也为坚持看到系列文章此处的你点赞!
想要文中工程源码的同学,可以关注我的微信公众号:硬件电子与嵌入式小栈,留言:freertos源码 即可获取。同时我还整理了一些学习FreeRTOS实用的书籍资料,公众号留言:freertos资料 即可获取。公众号里也会不定期更新干货文章哦。