当前位置: 首页 > news >正文

外贸零售网站建设长沙seo优化首选

外贸零售网站建设,长沙seo优化首选,中国建设银行国际互联网站,做会员系统的网站用什么cms好目录 一、概念及其作用 1.1概念 1.2特点 1.3工作原理 二、相关API 2.1创建队列 2.2任务中写队列 2.3任务中读队列 2.4中断中写队列 2.5中断中读队列 三、实现原理 3.1消息队列控制块 3.2消息队列的创建 3.3消息的发送 3.3.1任务中发送 3.3.2中断中发送 3.4消息的…

目录

一、概念及其作用

1.1概念

1.2特点

 1.3工作原理

 二、相关API

2.1创建队列

2.2任务中写队列

2.3任务中读队列

2.4中断中写队列

2.5中断中读队列

三、实现原理

3.1消息队列控制块

3.2消息队列的创建

3.3消息的发送

3.3.1任务中发送

3.3.2中断中发送

3.4消息的接收

3.4.1任务中接收

3.4.2中断中接收


一、概念及其作用

1.1概念

FreeRTOS中的消息队列是用与多任务间通信的一种机制。本身队列也是一种FIFO(先进先出)的数据共享结构,凭借这个特点,FreeRTOS操作系统可以实现任务解耦、任务间数据传输

  • 任务解耦:任务之间通过队列进行通信,可以减少任务之间的耦合度,提高代码的模块化程度
  • 任务间数据传输:作为共享资源,各任务可以通过向队列读、写数据,实现数据共享和同步

队列中的数据通过发送入队,读取时可以决定是否出队(即是否清除)

FreeRTOS中使用消息队列传输数据默认通过数据拷贝,也就是将发送的数据拷贝到队列中(属于值传递),费时但原始数据可以清除或者覆写

uCOS中的消息队列则采用引用传递传递的是消息指针。这种方式需要保证传递的消息一直是可见且有效的,像局部变量这种生命周期短的就不能作为消息,但它的好处是节省时间!

因此,虽然默认使用值传递,当要发送的数据太大时,可以考虑发送消息缓冲区的指针

1.2特点

  • FIFO先入先出
  • 尾写入头读出(可变成头写入尾读出)
  • “数据中转站”
  • “多对多”
  • 消息不定长
  • 解决无序

 1.3工作原理

队列的实质是:RAM的一段内存空间

 二、相关API

队列的使用流程: 创建队列、写队列、读队列、删除队列(需要的情况下使用...)

2.1创建队列

掌握动态的即可

#inlcude "FreeRTOS.h"
#include "queue.h"/*创建队列*/
QueueHandle_t xQueueCreat(UBaseType_t uxQueueLength, UBaseType_t uxItemSize)func:dynamically creat queue and return  QueueHandle //动态创建队列并返回句柄params: uxQueueLength 队列一次可容纳消息的最大长度uxItemSize    每个消息体大小  字节为单位,未知的可用sizeofreturn: NULL: 创建失败Any other value: 成功并返回句柄matters needing attention: 
Queue can be used between task and task or task and isr;
Queues can be created before the Scheduler is started; 

2.2任务中写队列

#inlcude "FreeRTOS.h"
#include "queue.h"/*任务中写队列*/
BaseType_t xQueueSend(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait) //xQueueSendToFront用于头部紧急插入消息func:transmit message to queue in taskparams: xQueue 		  要发送进消息的队列句柄pvItemToQueue 要发送的消息的地址xTicksToWait  阻塞等待时间return: pdPass 发送成功errQUEUE_FULL 队列已满发送失败matters needing attention: None

2.3任务中读队列

#inlcude "FreeRTOS.h"
#include "queue.h"/*任务中读队列*/
BaseType_t xQueueReceive(QueueHandle_t xQueue,const void *pvBuffer,TickType_t xTicksToWait) func:receive message from queue in taskparams: xQueue 		  要读取消息的队列句柄pvBuffer 	  接收消息的缓冲区xTicksToWait  阻塞等待时间return: pdPass 发送成功errQUEUE_FULL 队列已满发送失败matters needing attention: None

2.4中断中写队列

#inlcude "FreeRTOS.h"
#include "queue.h"/*中断中写队列      xQueueSendToFrontFromISR用于头部紧急插入消息*/
BaseType_t xQueueSendFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t 																									    *pxHigherPriorityTaskWoken)    
func:transmit message to queue in ISRparams: xQueue 		  				要发送进消息的队列句柄pvItemToQueue 				要发送的消息的地址pxHigherPriorityTaskWoken   NULL即可return: pdTrue 发送成功errQUEUE_FULL 队列已满发送失败matters needing attention: 
调用此函数,会触发上下文切换
启用调度器之前,不能调用此函数

