TinyOS08:Avrora学习笔记
来源:互联网 发布:传奇盛世的战旗数据 编辑:程序博客网 时间:2024/04/27 21:42
Avrora的mailing-list
http://www.mail-archive.com/avr-chat@nongnu.org/maillist.html
http://lists.ucla.edu/cgi-bin/mailman/listinfo/avrora
avrora –action=simulate simple.od
action的缺省值,等价于:$avrora simple.od,没有output
-interrupt-schedule,用法
- 例如:
java -jar avrora.jar -colors=false -simulation=sensor-network -update-node-id=true -monitors=ExecutionMonitor -seconds=$time -platform=mica2 -interrupt-schedule=../inputs/sche$i.txt -nodecount=1,1 ../versions/versions.orig/main.od ../testdrivers/main.od
- sche$i.txt文件的格式:
中断向量号1 调度的时刻Cycle1
中断向量号2 调度的时刻Cycle2 - 与interrupt-schedule相关的类文件:
1、avrora.sim.simulation.java 文件
interrupt-schedule选项会指定一个文件,这个文件描述了何时将中断(特别是外部中断)提交给程序的interrupt schedule。适用于测试含有中断的程序测试
2、avrora.sim. util.InterruptScheduler文件:
InterruptScheduler类是文件中读取一个中断调度的测试程序类,并在在特定的时间将中断提交给simulator;
3、forceInterrupt()方法强迫模拟器提交特定的中断给程序,也就是说强迫程序处理特定的中断。
3、 enable()方法:中断使能的时候解释器会调用该方法;中断table将会调整和提交pending掩码,并且通知中断中的probes插桩。
4、force()方法:解释器回调用该方法强迫模拟器提交一个中断
5、interruptable.java中interrupts成员变量存数了一个队中断表的引用,中断表包含了单片机中中断向量的信息,这些中断向量能处于使能、失能、提交状态 + 中断表允许插桩中断或者网单独中断中插桩探针,当中断状态改变的时候会触发探针的执行。
6、Notification接口:中断提交后通知设备的执行,或者用户强迫设备执行中断时,即中断自动提交让中断处理程序执行时用到该接口。 - 中断向量表:其定义在…\avrora\CVS_519_avrora\src\avrora\sim\mcu\ATMega128.java中
addInterrupt(interruptAssignments, "RESET", 1); addInterrupt(interruptAssignments, "INT0", 2); addInterrupt(interruptAssignments, "INT1", 3); addInterrupt(interruptAssignments, "INT2", 4); addInterrupt(interruptAssignments, "INT3", 5); addInterrupt(interruptAssignments, "INT4", 6); addInterrupt(interruptAssignments, "INT5", 7); addInterrupt(interruptAssignments, "INT6", 8); addInterrupt(interruptAssignments, "INT7", 9); addInterrupt(interruptAssignments, "TIMER2 COMP", 10); addInterrupt(interruptAssignments, "TIMER2 OVF", 11); addInterrupt(interruptAssignments, "TIMER1 CAPT", 12); addInterrupt(interruptAssignments, "TIMER1 COMPA", 13); addInterrupt(interruptAssignments, "TIMER1 COMPB", 14); addInterrupt(interruptAssignments, "TIMER1 OVF", 15); addInterrupt(interruptAssignments, "TIMER0 COMP", 16); addInterrupt(interruptAssignments, "TIMER0 OVF", 17); addInterrupt(interruptAssignments, "SPI, STC", 18); addInterrupt(interruptAssignments, "USART0, RX", 19); addInterrupt(interruptAssignments, "USART0, UDRE", 20); addInterrupt(interruptAssignments, "USART0, TX", 21); addInterrupt(interruptAssignments, "ADC", 22); addInterrupt(interruptAssignments, "EE READY", 23); addInterrupt(interruptAssignments, "ANALOG COMP", 24); addInterrupt(interruptAssignments, "TIMER1 COMPC", 25); addInterrupt(interruptAssignments, "TIMER3 CAPT", 26); addInterrupt(interruptAssignments, "TIMER3 COMPA", 27); addInterrupt(interruptAssignments, "TIMER3 COMPB", 28); addInterrupt(interruptAssignments, "TIMER3 COMPC", 29); addInterrupt(interruptAssignments, "TIMER3 OVF", 30); addInterrupt(interruptAssignments, "USART1, RX", 31); addInterrupt(interruptAssignments, "USART1, UDRE", 32); addInterrupt(interruptAssignments, "USART1, TX", 33); addInterrupt(interruptAssignments, "TWI", 34); addInterrupt(interruptAssignments, "SPM READY", 35);
avrora –monitors
http://compilers.cs.ucla.edu/avrora/help/monitors.html
常见的-monitor命令
avrora–monitors=trace:逐条输出所执行的汇编指令 avrora –monitors=calls:输出 调用CALL-返回RET 序列 (包括Interrupt)
$avrora -monitors=real-time:是模拟器的执行速度尽可能与实际情况接近;$avrora -monitors=interrupts
http://lists.ucla.edu/pipermail/avrora/2005-December/000312.html
1、Invocations: 调用次数
2、Separation: 两次interrupt Invocations之间的平均间隔时间(clock cycles)
3、Latency: interrupt的Posting和Invocation之间的平均延迟时间(原因:中断被posted后,被disabled或者有高优先级的中断)
4、Wakeup:interrupt的triggering和开始执行interrupt service routine之间的平均延迟时间- 2.此命令的实现见avrora的源码 src\avrora\monitors\InterruptMonitor
- 实现中用到的API:
http://compilers.cs.ucla.edu/avrora/api/current/avrora/sim/Simulator.InterruptProbe.html
1、类Simulator的接口InterruptProbe有如下的方法:
- 实现中用到的API:
package avrora.sim;public class Simulator { ... public interface InterruptProbe { public void fireBeforeInvoke(State s, int inum); public void fireAfterInvoke(State s, int inum); public void fireWhenDisabled(State s, int inum); public void fireWhenEnabled(State s, int inum); public void fireWhenPosted(State s, int inum); public void fireWhenUnposted(State s, int inum); }}
2、inum是中断号。被探测的Interrupt可以是任何种类的中断:reset,外部interrupt,设备interrupt。
3、当inum为0时,表示“所有的中断’,如 fireWhenDiabled(s, 0)。注意程序通过改变master bit来enable/disable All interrupts。
- -invocations-only: boolean = true:只打印指定中断的调用次数;
- show-interrupts: boolean = false:打印每一个中断的状态变化;
断点
http://compilers.cs.ucla.edu/avrora/simulator.html
$avrora -monitors=interactive -breakpoints=foo simple.od
设置断点, 到达断点时终止程序的执行-breakpoints 断点 : 十六进制字节地址;
Instrumentation
自定义monitor程序实现instrumentation
没弄懂→_→
三种插桩技术
- Probe:插装code (针对某指令instruction)
例如:-profile,-calls,-trip-time - Watch: 插装data (针对某内存变量的读写)
例如:-memory - Event: 插装time (针对某个时间点,是由时间触发的插装)
例如:-monitor=packet
有限状态机
FiniteStateMachine接口允许用户在模拟中状态转变中添加变迁行为;
插桩广播模拟
模拟整个传感器网络,包括数据报通过radio的发送和接收;
例如:-monitor=packet
-monitors=c-print
http://docs.tinyos.net/index.php/Avrora#Monitors_in_Avrora
- 使用avrora-cvs-1.7.111版本
1、修改.bashrc
2、修改Windows下面的CLASSPATH为使用avrora-cvs-1.7.111.jar
3、注意:修改后,要重启电脑 - 复制CVS_519_avrora\src\avrora\monitors\AvroraPrint.h到应用程序目录,例如demo\blinkP\AvroraPrint.h。
1、此文件的注释中包含了使用说明 + 可使用的print语句:
rintChar('a');printInt8(44);printInt16(3333);printInt32(55556666);printStr("hello world");printHex8(0xFF);printHex16(0xFFFF);printHex32(0xFFFFAAAA);
- 在C:\cygwin\home\Sabrina Sun\avrora\demo\blinkP\blinkC.nc中加入上述print语句。然后 make mica2。最后将生成main.exe更名为 Blink.elf。(注意:文件名可以任意取名,但扩展名要使用.elf, 而不能使用.od)
- 4.-monitors=c-print 显示print语句的结果
-printlogfile=log3 将print的结果写入当前目录的文件log3中,文件名自定义
-monitors=leds ,是缺省值,显示led的结果(如下蓝色部分)
Log3内容: - 5.注意: http://docs.tinyos.net/index.php/Avrora#Monitors_in_Avrora 的说明有问题: 它使用了 –VariableName ,反而不能正确运行!
- TinyOS08:Avrora学习笔记
- Avrora学习笔记(官网)
- TinyOS08:在Avrora上运行Sentomist的三个实验
- TinyOS06:Avrora的Mailing List
- TinyOS05:Avrora的安装及简介
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- bootstrap之notification消息提示应用
- Android GUI 之日期选择器(DatePicker)
- 将博客搬至CSDN
- PHP - 解决 php-cgi 启动时提示缺少 msvcr110.dll 的问题
- Runtime 使用实例
- TinyOS08:Avrora学习笔记
- CentOS 6.3安装MySQL 5.7.10(rpm方式)
- weblogic开启开发者模式
- iOS个推消息推送的使用
- Android SDK开发包国内下载地址
- 学习笔记2: Activity的启动模式
- Spring中Quartz的配置
- eclipse导入工程时提示Invalid project description
- 调用系统电话