F103通信框架
要解决的问题:
有一个愚蠢的问题,write发布消息,read读取消息。然而read读取的消息:
- 不能是全局变量。
- 有优先级
- 不能丢失数据,被覆盖
- 最好不加锁
-
发布订阅者模式
write 发布一个指针 ,由订阅者读取指针指向内容。
但,如果发布后,订阅者线程优先级较低,有较大延迟才会实际read。然而,发布者早已有发布新信息。这样会造成read不及时,而丢失信息。
所以此模式,需要read尽快读取并处理。
a. 为了尽快read处理,所以都是用回调方式运行read。
b. 为了read也区分紧急处理,一般处理,所以回调函数的指针,存储到队列里,优先级越高的回调,越排位靠前。
d. 为了解决消息瞬时拥挤。考虑增加write发布指针时,有message_buffer[1024],有publish 的消息(指针)的topic_buffer[10]。
c. 如果优先级较低的read处理不过来,write就又刷新了消息。则确实是处理不过来。 -
不加锁串行queue
| none | msg1_head | msg1_data | msg1_end | msg2_head | msg2_data | msg2_end | msg2_head | msg2_data | msg2_end | msg_urgent_head | msg_urgent_data | msg_urgent_end | -
不加锁并行queue
如果queue push的copy_message, 则就这样。
如果queue push的share_ptr,则需要reader_count.