一个博主翻译的内核 原文地址:TI-RTOS Kernel (SYS/BIOS) User's Guide
-
线程间通信和同步的结构:信号量、邮箱、事件、门、可变邮箱等
-
如果要删除一个项目要删除干净,如果旧项目的.cfg文件在另一个工程里面,要一起删除
-
要查看是否有内存泄漏或者其它意外情况,可以在仿真模式下,点击ROV选中BIOS模块的Scan for errors会扫描所有模块可能存在的问题,如下图
-
如果要添加可视化视图,先在右上角点击Add-on views 选择好试图,再在上面选择open other view
-
ROV页面如果要一直刷新要点击重复刷新
-
SYS/BIOS 包提供的APIs命名格式: Module_actionDescription(). 例: Task_setPri()
-
API查找位置:View-Resource Explorer-Software-使用的SDK-Documents-Documentation Overview-TI-RTOS Kernel-TI-RTOS Kernel Runtime APIs and Configuration
-
TI-RTOS组成如下图:
-
软件中断对象必须从main()函数或Task线程的上下文中创建,不能在其它地方创建
-
正在运行的线程可以通过 Task_disable() 暂时停止,直到被重新使能
-
当运行Hwi或者Swi, SYS/BIOS 使用系统堆栈(ISR stack),每个任务使用私有堆栈,没有任务使用系统堆栈
-
关于线程优先级,参考下图,第一列是正在运行的线程;左侧是新发布线程,动作是新发布线程动作
-
钩子( Hooks ):线程的生命周期中提供了一些点允许用户为了监测插入一些代码
- 钩子只能静态创建
- 钩子可以创建多个为钩子集,使用时根据ID进行索引
- 每一组钩子函数都有一个关联上下文的指针,这个指针可以进行初始化,也可以对它进行内存分配
- 下图为3个钩子集
-
SYS/BIOS 可以用在多处理器(SMP)系统上,比如TI的多核M3/M4和多核A15子系统; BIOS, Core, Task, Idle, and Hwi modules 中有API配置和参数用来控制这些多核行为
-
关于硬件中断(Hwi):
- 硬件中断用于处理应用程序的关键步骤,有Hwi模块用来处理
- 当有片上外围设备或片外设备触发中断时,处理器会指向ISR寄存器地址
- 中断处理程序用C或者C++编写, HWI_enter()/HWI_exit() 宏定义在早期版本用来调起汇编语言,现在没有了
- Hwi被发布了多次,只执行一次,所以代码要尽量短;通过创建Hwi对象,可以将其和特定ISR函数关联起来
- 频繁失能硬件中断(多个硬件中断处理共享数据结构情况下)会降低操作系统特性
-
关于软件中断(Swi):
- 当多个相同优先级的Swis被发布,它们各自的Swi函数按照Swis发布的顺序执行
- 当一个Swi开始执行,它必须无阻塞的运行到完成,当Swi在等待某件事情(比如一个设备)完成时,不能挂起它
- Swi必须由Hwi对象调用的函数触发
- 线程优先级数量也就32(Task)+32(SWI)和数个HWI,但是任务数量没找到严格的限制
- Swi_post(), Swi_or()和Swi_inc()无条件地发布一个Swi对象
- 当使用Swi_post()发布Swi时,不会修改Swi对象触发器的值
- Swi_or()设置触发器中由掩码确定的位,掩码作为参数传递,然后发布Swi
- Swi_inc()在发布Swi对象前,将Swi的触发器值加1
- Swi_andn() 和 Swi_dec() 在只有Swi的触发值为0时才发布Swi对象
- Swi_andn()清除触发器中作为参数传递的掩码确定的位
- Swi_dec() 将触发器的值减1
-
使用Swis代替Hwis的好处:
- 通过禁用软件中断可以在任务获取共享数据结构时达到一个互斥锁的效果
- Hwi处理一些紧要的操作,比较长的中断处理函数放到里面处理不过来