Avrora學習筆記(官網)

Avrora:有精確時鐘特性可擴展的傳感器網絡模擬器。
Avrora總的來說既是一個傳感網程序的模擬器,也爲傳感網程序提供了一個分析框架。

1-platform=micaz:指定程序運行的節點模擬平臺,包括外部設備例如:LEDs和radio。默認是mcu處理器平臺。
2、help:幫助命令
3-simulation=single/snesor-network:設置模擬的類型(單一結點的模擬 + 傳感器網絡的模擬(多節點的模擬))
4-seconds=long:程序模擬執行指定時間之後終止執行。
5-monitors=trace:通過打印執行的指令來跟蹤整個程序的執行(Blink程序設置了終止的時間還是會出現死循環打印指令);
6、monitors=calls:跟蹤程序執行時的調用/返回行爲(包括終端信息)
7、monitors=energy(energy-log、energy-porfile):跟蹤能源的消耗
8、monitors=gdb:gdb監測程序實現了GNU遠程串行協議。服務端會創建一個GDB能連接的服務端socket,並且能夠發送命令給Avrora。這允許gdb使用一個前端來調試Avrora中的程序;
9、monitors=interactive:允許用戶與執行中的程序進行交互,包括插入斷點、觀測點、和觀察模擬的狀態(目前只支持在斷點處終止程序的執行)
10、monitors=interrupts:跟蹤中斷的狀態改變,包括中斷提交、啓動和調用。
    1)-invocation-only:(true):指定這個選項之後,只會打印指定調用的中斷,而不會打印使能,失能、提交和非提交的中斷。
    2-show-interrputs:(false):指定這個option後會打印每一個發生狀態變化的中斷。
11-monitors=ioregs:跟蹤IO寄存器的更新(涉及到的設備有timer、UART、SPI等)
12-monitors=memory:手機程序內存使用信息;
13-monitors=packet:跟蹤結點數據包的發送和接收信息;
14-monitors=profile:分析程序每一條指令的執行歷史,並對所有的真靈生成一份執行頻率的文本報告;
15-monitors=real-time:減緩模擬器的執行速度,使之與實時的情況接近;
16-monitors=serial:允許模擬中結點的串行端口號連接到一個socket。使得模擬程序中的數據能夠輸出,外部數據也能通過串行端口輸入到程序中;
17-monitors=simpref:通過定期記錄模擬執行週期和消耗的總時間來分析模擬器的性能。
18-monitors=sleep:跟蹤程序睡眠模式的數據,包括awake的週期數和asleep的週期數;
19-monitors=stack:分析程序執行所需的最大棧高度;
20-monitors=trip-time:分析從一個點到另一個點的執行時間信息。

與單一結點模擬相關的option

1-clockspeed(long=1000):當platform未指定的時候設置單片的時鐘頻率(CPU的運行速度);
2-external-clockspeed(long):當platform未指定的時候設置單片的外頻;
3、interrupt-schedule(string):該option指定一個文件的文件名,這個文件包含了用於描述何時提交中斷(特別是外部中斷)到程序中的中斷調度序列。
4-mcu(string=atmegal128):從庫中選擇單片機;
5-monitor(list):list:指定一系列的監測程序;
6-platform(string):指定單片機構建的平臺,默認是mcu,也可以指定外部設備平臺例如LEDs、radio。
7-random-seed(long):爲模擬器植入僞隨機數生成器。如果值爲非0,那麼這個數就用於植入可重複的模擬結果。如果沒有指定值,依賴於隨機數的模擬部分將會植入基於系統的選擇。
8-second(double):指定事件之後結束執行。

與多節點模擬相關的option

