Contiki 的设计目的是在极端低功耗的系统中运行,这些系统甚至可能需要只用一对AA电池能够工作许多年。Contiki 为辅助这些低功耗系统的开发提供了功耗估计和功耗分析机制Energest。
代码分析中多次遇到这个活力评估相关的函数,现在来做简单分析。
遇到的代码中基本上是这样的:
1 | energest_init(); |
1. energest_init
这个比较简单,代码如下:
1 | void |
就是将相关数组中的变量初始化为0。简化分析写做time数组和mode数据。
2. ENERGEST_ON
这个宏展是这样定义的:
1 |
|
这里将time数组中存入当前的RTIMER时间,并将mode置1。而ENERGEST_TYPE_CPU是个枚举变量成员,定义如下:
1 | enum energest_type { |
3. ENERGEST_OFF
宏定义如下;
1 |
|
ENERGEST_OFF(ENERGEST_TYPE_IRQ);展开后:
1 | if(energest_current_mode[ENERGEST_TYPE_IRQ] != 0) |
这里做的是将RTIMER_NOW得到的时间减去执行ON时存入current_time的时间,并将差值存入total_time中。也就是说这个total_time中存的是某类代码的活跃时间。