zoukankan      html  css  js  c++  java
  • FreeRTOS——队列管理

    1. 队列主要用于任务与任务、中断与任务之间的消息传递。

    2. 创建队列时,请注意队列中数据单元的长度。

    3. 通常情况,队列被作为FIFO(先进先出)使用,即数据从队列尾写入,从队列首读。当然,数据也可由队列首写入。

    4. 向队列中写入数据是通过字节拷贝,将数据拷贝到队列中;从队列中读取数据也是通过字节拷贝,将数据从队列中拷贝出来。

    说明:读数据分为两种情况:① 读取后,删除队列中的数据;② 读数据后,不删除队列中的数据。

    5. 队列不属于任何任务。所有的任务或中断函数都可以向同一队列写入或读出。一般情况,一个队列可由多方写入,一方读出。

    6. 多个任务因等待同一队列而阻塞,当队列有效时,只能有一个任务会被解除阻塞,这个任务就是所有等待任务中,优先级最高的任务。若优先级最高的任务有多个,那么解除阻塞的态的任务是对待时间最长的任务。

    7. 写队列阻塞同读队列阻塞一样。

    8. 队列传递结构体,实现混合型数据的传递。

    9. 如果队列存储的数据单元较大,最好用队列传递数据的指针,而不是单字节的拷贝,但需要注意以下几点:

    1)指针指向内存空间的所有权必须明确;

    当任务间通过指针共享内存时,必须保证不会有任意两个任务同时修改内存中的数据,或其他行为使得数据无效或产生不一致的现象。

    原则上,共享内存在其指针发送到队列前,其内容只允许被发送的任务间访问,共享内存指针从队列中被读出后,其内容也只允许被接收任务访问。

    2)指针指向的内存空间必须有效。

    如果内存是动态分配的,只应该有一个任务负责对其进行内存释放。当这段内存空间被释放后就不能以任何方式(任何任务),对这段内存进行访问。

    3)不要使用指针访问任务栈上分配的空间。

    因为栈帧发生改变时,栈上的数据将不再有效。

    10. 在中断服务函数中使用队列相关函数,请使用中断安全版本,只有以”FromISR”或”FROM_ISR”结束的API 函数或宏才可以在中断服务例程中,详见参考手册。http://i.cnblogs.com/Files.aspx

  • 相关阅读:
    关闭编辑easyui datagrid table
    sql 保留两位小数+四舍五入
    easyui DataGrid 工具类之 util js
    easyui DataGrid 工具类之 后台生成列
    easyui DataGrid 工具类之 WorkbookUtil class
    easyui DataGrid 工具类之 TableUtil class
    easyui DataGrid 工具类之 Utils class
    easyui DataGrid 工具类之 列属性class
    oracle 卸载
    “云时代架构”经典文章阅读感想七
  • 原文地址:https://www.cnblogs.com/risunlee/p/5300937.html
Copyright © 2011-2022 走看看