基于TI-RTOS的CC2650DK开发(22)--- 时间基准

附录 B  时间基准
本附录描述SYS/BIOS函数的时间基准,解释了值的含义及它是如何获得的,使设计者更好地理解系统性能。应用程序通过在SYS/BIOS安装的BIOS_INSTALL_DIR\packages\ti\sysbios\benchmarks目录的源文件目录中生成并运行以下时间基准。

B.1  时间基准
本附录描述SYS/BIOS函数的时间基准,解释了值的含义及它是包含是如何获得的,使设计者更好地理解系统性能。

本节在稍后解释每个时间基准的含义。每个节的名称对应于实际基准数据表中基准的名称。

本附录中的解释最好沿实际基准数据查看,因为实际基准数据依赖于目标和内存配置,并且会发生变化,数据在ti.sysbios.benchmarks包的HTML文件中提供(在BIOS_INSTALL_DIR\packages\ti\sysbios\benchmarks目录中)。

基准数据在 Build-Profile设置为“release”并且BIOS.libType配置参数设置为BIOS.LibType_Custom的情况下收集。见2.4.5节获取更多这些设置的详细信息。

B.2  中断延迟
中断延迟基准是SYS/BIOS内核禁用可屏蔽中断期间的最大时钟周期数。为了修改跨多个线程的共享数据,中断被屏蔽。SYS/BIOS尽可能缩小此时间以获得最快中断响应时间。

中断延迟在SYS/BIOS应用上下文控制内部禁用中断的SYS/BIOS API调用时测量。定时器在应用程序中的每个指令边界触发中断,该延迟被计算为以时钟周期为单位的时间,从向量到中断调度器的第一个指令。注意,这不是从时间到用户ISR的第一个指令。

B.3  HWI - 硬件中断基准
Hwi_enalbe():这是Hwi_enable()函数调用的执行时间,通常用于全局地使能硬件中断。

Hwi_disable():这是Hwi_disable()函数调用的执行时间,通常用于全局地禁用硬件中断。

Hwi调度器:这是Hwi调度器指定部分代码的执行时间。此调度器处理响应中断而运行的C代码。基准在以下情况下提供时间:
  • C函数调用前的中断序言:这是中断发生直到用户的C函数被调用所花费的时间。
  • C函数调用后的中断收尾:这是用户C函数执行完毕直到Hwi调度器完成此项工作并退出所花费的时间。

硬件中断到阻塞task:它计算从ISR提交一个semaphore开始,到执行最高优先级阻塞task的第一个指令结束,期间所使用的时间,如图B-1所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
 
硬件中断到软件中断:它计算从ISR提交一个软件中断开始,到执行被提交的最高优先级软件中断的第一个指令结束,期间所使用的时间。

这个持续时间如图B-2所示。Swi 2由ISR提交,优先级高用Swi 1,所以Swi 1被抢占。Swi 2上下文切换在由Hwi调度器调用的Swi运行器中执行,这个时间也被测量。在这种情况下,通过Hwi调度器保存/恢复寄存器相当于“C”调用者保存寄存器。
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
 
B.4  Swi - 软件中断基准
Swi_enable():这是Swi_enable()函数调用的执行时间,用于使能软件中断。

Swi_disable():这是Swi_disable()函数调用的执行时间,用于禁用软件中断。

Swi_post():这是Swi_post()函数调用的执行时间,用于提交软件中断。以下情况的Swi_post()提供基准数据:
  • 再次提交软件中断:这种情况对应于:一个Swi已经被提交,但未开始运行,此时再次调用Swi_post()提交它,因为它被更高优先级的Swi提交。图B-3显示了这种情况。高优先级Swi 1提交低优先级Swi 2两次,在第二次提交Swi 2时开始测量时钟周期。
  基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 无上下文切换的软件中断提交:这是Swi_post()函数调用的测量,当所提交的软件中断的优先级低于当前运行的Swi。图B-4显示了这种情况:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 有上下文切换的软件中断提交:此测量计算从一个Swi_post()(导致当前Swi被抢占)开始,到执行更高优先级软件中断的第一个指令结束,期间所使用的时间,如图B-5所示。上下文切换到Swi 2是在Swi运行器内执行的,这个时间也被测量。
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
 