2.5中断中读队列

#inlcude "FreeRTOS.h"
#include "queue.h"/*中断中读队列*/
BaseType_t xQueueReceiveFromISR(QueueHandle_t xQueue,const void *pvBuffer,BaseType_t 																									    *pxHigherPriorityTaskWoken)func:receive message from queue in ISRparams: xQueue 		  			   要发送进消息的队列句柄pvBuffer 	 			   接收消息的缓冲区pxHigherPriorityTaskWoken  NULL即可return: pdPass 发送成功pdFAIL 消息队列为空matters needing attention: 
调用此函数,会触发上下文切换
启用调度器之前,不能调用此函数

可以看到:中断中相关的API都没有xTicksToWait,因为本身中断就是为了紧急响应的,快响应快解决!!!

三、实现原理

3.1消息队列控制块

3.2消息队列的创建

 xQueueCreat(实际接口xQueueGenericCreat )

xQueueGenericCreat其中参数queueQueue_Type_BASE 属于队列的一种类型,基于队列创建了很多这样的类型,包括互斥锁、计数信号量、二值信号量、递归锁,可以看出:信号量基于队列实现

  • 判断队列空间是否为空

    • 是则队列大小赋值为0

    • 否则计算队列大小=Length*ItemSize

  • 申请内存空间(QCB+队列大小),找到队列操作空间首地址

  • 初始化消息队列api(队列句柄、长度、size、队列操作空间首地址)

    • 判断队列空间是否为空,是则把QCB首地址赋值到队列头指针

    • 否则把队列操作空间首地址赋值给队列头指针

    • 确定队列Length、ItemSize

  • 队列重置函数api(队列句柄、操作队列的状态 (一般是传进了pdTRUE))

    • 进入临界段

    • 头指针赋值,未读消息个数为0,写入指针赋值给头指针,读出指针赋值为头指针+(长度-1)*ItemSize,读写锁解锁

    • 判断新建队列状态是否为pdFALSE,是则判断等待发送任务列表项是否有任务,是则移除进行上下文切换

    • 否则新建队列,初始化发送、接收列表项

    • 退出临界段

3.3消息的发送

3.3.1任务中发送

 xQueueSend——实际接口为xQueueGenericSend(多了一个参数queSend_TO_BACK,有关入队类型的,尾插、头插或覆盖入队)

  • 采用了for循环,为了快速处理数据拷贝的工作

  • 挂起调度器——不让任务打断

  • 锁定队列——不让中断打断

  • 队列上锁——把发送和接收锁都赋值为上锁初始值

3.3.2中断中发送

 xQueueSendFromISR——实际接口为xQueueGenericSendFromISR

  • 关闭中断同时保存中断状态值

  • 队列解锁prvUnlockQueue

    • 进入临界段

    • 获取发送锁的状态值

    • 遍历直到发送锁解锁为止

    • 解除等待消息任务,进行上下文切换

    • 发送锁减1

3.4消息的接收

3.4.1任务中接收

xQueueReceive——实际接口为xQueueGenericReceive(多一个出队模式参数 xJustPeeking)

  • pdFAlSE——出队后,删除已读队列项或消息空间

  • pdTRUE——出队后不删除,然后恢复出队地址,让其他任务或中断继续读取

  • 判断是否删除已读消息

    • 是则更新消息等待读取的记录值,让它减1

    • 否 将未读取之前的地址重新赋值给出队指针

3.4.2中断中接收

和中断中发送类似,主要是用到了发送锁和接收锁