1-clockspeed(long=8000000):當platform未指定的時候設置單片的時鐘頻率(CPU的運行速度);
2-external-clockspeed(long=0):當platform未指定的時候設置單片的外頻;
3、interrupt-schedule(string):該option指定一個文件的文件名,這個文件包含了用於描述何時提交中斷(特別是外部中斷)到程序中的中斷調度序列,多節點模擬時爲04-mcu(string=atmegal128):從庫中選擇單片機;
5-monitor(list):list:指定一系列的監測程序;
6-nodecount(list=1):用於指定要實例化的結點數,例如list=1,2”表示一個節點加載第一個程序,+ 有兩個節點加載第二個程序。
7、platform(string):指定單片機構建的平臺,默認是mcu,也可以指定外部設備平臺例如LEDs、radio。
8-random-seed(long):爲模擬器植入僞隨機數生成器。如果值爲非0,那麼這個數就用於植入可重複的模擬結果。如果沒有指定值,依賴於隨機數的模擬部分將會植入基於系統的選擇。
9-random-start:interval:爲每一個節點啓動前插入一個隨機的延遲來避免人工級別的同步,啓動延遲是在指定間隔中的一個僞隨機選擇。
10-second(double):指定事件之後結束執行。
11、sensor-datalist:這個選項對每一個傳感器節點輸入數據的描述(有固定的格式)。
12、stagger-start(long=0):爲每一個節點啓動前插入一個隨機的延遲來避免人工級別的同步,啓動延遲時間第一個爲X,第二個爲2*X...13-topoloy(string):用於指定一個包含網絡拓撲結構的文件,指定之後,自由空間radio模型會對radio的廣播建模
14-update-node-id(boolean=true):用於嘗試更新存儲在閃存中的結點標識符

-help all

