Special特刊:无线技术41在高度时间敏感的低功耗蓝牙应用中使用 RTOSBLE设计可以在几十μs内禁用中断,同时轻松处理RTOS之外的高度时间关键性事件Micrium创始人、Silicon Labs公司软件架构师 JEAN J.LABROSSE
当您设计嵌入式系统时,您需要回答的问题之一是您的应用程序是否需要实时操作系统(RTOS)。许多嵌入式设计人员已经避免使用RTOS内核,因为他们担心内核在处理关键部分时会禁用中断,并且可能会阻止在时间敏感的应用程序中满足最终期限。
“抢占式”的,这意味着内核始终去执行将要运行的最重要的任务。抢占内核也是事件驱动的,这意味着任务旨在等待事件发生才能执行。事件发生时,任务执行并执行其功能。如果任务正在等待的事件没有发生,则内核运行其他任务。等待任务的过程并不消耗CPU时间;内核允许您去避免使用轮询循环,
什么是RTOS
RTOS是一款能够尽可能有效地管理处理单元(CPU),微处理单元(MPU)甚至数字信号处理器(DSP)的时间的软件。大多数RTOS内核都是用C编写的,并且需要用汇编语言编写的一小部分代码来使内核适应不同的CPU架构。
内核为程序员提供了许多有用的服务,包括多任务、中断管理、任务间通信和信令、资源管理、时间管理和内存分区管理。应用程序基本上会被分为多个任务,每个任务负责一部分应用程序。一项任务是一个简单的程序,它认为它拥有CPU本身。根据任务的重要性为每个任务分配一个优先级。
大多数用于嵌入式系统的内核都是
低功耗蓝牙(BLE)
物联网设备越来越多地配备BLE链因为这是对CPU时间的不良使用。
许多嵌入式程序员害怕使用RTOS内核,因为他们担心内核会增加其应用程序的复杂性。事实证明,使用RTOS内核后,你只需要少量的服务就可以让你的项目开始实施。至于开销,RTOS确实可能需要CPU资源的2%~5%来执行其职责。但更重要的是,在进入临界区时RTOS需要禁用中断。根据CPU本身,时钟频率及内存访问是否需要等待状态,RTOS可以禁止几十μs的中断。对于大多数嵌入式应用来说,这个通常不是问题,但是当每一μs都很重要时就可能会产生问题。
路,因为当与智能手机或类似的手持设备结合使用时,BLE使这些物联网设备的调试和配置简单方便。
BLE可以具有多种操作模式、多个连接、多个广告用户等,其中一些甚至可以重叠。
扫描模式:设备扫描其他设备发送的广告数据包。扫描包括扫描间隔和设备正在侦听的时间窗口之间的时间间隔。扫描仪在每个时间间隔更改频道频率。在收到请求后150μs内需要做出响应。这称为帧间空间(IFS)。
广告模式:BLE设备也可以自行执行广告,可能发生在20ms~3h之间。
连接模式:主设备以每个连接间隔发送一个数据包,BLE从设备在150μs后响应主设备,即IFS。如果主设备有其他要发送到从设备的信息,它会在150μs后发送一个数据包给从设备。设备互相发送数据包,直到没有数据要发送。
对于32位CPU来说,150μs似乎是一个很长的时间,但处理传入请求时需要做很多事情。数据包具有流量控制信息,可以指示从另一端请求的序列号;
www.epc.com.cn · 2018年7月 · 今日电子
42特刊:无线技术可能存在需要过滤处理的地址白名单。
过了RTOS内核。nKA ISR比内核感知实际上,执行这些操作需要120μs(KA)ISR具有更高的优先级。
~130μs的CPU时间。如果一个数据包图1显示了典型Cortex-M3 CPU在150μs内无法处理,通常会发生任何的ISR和任务的优先级。如果RTOS需不良情况;数据吞吐量可能会稍微下降要保护关键部分,它会将Cortex-M3 或打开连接可能会延迟。从客户的角度CPU的BASEPRI寄存器设置为0x40,来看,这种行为与无线电干扰差不多。从而禁用优先级为0x40及以下的KA 但是,不断错过这一最后期限不是一种ISR。因为0x00和0x20的优先级较高,选择,因为它会使最终产品无法使用。
所以即使RTOS位于临界区中间,它们也将被允许中断CPU。
BLE应用中的RTOS
因此,时间敏感的BLE ISR可以简如果一个RTOS可能会中断几十单地分配优先级0x00或0x20,并且当μs,那么为什么你会考虑在基于BLE它们发生时,将立即处理它们,而不用的应用程序中使用一个?那么,答案考虑低优先级ISR或任务的状态如何。
是这些时间关键事件可以在RTOS之外有可能任务会为nKA ISR提供设轻松处理。特别是,可以在RTOS范置信息——操作模式、配置等。nKA 围之外分配特定的时间敏感中断服务ISR还可能需要在任务级别执行进一步程序(ISR)。这些被称为非内核感知的非时间关键处理。因此,如果nKA (nka)ISR,顾名思义,它们只是绕
ISR不允许进行任何RTOS API调用,
那么nKA ISR如何与任务进行通信?设置共享内存相当简单,如图2所示。
nKA ISR将信息存入与其共享任务的记忆中。由于nKA ISR不能进行任何RTOS API调用,因此需要触发KA中断,然后该中断将被允许进行内核调用。ARM Cortex-M CPU的嵌套向量中断控制器(NVIC)允许系统设计人员做到这一点,但设计人员需要识别未被应用程序使用的I/O设备并窃取其中断向量以用于此目的。
图1 Cortex-M3 CPU上的ISR和任务优先级
因此,KA ISR可以通知
今日电子 · 2018年7月 · www.epc.com.cn
Special任务,让它知道数据在共享RAM中可用。
当所有的ISR都完成,并且RTOS已经决定信号任务是最高优先级时,任务可以读取由nKA ISR发送给它的数据。
该任务可以根据需要为nKA ISR在共享区域存放信息,该区域只能由nKA ISR读取。数据写入共享RAM,
图2 nKA ISR和任务之间的通信
但只有在设置了“数据可用”标志时才能读取。ARM Cortex-M3 CPU和上述处理器具有特殊指令,可确保设置或清除“数据可用”标志可自动完成,以防止竞争条件并且不必禁用全局中断。
nKA ISR将轮询该任务提供的数据。这通常不是问题,因为无论如何nKA ISR都会发生这种情况。
总结
RTOS和像BLE这样的时间敏感应用可以通过制作非内核感知的时间敏感的ISR来轻松共存。使用类似于此的方案可确保时间关键型代码不受RTOS存在的影响。同时,RTOS可以最有效地使用CPU来处理时间不敏感的代码。