QF实时框架:关键特性与实现解析
1. QF源文件设计
QF源文件通常每个文件仅包含一个函数或一个数据结构定义。这种设计旨在将QF部署为一个细粒度的库,可与应用程序进行静态链接。细粒度意味着QF库由多个小型、松耦合的模块(目标文件)组成,而非一个包含所有功能的单一模块。
例如,单独的模块 qa_lifo.c 实现了 QActive_postLIFO() 函数。若应用程序从未调用此函数,链接器将不会引入 qa_lifo.obj 模块。这种策略将在链接时自动消除未使用代码的“繁重工作”交给了链接器,而非让应用程序程序员在编译时为每个应用程序配置QF代码。
2. QF中的临界区
与其他系统级软件一样,QF必须保护某些指令序列不被抢占,以确保线程安全操作。必须不可分割执行的代码段称为临界区。
在嵌入式系统环境中,QF使用最简单、最有效的方法来保护代码段不受干扰,即在进入临界区时锁定中断,在退出临界区时解锁中断。在不允许锁定中断的系统中,QF可以采用底层操作系统支持的其他机制,如互斥锁。
需要注意的是,在临界区花费的最长时间会直接影响系统对外部事件的响应能力(中断延迟)。所有QF临界区都经过精心设计,尽可能缩短,与任何商业RTOS中的临界区处于同一数量级。当然,临界区的长度取决于处理器架构和编译器生成的代码质量。
为了隐藏特定处理器、编译器和操作系统可用的实际临界区实现方法,QF平台抽象层包含两个宏 QF_INT_LOCK() 和 QF_INT_UNLOCK()
QF实时框架关键特性与实现解析
超级会员免费看
订阅专栏 解锁全文
53

被折叠的 条评论
为什么被折叠?