-help action:Avrora中action的幫助命令;
2-help analyze-stack:調用內置的棧分析工具。它使用一個抽象的程序編譯來確定沒每一個程序點的可能中斷碼,並且確定中斷最壞棧深度;
3-help atmel:atmel能讀取彙編語言格式的程序(幾乎可以支持所有指令,除了宏);
4-help auto:auto能讀取一個文件中的程序,用戶根據擴展名確定要讀入的文件類型,譬如Atmel編譯程序語法的文件.asm;
5-help calls:
6-help cfg:構建程序對應的控制流圖,有兩種方式:文本格式 + 點圖格式;
7-help dbbc:測試Avrora中動態基礎快編譯程序操作,它會動態地將AVR代碼編譯成Java源代碼。
8-help -energy(energy-log/energy-profile9-help gas:讀取GAS格式的彙編語言程序
10-help gdb;
11-help gui:啓動模擬GUI與用戶交互;
13-help input:支持程序的輸入格式;
14-help interactive、interrupt、ioregs;
15-help isdl:調用指令集描述語言處理工具(ISDL),ISDL用力啊描述Avrora中AVR指令集和生成編譯程序和反彙編程序;
16-help isea:調用內部程序副作用分析工具;
17-help memory、monitors;
18-help objdump:讀取由avr-bunutils提供的avr-objdump程序輸出程序;
19-help odpp:讀取由avr-bunutils提供的avr-objdump輸出程序,並且改程序被Avrora預處理器預處理過的程序;
20-help packet、profile、real-time、sensor-network、serial、simperf、simulate、simulations、single、sleep、stack
21、help test:

Avrora中的action
通過action命令行來調用Avrora提供的功能;譬如說:編譯文件、打印列表、執行模擬、運行分析工具等

1-action=analyze-stack:調用內置的棧分析工具,這個工具可以確定在每個程序點可能的中斷位 + 也可以確定中斷的最壞情況下深度
①、-dump-state-space:這個option會使得棧分析工具打印所有可達的抽象狀態,包括狀態之間的邊;
②、-monitor-state:該option用於監測長期運行過程棧分析問題。分析器會記錄每隔五秒產生的狀態、邊和廣播信息。
③、-reserve:該option用於在開始分析之前保存一小部分的內存以防Java堆空間被耗盡
④、-show-path:該option棧分析器打印最大棧深度的執行路徑;
⑤、-trace:該option使得分析器產生的抽象狀態、狀態直接的邊記憶所有分析過程中的傳播的執行。
⑥、-trace-summary:通過總結-trace跟蹤最大棧深度來減少-trace選項的輸出結果(在不改變棧深度的情況下不彙報相鄰之間間的狀態來達到減少輸出結果的目的)
⑧、-use-isea:啓動內部過程副作用分析的信息使用,在不減少堆棧分析精度的情況下減少狀態探索的內存使用情況,當啓用該選項時,堆棧分析器將訪問ISEA分析子系統用於程序的過程調用。

2-action=cfg:構建程序對應的控制流圖,有兩種方式:文本格式 + 點圖格式;
①、-collapse-procedures:該option適用於點圖格式的cfg,指定該option爲true時顯示程序的控制流圖,並將整個程序以單一結點的輸出;
②、-color-procedures:爲點圖格式的cfg着色;
③、-file:指定點圖格式的輸出文件,如果該option未指定,則在終端打印文本格式的cfg
④、-group-procedures:將點圖格式的cfg壓縮成子圖;
⑤、-output:指定cfg的輸出格式,例如值爲dot時爲點圖格式的cfg。

3、isdl:該action調用Avrora內部的ISDL(指令集描述語言)處理工具來描述AVR指令集並且聲稱編譯程序和反編譯程序;
①、-codemap(規範):指定文件生成的codemap(規範),該codemap(規範)用於動態基本塊編譯程序和指令的依賴分析;
②、-disassembler:指定生成反彙編程序的目標文件,該反彙編器將二進制流數據解碼成源碼級指令;
③、-disassembler-tests:指定生成編譯程序測試用例的目錄。這些測試用例視圖覆蓋一個合理的用於測試反彙編程序生成器正確性的部分。
④、-inline:該option控制是否ISDL處理器會內聯所有的子程序;
⑤、instr-line:指定生成Instr類的目標文件,未指定,則不生成。
⑥、interpreter:該option用於指定生成解釋每一個指令的目標文件,未指定則不生成。

4、isea:該action調用內部過程副作用分析工具;
①、-procedure:指定該option後,ISE分析工具將會分析指定的過程而不是整個程序。

5、odpp:“odpp”輸入格式讀取“avr-objdump”程序的輸出,該“avr-objdump”程序由avr-binutils提供並且被Avrora預處理器程序處理過(What the  fuck)
①、-indirect-edges:該option用於指定程序間接調用和跳轉的程序,可用於棧分析或者構建cfg

6、simulate:單一結點的模擬和多節點的模擬
①、-report-seconds:以秒爲單位而不是以時鐘週期爲單位打印模擬器的所有次數(what the fuck);
②、-seconds-precision:設置爲報告模擬事件次數的精度
③、-simulation:模擬器類型。

7-test:調用運行測試用例內部自動測試框架,使用迴歸測試方法診斷錯誤。
①、-detail:該option指定自動測試框架是否報告詳細失敗測試用例的詳細信息。

input action

1-input=atmel
①、-indirect-edges
2、input=auto
①、-indirect-edges
3、input=gas
①、-indirect-edges

4、input=objdump
①、-indirect-edges```
②、-sections:該option指定加載器從輸出中加載的一系列sections。
5、input=objdump
①、-indirect-edges

What is Avrora

  1. Avrora:Avrora爲Atmel和Mica2傳感器節點中AVR單片機程序提供的的一款仿真和分析工具;
  2. Avrora是一個用於仿真和分析嵌入式程序的框架;
  3. Avrora提供了一個用於嵌入式程序的分析、實驗的Java API。

why is Avrora

  1. 在嵌入式系統的開發週期中,Avrora提供了仿真功能,能夠獲得的單片機程序詳細的動態執行信息和軟件問題的診斷信息;
  2. Avrora提供了一個嵌入式程序的分析框架:Java 實現 + Java API 。

What can Avrora do for me?

1. 模擬器功能
1、 Avrora提供了一個嵌入式程序週期精確執行時間的模擬器;
2、訪問Avrora模擬器使用-action=simulate默認命令;
Avrora通過模擬程序分析結果,Avrora能夠啓用不同的跟蹤模式來輸出相應的模擬結果。
3、Avrora執行程序並且報告模擬結果,默認情況下,Avrora不會產生任何輸出,但是Avrora提供了不同的tracing模式來輸出Avrora相關的模擬結果。

1.1:tracing模式:

  1. Avrora默認情況下不會產生任何輸出,但是Avrora可以根據不同的命令行模式輸出程序執行過程中的各種狀態信息。
    1.2:tracing監測程序(指令)
    -monitors=trace命令會打印程序執行的每一個指令和模擬結束時指令執行的總數。

    1.3:調用監測程序(調用/返回(中斷 ))
    -monitor=calls命令會打印程序執行時調用和返回行爲(包括中斷)
    1.4: 詳細模式(這個好像官網說是被phased out of Avrora)
    1、-verbose命令會打印模擬器各個部分的相關信息,包括:設備信息、中斷信息、事件信息:
    一些詳細的”channels”命令集:
    這裏寫圖片描述
    2、-verbose=verbose會執行你想要的verbose channel
    3、-verbose=all啓用所有的verbose channels 輸出信息;
    4、可以指定多個verbose channels,例如:verbose=sim.event,sim.interrupt

  2. Avrora1.40之後會打印事件執行時相應結點的ID和時鐘週期時間。這有助於調試時鐘問題和跟蹤哪一個節點執行了哪個事件。

2、Avrora模擬監測

  1. Avrora允許用戶在仿真中添加監測代碼來收集統計信息和生成報告信息。增加監測代碼來跟蹤成虛變量、函數的執行、數據報的轉發、中斷。(不用修改Avrora源碼的基礎之上)
  2. Avrora運行用戶指定一個類來插樁到模擬程序中(即安裝可執行的監測程序),-monitor選項允許用戶指定一系列類添加到程序中,這個類可以使一個內置監測程序的別名、也可以是一個類的全稱。
  3. 模擬監測程序:Avrora模擬器提供了一個功能:允許安裝可執行的監測程序插樁到程序,程序執行結束時會打印相應監測程序執行的結果,例如:
    1、-monitors=calls:跟蹤調用/返回的程序執行行爲,顯示函數調用和中斷處理程序的stacking up.
    2、-monitors=energy(energy-log/energy-profile):跟蹤能源消耗;
    3、-monitors=gdb:實現了GNU遠程串行協議的調試工具。服務端會創建一個GDB能連接的服務器socket,用於實現Avrora中的發送命令。這個可以使gdb作爲一個調試Avrora內部程序的前端。
    4、-monitors=interactive:允許用戶與程序執進行交互,包括設置斷點、觀測點、和觀察當前的模擬狀態。
    5、-monitors=interrupt:改變中斷的狀態。包括中斷的提交、啓動和調用。
    6、-monitors=ioregs:用於跟蹤微控制器中IO寄存器包括與IO相關的設備(例如timer、UART、SPI等)的更新情況。
    7、-monitors=memory:用於收集程序內存使用數據信息,包括每一個數據內存字節的讀寫信息。
    8、-monitors=packet:用於跟蹤傳感網結點數據包的發送和接收。
    9、-monitors=profile:分析每一個指令的執行次數,並且生成一個所有指令執行頻率的文本報告。
該命令常用的option
1、-empty-probe:用於測試爲每個指令添加空探針時的開銷;
2instr-class:選擇profiling 監測程序是否生成程序執行最頻繁的指令報告;
3、period:long = 0:用於指定profile monitor是準確性還是週期性。如果這選項設置爲非0,則在時鐘週期中指定的是週期性程序計數器,而不是對每一個指令添加探針。
4、record-cycle:指定是否記錄每一個指令或者基本塊的使用週期。

10、-monitors=real-time:減緩模擬速度,使之執行的速度與實際情況接近。、
11、-monitors=:serial:串行監測程序允許模擬結點的串行接口連接到socket,這樣模擬中程序運行的數據能夠輸出,外部的數據也能輸入到模擬結點中的串行端口。
12、-monitors=simperf:通過定期記錄執行的週期和模擬消耗的總時間來分析模擬器本身的性能。
13、-monitors=sleep:跟蹤程序睡眠模式,包括模擬過程中喚醒和睡眠的總次數。
14、-monitors=stack:彙報程序可以使用的最大棧。
15、-monitors=trace:通過打印程序執行的每一個執行來跟蹤程序的執行。
16、-monitors=trip-time:用於分析從一個點到另一個點的時間消耗(例如事件中斷程序的開始到結束)。

2.1:創建你的第一個監測程序
也就是說Avrora提供了一個Java API用戶可以實現子自己的監測程序並且添加到Avrora中。

  1. 模擬器支持的三種插樁程序機制:Probes、Watches、Events
    1、Probes:探針是一類插樁對象,他們能夠插入到特定的程序指令中,並且執行到這個指令的時候會觸發該Probe插樁程序。
    2、Watches:是與程序內存地址相關的插樁,在對特定內存地址讀寫時會觸發watches插樁程序;
    3、Events:Events是一類時間觸發插樁,當程序以時鐘週期到達一個特定時間點時觸發Events插樁程序。
  2. probes插樁技術
    1、probes插樁能夠添加到程序的任何指令中,當帶程序執行該插樁的指令時候會被觸發(有點類似於system.out),例如當我們想了解一個函數的調用情況,可以在這個函數的執行的第一個指令上添加插樁。
    2、例子:分頻計數器

  3. watches插樁技術
    1、watches插樁程序插入到程序執行中內存的特定位置。

2、例如:我們要監測一個全局的數據結構,例如調度隊列的活動;如果一個程序分配的緩存會被其它指針修改,在內存位置插樁比通過插樁代碼的方式更直接方便。
1. events插樁技術
1、Avrora模擬器是時鐘週期精確的模擬器,Avrora不僅允許在程序的特定點添加插樁程序,也允許在特定的時間點添加插樁程序。當執行到指定時間的時候會觸發Events插樁程序。
2、例如假設串口號接收到了一個字節的數據,然後想知道這些數據能否在特定事件內處理。這個時候就可以使用事件插樁技術,Event插樁技術實現分析睡眠時間的方式是:使用一個簡單的事件,一旦每一個時鐘週期觸發時,或者查詢單片機是否處於睡眠模式,然後統計程序失眠和喚醒的持續時間。
3、例如:節點睡眠模式的分析
events插樁程序是通過時鐘週期時間來觸發的。想要分析單片機睡眠時間通過probe插樁技術是不行的,因爲在睡眠狀態下是沒有指令的執行
2. 中斷插樁程序
1、Avrora允許用戶對事件以插樁成虛的方式進行擴展(即對特定的中斷添加probes插樁程序)
3. 有限狀態機
傳感網模擬器可以被看成是一個有限狀態機,例如一開始處於睡眠狀態,但是外部中斷會使模擬器轉換成喚醒的狀態。可以在模擬程序中添加probe插樁程序,允許用戶分析模擬狀態的轉換情況。
4. 廣播插樁
1、Radio是傳感網中基本的程序交互機制,通過對radio硬件和單片機的模擬來實現對整個傳感網絡的模擬。同樣,允許對廣播設備添加插樁程序操作。
2、當廣播參數(例如功率和頻率)發生改變的時候或者當程序開始通過radio傳輸數據的時候添加相應的插樁程序。

斷點

用於暫停或者終止模擬器的執行當程序執行到斷點的時候。interactive監測程序 + -breakpoint選項。

超時

  1. 有些程序並不會終止而是在一個無線循環的服務終端中不停的執行。這個時候就可以用上超時指令-seconds。程序執行指定事件時候終止。

分析和基準測試

Avrora中內置的分析監測程序:

模擬的選項和幫助

  1. Simulation action:爲指定結點的指定程序創建模擬器,仿真類型可以使是單一結點的單一程序的模擬,或者是多結點的傳感器網絡模擬。
simulation action 常見的option
1-report-seconds:模擬器立即打印輸出信息而不是以時鐘週期的方式打印;
2-second-precision:爲模擬的事件事件設置報告的精度。
3-simulation:string=single:設置模擬類型:單一結點模擬 + 傳感器網絡模擬 + 機器人模擬(??)
  1. 單一結點的模擬:
1-clockspeed:指定單片機的時鐘頻率;
2、external-clockspeed:外部時鐘的時鐘頻率;
3、interrupt-schedule(string):該option指定一個文件的文件名,這個文件包含了用於描述何時提交中斷(特別是外部中斷)到程序中的中斷調度序列。
4-mcu(string=atmegal128):從庫中選擇單片機;
5-monitor(list):list:指定一系列的監測程序;
6、platform(string):指定單片機構建的平臺,默認是mcu,也可以指定外部設備平臺例如LEDs、radio。
7-random-seed(long):爲模擬器植入僞隨機數生成器。如果值爲非0,那麼這個數就用於植入可重複的模擬結果。如果沒有指定值,依賴於隨機數的模擬部分將會植入基於系統的選擇。
8-second(double):指定事件之後結束執行。
  1. 傳感器網絡(多結點)的模擬:
    1、這種類型的模擬可以同時模擬多個傳感器結點,結點之間的數據包(傳感器的信息 + 路由信息)通過radio進行交互。
    2、多節點的模擬只有mica2平臺可以使用。
    3、多節點模擬的option可以指定實例多少個傳感器結點 + 要加載到結點的程序 + 描述傳感網物理佈局結構的文件 + 和指定隨機的傳感網結點數據。
1-clockspeed(long=8000000):指定單片機的時鐘頻率;
2、external-clockspeed:外部時鐘的時鐘頻率;
3、interrupt-schedule:該option包括一個文件,這個文件包含了用於描述何時提交中斷(特別是外部中斷)到程序中。對於對傳感節點的模擬,這個值爲0.
4-MCU:從庫中選擇單片機
5-monitorlist:指定一系列的監測程序;
6-nodecountlist:用於指定要實例化的結點數,例如list=1,2”表示一個節點加載第一個程序,+ 有兩個節點加載第二個程序。
7、platform:指定單片機構建的平臺(外部 + 庫中),多節點的模擬只支持mica平臺。
8-random-seed:爲模擬器植入僞隨機數生成器。如果值爲非0,那麼這個數就用於模擬的結果,如果爲0,則隨機生成
9-random-start:interval:爲每一個節點啓動前插入一個隨機的延遲來避免人工級別的同步,啓動延遲是在指定間隔中的一個僞隨機選擇。
10-second:指定事件之後結束執行。
11、sensor-datalist:這個選項對每一個傳感器節點輸入數據的描述(有固定的格式)。
12、stagger-start(long=0):爲每一個節點啓動前插入一個隨機的延遲來避免人工級別的同步,啓動延遲時間第一個爲X,第二個爲2*X...13-topoloy(string):用於指定一個包含網絡拓撲結構的文件,指定之後,自由空間radio模型會對radio的廣播建模
14-update-node-id(boolean=true):用於嘗試更新存儲在閃存中的結點標識符

What can Avrora do for me?

2、監測程序:Monitoring infrastructure
1. 監測設備能夠在線監測程序執行行爲(自帶的監測命令 + 也可以自己實現自定義的命令)
3、程序分析:profiling utilities
2. 研究模擬器上的程序執行行爲(各種Avrora內置的程序命令);
4、插樁程序:instrumentation
3. 內置命令 + 自定義命令的三種實現機制:探針技術、觀測技術和事件技術
5、GDB debugger hook
4. GDB調試工具hooks允許源碼級別的調試和集成開發測試。

GDB debugger hook

  1. Avrora允許開發人員使用gdb(GNU debugger)調試程序。一個遠程的串行協議允許Avrora以gdb通過socket和服務請求進行數據交互。(目前這種調試只適用於單一結點的仿真)
  2. 調試的具體步驟爲:
    1、啓動Avrora的GDBServer:以指定的監測啓動Avrora,創建一個服務socket用於監聽從GDB來的連接,此時Avrora會正常秦東,但是GDB server監測程序會用於監聽連接。
    2、啓動GDB和連接:啓動avr-gdb和相同程序,爲了能連接到Avrora,可以使用target gdb命令。
    3、正常使用GDB:連接成功後,正常會用GDB即可,例如插入斷點、單步調試、檢查變量

6、控制流圖工具
控制流圖工具創建了一個程序指令的圖形化表示。

  1. Avrora爲AVR程序提供了一個控制流圖工具,調用命令爲-action=cfg,有兩種方式生成輸出,可以中-option選項指定:一種是基於文本的直線表示基本的塊 + 另一個是點圖的生成工具展現控制流圖
  2. 一個控制流圖工具的例子
  3. 間接的邊緣:非直接的調用或者跳躍指令例如:icall + ijmp,但是可以使用 -indirect- edges選項。
    7、能源分析工具
    8、內存棧檢測工具

  4. Avrora中的內存檢測工具用於確定一個程序最大棧的使用的界限;

  5. 調用棧檢測工具:-action命令 + analyze-stack選項。
  6. 檢測結果:報告程序能使用的最大棧大小還有一下程序時間或者控件上的消耗信息。

Take a Look

1、Avrora的啓動

  1. get Java
    因爲Avrora是用Java語言實現的,啓動Avrora需要JDK下載Avrora歸檔文件(jar文件,不用編譯直接運行即可)
  2. 適當的程序格式
    Avrora支持三種類型的程序格式:
    1、Altmel彙編程序語法,.asm的擴展名文件,這種後綴的文件可以被Avrora直接加載;
    2、GNU彙編程序語法,以.s結尾的擴展名
    3、avr-objdump程序的輸出。以.od結尾的程序。(Avrora 不能直接加載ELF或者SREC二進制文件,這些二進制程序需要用avr-objdump程序轉換成文本類型才能被Avrora讀取)

objdump
1、Avrora中沒有反編譯器,而是使用objdump程序對ELF文件(一種二進制文件)和。
2、實現的步驟爲:
編譯程序(例如將一個C程序通過gcc編譯成二進制文件例如ELF)——反彙編程序(使用objdump反彙編成文本文件,以便Avrora加載程序)

  1. 運行Avrora
    1、Avrora是在命令行中運行,java -java調用Avrora歸檔程序。
    爲運行Avrora取一個別名:

% alias avrora=’java -jar avrora-beta-1.6.0.jar’
2、接着用Avrora運行Blink.od程序
4. 擴展Avrora
自定義仿真類型 + 自定義檢測 + 自定義測試用例 + 自定義AV融讓運行 文件後綴 + 自定義新的外部設備 + 自定義一個新的執行結點平臺 + 自定義一個新的單片機 + 自定義一個新的廣播模型

2、Avrora如何幫助傳感器網絡做研究

  1. 爲傳感網程序研究提供精確和可擴展的模擬,Avrora已經實現了mica2硬件平臺的模擬。Avrora允許多個模擬器對象實例化並且運行。Avrora可以通過週期性同步模擬器實例來模擬整個傳感器網絡,並且保存時鐘之間的交互。
  2. 單一節點的模擬:Blink
    可以通過命令-platform=mica2指定模擬平臺測試單一節點上的程序;
  3. 多個節點的模擬
    Avrora能夠對一個完成傳感器網絡的運行進行模擬,允許程序通TinyOS廣播棧交互。例如如下步驟:
    1、編譯TinyOS程序
    假設要運行CntToRfm程序和RfmToLeds程序並且測量他們的睡眠行爲,首先在mica2平臺編譯ELF文件,並且運行avr_objdump.
    2、測試模擬
    用sensor-network指定多節點的模擬而不是單一結點的模擬。
    3、爲模擬添加監視器
    發送數據報節點的監視器:-monitors=packet
  4. 分析多結點的模擬
    使用-monitor檢測器的方式

3、WSNs模擬器paper
4、Avrora JavaDoc API
5、Avrora的體系結構

  1. 指令表示:AVR指令集中的每一種指令都有與之對應的類,有共同功能的父類 + 特定功能的子類;
  2. 訪問者模式:採用了訪問者模式,訪問者模式有固定的類層次結構,但是能夠很方便的添加操作。Avrora中訪問者模式中固定層次結構的類包括阿:指令類;可擴展的操作有:解釋、抽象解釋、每一個指令類的單獨操作。
  3. Avrora的核心:simulator,能夠執行AVR程序。
  4. 分析和監測:Avrora提供了API允許插入探針的方式來跟蹤、分析和監測程序
  5. Time異步
    1、模擬器週期精確的概念指的是:模擬器能追蹤每一條執行指令所消耗的時鐘週期數,並且能夠記錄任何時候的時鐘週期數
    2、這個時間信息對於變時現象例如時鐘操作、設備連接到單片機操作非常重要。
    3、每一個模擬器實例之間相互獨立,他們各自有自己的時鐘週期時間並且運行在各自的線程中。
    4、很多單片機中程序的執行會依賴於時間例如:片裝計時器在後臺執行,並且當計時器溢出或者計時器值與待比較的值匹配時觸發一箇中斷 + 外部設備在之後的某個時候可能會發送數據 + 當一個串行設備完成數據轉換時觸發一箇中斷。
    5、這些事情統稱爲事件,並且有一個事件隊列來存儲即將執行的事件(當模擬器本定時間與指定時間匹配時會執行事件隊列中的事件),因此這種處理方式是異步的

6、單片機
仿真的核心:模擬器。包括:AVR指令集的解釋器 + 存儲程序SRAM、IO寄存器、事件隊列的狀態。單片機包含了模擬器。
7、平臺
就像模擬器是單片機中的一個引擎、單片機是真是設備中的一個引擎,真正的電子設備會與外部設備例如LED、傳感器、通訊設備連接。

online Help System

Avrora中的五大幫助命令

  1. all:列舉所有可獲得的幫助命令;
  2. action:執行模擬器提供的功能。例如:編譯一個文件、打印列表、執行模擬、運行一個分析工具
  3. inputs:指定程序的輸入格式。根據輸入格式來編譯文件
  4. monitor:指定可用的監測程序
  5. simulations:指定模擬類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章