B.5  Task基准
Task_enable():这是Task_enable()函数调用的执行时间,它用于使能SYS/BIOS task调度器。

Task_disable():这是Task_disable()函数调用的执行时间,它用于禁用SYS/BIOS task调度器。

Task_create():这是Task_create()函数调用的执行时间,它用于创建一个准备运行的task。以下情况下Task_create()会提供基准数据:
  • 无上下文切换的task创建:正在运行的task创建并准备另一个低或相同优先级task,这不会导致上下文切换。见表B-6:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 有上下文切换的task创建:正在运行的task创建另一个更高优先级的task,导致上下文切换。见图B-7:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
注意:Task_create()的基准假设为Task对象分配的内存在第一个free列表中是可用的,并无其它task锁住那块内存。另外栈已被预分配并作为一个参数传递。

Task_delete():这是Task_delete()函数调用的执行时间,用于删除一个task。由Task_create()所创建的Task句柄传递给Task_delete() API。

Task_setPri():这是Task_setPri()函数调用的执行时间,用于设置task的运行优先级。以下情况的Task_setPri()提供基准数据:
  • 无上下文切换的task优先级设置:当从如图B-8所示的Task1中调用Task_setPri() API时,测量执行时间,并且还需满足以下两个条件:
—  Task_setPri()设置的是处于准备状态的低优先级task的优先级。
—  Task_setPri()的参数小于当前运行task的优先级。
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 降低当前task的优先级,上下文切换:当Task_setPri() API用于降低当前运行的任务的优先级,测量它的运行时间。调用Task_setPri()会导致上下文切换至下一个准备中的更高优先级的task。图B-9显示了这种情况:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 提升一个准备task的优先级,上下文切换:当从任务Task1调用Task_setPri() API并满足以下两个条件时,测量它的执行时间:
—  Task_setPri()设置的是一个更低优先级的准备task的优先级。
—  Task_setPri()的参数大于当前运行task的优先级。
运行时间测量包含上下文切换时间,如图B-10所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • Task_yield():此测量计算从调用Task_yield()(导致当前task被抢占)开始,直到执行下个优先级相同的等待task的第一个指令结束,期间所经历的时间。如图B-11所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客

B.6  Semaphore基准
Semaphore基准在内部测量发布Semaphore_post()或 Semaphore_pend()函数到task重新执行之间的时间,兼具有上下文切换和无上下文切换。

Semaphore_post():Semaphore_post()函数调用的执行时间。在以下Semaphore_post()情况下提供基准数据:
  • 不等待task的semaphore提交:这种情况下,Semaphore_post()函数调用不会导致上下文切换,因为没有其它task在等待semaphore。如图B-12所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 无上下文切换的semaphore提交:这是当一个低优先级task在等待semaphore,Semaphore_post()函数调用的测量。这种情况下,Semaphore_post()让低优先级task准备好等待semaphore,并继续执行原来的task,如图B-13所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  •  有上下文切换的semaphore提交:此测量计算从Semaphore_post()函数调用开始(让高优先级task准备等待sempahore导致上下文切换至高优先级task),直到执行高优先级任务的第一个指令结束,期间所经历的时间,如图B-14所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
 

Semaphore_pend():这是Semaphore_pend()函数调用的执行时间,用于获得一个semaphore。以下情况的Semaphore_pend()提供基准数据:
  • 无上下文切换的semaphore等待:这是无上下文切换(因为semaphore可用)的Semaphore_pend()函数调用的测量,如图B-15所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
  • 有上下文切换的semaphore等待:此测量计算从Semaphore_pend()函数调用开始(导致当前task被抢占),直到下一个更高优先级准备task的第一个指令执行,期间所经历的时间,如图B-16所示:
基于TI-RTOS的CC2650DK开发(22)--- 时间基准 - 阿巴睇 - 阿巴睇的博客
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值