在实际的应用中,常会遇到一个任务或者断服需要和另外进 在实际的应用中,常会遇到一个任务或者断服需要和另外进 行“沟通交流”, 行“沟通交流”, 行“沟通交流”, 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 的过程。在 的过程。在 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 在使用 操作系统的 操作系统的 应用中 应用中 用全局变量 用全局变量 来传递消息 就会涉及到“资源管理”的问题。 就会涉及到“资源管理”的问题。
1、什么是队列
队列是为了任务和任务直接进行通信,一般采取FIFO(先进先出)的缓冲机制。也可以使用LOFO(先进后出)的缓冲机制。在传递时采用值传递的方式进行传输。不使用数据引用。采用值传递的方式消息必须一直可见,即:消息内容必须有效。
队列不属于某个特定的任务,所有任务都可以使用队列,在任务在读取队列数据的时候,都可以指定一个阻塞时间,这个阻塞时间就是当任务从队列里读取消息无效的时候任务阻塞的时间。出队就是从队列里读取消息,出队阻塞是针对从队列中读取消息的任务而言的。
入队阻塞:入队说的是向队列中发送消息,将消息加入到队列中。和出队阻塞一样,当一个任务向队列发送消息的话也可以设置阻塞时间。比如任务B 向消息队列Q 发送消息,但是此时队列Q 是满的,那肯定是发送失败的。此时任务B 就会遇到和上面任务A 一样的问题,这两种情况的处理过程是类似的,只不过一个是向队列Q 发送消息,一个是从队列Q 读取消息而已。
队列操作图示:
图 13.1.4中任务 中任务 B从队列中读取消息, 从队列中读取消息, 并将读取到的消息值赋给 y,这样 y就等于 10了。任务了。任务 B从队列中读取消息完成以后可选择清除掉这个或者不。 当选择清除这个 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 3。如果 不清除的话其他任务或中断也可以获取这个消息, 而队列剩余大小 依旧是 2。
这两张图清晰的展示了队列的操作过程,了解队列的机制即可,有关队列的创建,初始化,队列的复位等函数查阅相关资料。不在详细赘述。
2、向队列发送消息:
FreeRTOS一共有8个函数向队列发送数据。具体如下表:
函数详解看手册或查资料。注意这些函数一般都需要打开宏来支持。
原文:http://www.cnblogs.com/daidong805/p/7518407.html