消息队列(queue)
在不同的任务之间,如果我们需要互相之间通信,使用全局变量进行通信,是一种不安全的通信的方式。为保证线程安全,我们需要引入消息队列的通信方式。
粗暴的消息队列
为保证线程的安全,在FreeRtos使用消息队列进行读写时,如果要实现互斥访问,我们都会采取关中断的操作。
在我们进行读写数据时采用环形缓冲区类似循环指针,会有俩个指针,一个是读指针用于指示当前队列存在的最早消息,一个是写指针用于指示当前可以写的队列的位置。如果读指针为空代表当前列表没数据,如果写指针不为空代表当前没有位置可写。
这俩种情况都需要进入俩个等待队列,一个是等待读队列,一个是等待写队列。当读操作完成后,会唤醒等待写队列的任务,提示当前列表不为空;当写操作完成后,会唤醒等待读队列的任务,提示当前列表有数据了。