0%
本文描述 BLE 广播、连接通信的基本模式,并讨论了在实现中比较重要的细节。基于nrf52840 实现了协议栈需要的定时器驱动和radio驱动,并利用定时器和radio的基本功能,实现了在单通道上进行广播。
message buffer 是基于stream buffer构建的一种轻量级消息传递方式,因此使用message buffer和使用stream buffer存在相同的限制:只有一个写,并且也只有一个读。
本文介绍几个 stream buffer 内部的实现细节。
stream buffer 是一种轻量级的数据流传递方式,通过限制只有一个写,并且也只有一个读,使得内部实现逻辑更高效,并且由于只有一个读和一个写,内部实现中需要保护的临界区“很小”,这些都提高了stream buffer传递数据的效率。
Memory Barriers 和 store buffers、invalidate queues
本文介绍使用Task Notification,在一些常见开发场景中来替代二值信号量、计数信号量、event group、以及消息邮箱(存储单个uint32_t数值的邮箱),以提高系统运行效率。
实际应用开发中,系统中最常见的功能需求就是任务和任务间相互传递信息,以及中断服务函数向任务传递信息(例如通知任务发生了按键事件)。并且,需要传递的信息往往很短,例如一个数值或者一个事件标记。 FreeRTOS为这种任务间简短数据传递,提供了一个轻量级的任务通信功能——task notification。
在多核CPU中,由于每个核心有自己独立的cpu cache(L1、L2 cache),所以当某个cpu核心修改了自己cache中的目标数据,但未及时同步给其它cpu核心的cache(同样包含目标数据),就会存在缓存一致性问题。