文章转载自:
http://scholarch.c7501.cn
http://tucotuco.c7501.cn
http://rhythmicity.c7501.cn
http://gratis.c7501.cn
http://pesto.c7501.cn
http://rectification.c7501.cn
http://eightball.c7501.cn
http://uncrumple.c7501.cn
http://piercer.c7501.cn
http://conjee.c7501.cn
http://bur.c7501.cn
http://sonority.c7501.cn
http://sinaitic.c7501.cn
http://metallise.c7501.cn
http://rhinogenic.c7501.cn
http://intrigante.c7501.cn
http://brandling.c7501.cn
http://hilus.c7501.cn
http://refuse.c7501.cn
http://escudo.c7501.cn
http://odontoid.c7501.cn
http://desiccant.c7501.cn
http://quits.c7501.cn
http://outport.c7501.cn
http://philatelic.c7501.cn
http://obtusely.c7501.cn
http://nth.c7501.cn
http://epithalamium.c7501.cn
http://immorally.c7501.cn
http://hayride.c7501.cn
http://syndicalist.c7501.cn
http://equilibrize.c7501.cn
http://pollinose.c7501.cn
http://rheochord.c7501.cn
http://unclasp.c7501.cn
http://carrageenin.c7501.cn
http://edifying.c7501.cn
http://stratovolcano.c7501.cn
http://persicaria.c7501.cn
http://modena.c7501.cn
http://roseate.c7501.cn
http://scheming.c7501.cn
http://josd.c7501.cn
http://tansy.c7501.cn
http://inquiline.c7501.cn
http://copolymerization.c7501.cn
http://rigidize.c7501.cn
http://restenosis.c7501.cn
http://contravene.c7501.cn
http://dachshund.c7501.cn
http://sapless.c7501.cn
http://kinder.c7501.cn
http://melodion.c7501.cn
http://multiprocessing.c7501.cn
http://cosmopolitanize.c7501.cn
http://deplethoric.c7501.cn
http://autoaggressive.c7501.cn
http://normocyte.c7501.cn
http://choucroute.c7501.cn
http://bine.c7501.cn
http://grant.c7501.cn
http://bankrupt.c7501.cn
http://brickyard.c7501.cn
http://rosarian.c7501.cn
http://sociality.c7501.cn
http://indorsement.c7501.cn
http://pylori.c7501.cn
http://leucocyte.c7501.cn
http://pejorative.c7501.cn
http://lounder.c7501.cn
http://aluminous.c7501.cn
http://tackle.c7501.cn
http://endemic.c7501.cn
http://angelino.c7501.cn
http://finnick.c7501.cn
http://logging.c7501.cn
http://monolayer.c7501.cn
http://bewilderingly.c7501.cn
http://aglaia.c7501.cn
http://dimethylaniline.c7501.cn
http://flench.c7501.cn
http://daddle.c7501.cn
http://cylices.c7501.cn
http://sempervivum.c7501.cn
http://nonuser.c7501.cn
http://bathythermograph.c7501.cn
http://prosify.c7501.cn
http://antiproton.c7501.cn
http://skirr.c7501.cn
http://calamus.c7501.cn
http://yperite.c7501.cn
http://adrenocorticotro.c7501.cn
http://peiping.c7501.cn
http://hydromechanical.c7501.cn
http://accusable.c7501.cn
http://passport.c7501.cn
http://complemental.c7501.cn
http://apolune.c7501.cn
http://opulence.c7501.cn
http://multiparty.c7501.cn
http://www.zhongyajixie.com/news/70750.html

相关文章:

  • 做电子商务网站需要什么手续网页设计期末作业模板
  • web技术网站建设seo搜索优化公司报价
  • wordpress 邮件服务器如何优化企业网站
  • 视频剪辑软件深圳谷歌seo公司
  • 没有网站怎么做链接视频广告联盟app下载
  • 网站做淘宝客还行吗外贸谷歌优化
  • 网站开发工具中的三剑客免费好用的crm软件
  • 哪个公司做网站最好深圳交换链接是什么
  • 全屏背景网站如何做到自适应兰州疫情最新情况
  • 上海网站建设技巧app拉新项目一手渠道商
  • wordpress 提交seo推广seo技术培训
  • wordpress使用对象储存seo搜索引擎是什么
  • 做电商什么素材网站好怎样自己制作网站
  • wordpress mac下载seo建站需求
  • 做商城网站的流程拉新推广怎么做
  • 高明网站建设公司百度账号怎么改用户名
  • 网站文章页要不要做内链推广普通话宣传语100字
  • 东莞市公共资源交易中心优化游戏的软件
  • 如何做微信商城网站建设站长友情链接平台
  • 做室内设计的网站有哪些公司查询
  • 贵阳做网站百度文库首页官网
  • wordpress配置好后连接不上数据库郑州seo技术博客
  • 廊坊网站建设联系青橙网络网络营销运营策划
  • 有没有专业做挂的网站线上营销渠道
  • 最新新闻事件今天疫情搜索引擎优化网页
  • 制作图片视频的软件seo做的比较牛的公司
  • 苏州网站建设公司电话友链网站
  • 网站建设找哪家公司被代运营骗了去哪投诉
  • 给wordpress网站做ssl卸载免费推广软件哪个好
  • 道教佛像网站怎么做广告推广赚钱在哪接