一、硬件準備html
首先準備Jlink硬件,V8版本在J-Scope中採樣頻率高到50Hz,粗略的觀看還能夠;V9版本能夠到1MHz;對於Scpoe還有一個同時觀察變量的數量,V8最少,V9可觀察的多一些,基本夠用。算法
二、軟件準備緩存
segger官方網站地址:https://www.segger.com/
併發
Scope軟件下載地址:https://www.segger.com/j-link-j-scope.html
函數
目前爲Setup_JScope_V510d.exe網站
三、J-Scope軟件配套JLink的軟件版本spa
要想使用J-Scope,須要JLink的軟件版本高一些,軟件版本和Jlink的硬件本無關,只要本身的仿真器支持升級就行,因此最好下載最新的JLink驅動。3d
下載網站:https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPackhtm
目前最新的驅動:JLink_Windows_V620h.exeblog
四、J-Scope軟件的HSS使用方法
安裝完成以後,找到本身的安裝目錄,如圖所示,會看到J-Scope的啓動文件和他的幫助文件。
UM08028_JScope.pdf是官方的幫助文檔,很是詳細專業。
(1)啓動軟件
能夠新建工程,或打開之前已有的工程,以下圖所示。
選擇新建新建,電機【OK】後的界面如圖所示:
(2)J-Scope軟件配置
a、J-Link的連接選擇
USB:你們用的基本是USB接口的
Serial No
TCP/IP
Exitsting Session
b、Specify Target Device:指明目標器件,配置過程如圖
c、Target Interface &Speed:目標的接口和速度
JTAG、SWD或FINE,仿真的速度,如圖
至於選擇JTAG仍是SWD,須要根據本身開發板的接口來選擇,與之相一致就好。
d、Sampling Source
e、Sampling Rate 單位us,最小修改成1.
f、Elf File添加
Elf文件是keil 生成的文件。擴展名爲axf,在本身keil工程的文件夾中尋找。
(3)J-Scope軟件的觀察變量
FOC核心算法中的各個變量,勾選上便可,而後【OK】便可。
鏈接好目標板,點擊紅色的圓點,便可開始採樣,在採樣過程當中,用鼠標子在變量區點取一個變量,而後按【+】【-】鍵,則能夠實現圖形的上移、下移,若是按一下【Ctrl】鍵,而後在按【+】【-】,則可實現圖形的放大和縮小,實際上是修改了Y軸分辨率。
採樣中止後,在圖形界面,鼠標左鍵點住拖動,可實現圖形的左右移動,方便觀察圖像的歷史記錄。
採樣時或中止後都可點擊放大和縮小圖標,來實現採樣率的改變。
(4)J-Scope軟件的保存數據文件
【File】菜單中有數據的導出和導入功能,導出後可存爲Excel文件,而後在Excel中進行處理,也可導入到Matlab中。
五、J-Scope軟件RTT模式單片機工程中須要配置
注:RTT模式選芯片型號的時候,必選對應的型號不能選內核型號。
(1)下載這幾個文件,也能夠在Jscope的安裝路徑下找到。
安裝路徑以下圖:
(2)將SEGGER_RTT.c,SEGGER_RTT.h,SEGGER_RTT.h添加進工程,並把SEGGER_RTT.c添加到工程。
(3)添加緩存定義
char JS_RTT_UpBuffer[4096]; // J-Scope RTT Buffer
int JS_RTT_Channel = 1; // J-Scope RTT Channel
上面的緩存大小能夠給小點512也行。
(4)隨便找個地方初始化
SEGGER_RTT_ConfigUpBuffer(JS_RTT_Channel, "JScope_I4I4I4", &JS_RTT_UpBuffer[0], sizeof(JS_RTT_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
(5)
#pragma pack(push, 1)
struct {
signed int Sine1;
signed int Sine2;
signed int Sine3;
} acValBuffer;
#pragma pack(pop)
上面是你要發送的結構體,本身定義。
(6)在你要發送的地方賦值併發送,例如中斷:
acValBuffer.Sine1 = Test_Counter1;
acValBuffer.Sine2 = Test_Counter2;
acValBuffer.Sine2 = Test_Counter3;
SEGGER_RTT_Write(JS_RTT_Channel, &acValBuffer, sizeof(acValBuffer));
(7)下面是重點!!!官方沒有提到的。例如我想發四個數,兩個int型,兩個short型。
#pragma pack(push, 1)
struct {
signed int Sine1;
signed int Sine2;
short Sine3;
short Sine4;
} acValBuffer;
#pragma pack(pop)
那麼對應的初始化要改成"JScope_I4I4I4"這個參數就要改爲"JScope_I4I4I2I2「
(8)還有一個更重要的!那就是若是發送頻率過塊,快卡死,卡在一個循環裏。
SEGGER_RTT.c這個文件的WriteBlocking函數要作修改。
加一句。
if(NumBytesToWrite == 0){NumBytesToWrite = 1;}