




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、信號函數(shù) 當(dāng)卩Vision3模擬執(zhí)行目標(biāo)程序時,信號函數(shù)可以在后臺實現(xiàn)信號輸入、脈沖輸入等重復(fù)操作。信號函數(shù)可用于模擬和測試串行I/O、模擬I/O、端口通訊和其他一些重復(fù)發(fā)生的外部 事件。因為當(dāng)方調(diào)用卩Vision3模擬目標(biāo)程序時,信號函數(shù)是在后臺執(zhí)行。因此,信號函數(shù)必須在某些地twatch函數(shù)來進(jìn)行延遲,以便讓 卩Vision3能運(yùn)行目標(biāo)程序。若信號函數(shù)從不調(diào)用twatch,貝U卩Vision3會報告錯誤。卩Vision3提供了一部分能在信號函數(shù)中使用的系統(tǒng)變量。詳情請參考系統(tǒng)變量。系統(tǒng)變量系統(tǒng)變量可在程序中任何位置的變量和其他表達(dá)式中使用,用于獲取一些特殊功能值。下表列出了允許使用的系統(tǒng)變
2、量,以及數(shù)據(jù)類型和使用方法。SlifIulJAFgh咅d lv<i_br(3t_ tmig曲 im un-nl ii'bi uripgrifd 臥口EPE-itEIJU'當(dāng)Bristol 1*31荷出畑.1或: IHW tiPMO»a.-n= iuhzs鰹迤G程wwiTh i用列込弊啊芒Hl4奕逹翌疋呂-£»6亦§_扁,卜十十*也"亦:山匡iUif汀財KKPHt疑匚腫鳥ttttPjirunFiErio印T*js訓(xùn)環(huán)*牡3 - cPLjUTT痕翻miTiA:肖冃till斥fl恪罰輛xiwta如時毎I新utI traceuns
3、flned jw姑星一為云曰?3?=執(zhí)=刊金宵近釆麗請4 5 atiK*為Q,百-牛;tai呼葉韋觀Fd程-F-+lEjiWtp'*f* ;f3:p變量類型描述$ un sig ned long表示當(dāng)前程序計數(shù)器值??梢允褂?表達(dá)和修改程序計數(shù)器。例如,$ =0x4000可將當(dāng)前程序計數(shù)器值設(shè)置為0x4000 。_break_設(shè)置為一個非零值,卩Vision_break_ un sig ned int令目標(biāo)程序中止運(yùn)行。如果將 將掛起目標(biāo)程序的執(zhí)行。在用戶和信號函數(shù)中使用該變量可掛起目標(biāo)程序的執(zhí)行。_traps_ unsigned int若將_traps_ 設(shè)置為一個非零值,卩將現(xiàn)實1
4、66個硬件陷阱:未定義的操作碼, 被保護(hù)指令錯, 非法字操作訪問, 非法指令訪問, 堆棧上溢, 堆棧下溢等。states unsigned long CPU 指令狀態(tài)計數(shù)器的當(dāng)前值;當(dāng)目標(biāo)程序開始執(zhí)行時,該計數(shù)器從 0 開始每執(zhí)行一條就加 1 。注意states 是一個只讀變量。itrace unsigned int表示目標(biāo)程序執(zhí)行時是否記錄跟蹤過程。 若 itrace 為 0 ,則不記錄跟蹤過程;若 itrace是一個非 0 值,則記錄跟蹤過程。 更多相關(guān)信息可參考 Trace Recording 。radix unsigned int設(shè)置顯示數(shù)據(jù)的進(jìn)制, radix 可為 10 或16,默
5、認(rèn)值為 16 用于 HEX輸出.信號函數(shù)的定義由關(guān)鍵字 SIGNAL 開始,格式如下:SIGNAL void fname (parameter_list) statementsfname i 函數(shù)名parameter_list i 傳遞給函數(shù)的參數(shù)表,每個參數(shù)必須包括一個類型聲明和一個名字。如果沒有參數(shù),則用 void 代替參數(shù)表。多個參數(shù)之間用逗號間隔。statements 函數(shù)體 函數(shù)起始標(biāo)識。只有函數(shù)起始標(biāo)識和函數(shù)結(jié)束標(biāo)識(“” )保持平衡,函數(shù)才是完整的。例如面的例子表示一個信號函數(shù)每隔 1,000,000 個 CPU 周期將字符 'A' 傳送至串行輸入緩沖 區(qū)一次。S
6、IGNAL void StuffS0in (void) while (1) S1IN = 'A'twatch (1000000);調(diào)用這個函數(shù)時,在控制窗口輸入如下命令:StuffS0in() 調(diào)用時 StuffS0in 信號函數(shù)會將字符 'A' 的 ASCII 值傳送至串行輸入緩沖區(qū)并延遲 1,000,000 個 CPU 周期,不斷重復(fù)。信號函數(shù)受到如下約束:函數(shù)的返回值類型必須為 void 。函數(shù)最多只能有 8 個參數(shù)。信號函數(shù)可以調(diào)用其他重定義函數(shù)和用戶函數(shù)。信號函數(shù)之間不能相互調(diào)用。信號函數(shù)可以被用戶函數(shù)調(diào)用。信號函數(shù)必須調(diào)用 twatch 至少一次。如
7、果信號函數(shù)從不調(diào)用 twatch ,則目標(biāo)程序?qū)⒌貌坏綍r間執(zhí)行。而且由于不能使用Ctrl+C中斷信號函數(shù),在這種情況下卩Vision3將進(jìn)入死 循環(huán)。信號函數(shù)的管理一個信號函數(shù)要么處于空閑態(tài),要么處于運(yùn)行態(tài)。卩通過隊ViSO保存被激活的信號函數(shù)。處于空閑態(tài)的信號函數(shù)將被延遲, 直到延遲完指定的 CPU 周期等待之后調(diào)用 twatch來喚醒她。運(yùn)行態(tài)的信號函數(shù)則執(zhí)行函數(shù)內(nèi)的語句。當(dāng)一個信號函數(shù)被調(diào)用時,卩將此函3數(shù)加入隊列中并將其狀態(tài)標(biāo)明為運(yùn)行。一個信號函數(shù)只能被激活一次, 如果要被激活的函數(shù)已經(jīng)在隊列中, 則會發(fā)出警告。通過 SIGNALSTATE命令可以查看信號函數(shù)的狀態(tài),SIGNAL KI
8、LL命令可以將信號函數(shù)從隊列中消除掉。當(dāng)信號函數(shù)調(diào)用 twatch 函數(shù)時,經(jīng)過數(shù)個 CPU 周期處理完 twatch 函數(shù)之后信號函數(shù)將進(jìn) 入空閑態(tài),直到用戶程序執(zhí)行指定數(shù)目個 CPU 周期后信號函數(shù)才從 twatch 函數(shù)之后的語 句開始繼續(xù)執(zhí)行。當(dāng)信號函數(shù)退出時,返回語句自動將該函數(shù)從隊列中清除。面的例子表示一個信號函數(shù)在 C167 上改變模擬輸入的值。 函數(shù)從 0伏特開始以 0.5 伏為單位增加或減少輸入電壓, 并且增加上限被設(shè)置。 該信號函數(shù)不定期的重復(fù), 每次電壓改變 將延遲 200,000 個 CPU 周期。signal void analog0 (float limit) fl
9、oat volts;printf ("Analog0 (%f) entered.n", limit);while (1) /* forever */volts = 0;while (volts <= limit) ain0 = volts;/* analog input-0 */twatch (200000);/* 200000 states Time-Break */volts += 0.1;/* increase voltage */volts -= 0.1;/* decrease voltage */volts = limit;while (volts >
10、= 0.0) ain0 = volts;twatch (200000);/* 200000 states Time-Break */信號函數(shù) analog0 能以如下方式被調(diào)用:>ANALOG0 (5.0)/* Start of 'ANALOG()' */ANALOG0 (5.000000) ENTEREDSIGNAL STATE 命令顯示 analog0 函數(shù)的當(dāng)前狀態(tài):1 idle>SIGNAL STATESignal = ANALOG0 (line 8) 該命令列舉出內(nèi)部函數(shù)的編號, 信號函數(shù)的狀態(tài): 空閑態(tài)還是運(yùn)行態(tài), 函數(shù)名和執(zhí)行語句行 號。因為信號函數(shù)的
11、處于空閑態(tài), 可以推測出 analog0 正在執(zhí)行 twatch 函數(shù) (在 analog0 的第 8 行 )并等待指定的 CPU 周期時間。 200,000 個 CPU 周期之后, analog0 繼續(xù)執(zhí)行直到在 程序的第 8 行或 14 行 twatch 函數(shù)再一次被調(diào)用。以下命令將 analog0 函數(shù)從激活信號函數(shù)隊列中清除。>SIGNAL KILL ANALOG0建立函數(shù)Vision3中有一個內(nèi)建的函數(shù)編輯器,通過Debug - FunctionEditor來打開。打開函數(shù)編輯器時需要輸入一個文件名或者打開一個由Options for Target - DebugInitial
12、ization File 指定的文件。該編輯器的用法與 i Vision3編輯器相同,允許用戶輸入和 編譯調(diào)試函數(shù)。參考函數(shù)編輯 對話框幫助可獲取更多對話項目信息。當(dāng)建立一個調(diào)試函數(shù)文件后,可用 INCLUDE 命令可以讀取和處理該文本文件的內(nèi)容。例如,如果在命令窗口輸入下列命令,1將完成n3 MYFUNCS.INI 文件內(nèi)容的讀取和解釋功能。>INCLUDE MYFUNCS.INIMYFUNCS.INI 可能包含調(diào)試命令和函數(shù)定義,通過Options for Target - DebugInitialization File可以進(jìn)入該文件。每次打開i Vision3調(diào)試器時,MYFUN
13、CS.INI文件的內(nèi)容將被執(zhí)行。INCLUDE命令用于指定一個命令文件,命令被從此文件中一行一行地被讀取并被傳遞給Visio n3來執(zhí)行。在 1 Vision3 中可以利用 INCLUDE 文件執(zhí)行重復(fù)操作。例如,定義INCLUDE文件用于載入目標(biāo)程序, 運(yùn)行程序到主 C 函數(shù), 初始化工具箱按鈕及生成幾個用戶函數(shù)。INCLUDE文件可以嵌套 4 層,要使用 INCLUDE 命令時,必須先停止目標(biāo)程序的執(zhí)行。例子INCLUDE measure.i ni不需要的函數(shù)可以通過KILL來刪除。:Function Editor - C:KeilARMGNUEKan)plesMedsur&Hcn
14、ature.ini BBOpen1JiJew.1Save1 Save A$.Compila |匚onpile Errors: |Jp*z矍/* tlyStatus 3hov3 analog and other values . . . */ 響EUNC void MyStatus (void)Ansiog-Inpv t-0:器f7i,adO)Analog-Inp-ut1 :adl)Aiialog-Input-2 :XfMiadZ)Aiielog-InpKt-3 :茗W. d3)Poxt A:po3?ta)fPort B;XOeXMi""perth)fJsmI print!(
15、" pxintf (" pxintf (" printf C" printf C" printf (" printf C" printf C"Debug - Fun cti on Editor 關(guān)于創(chuàng)建函數(shù)文件的詳細(xì)信息請參考創(chuàng)建函數(shù)。Open 打開瀏覽對話框,選擇一個要編輯的文件。New.創(chuàng)建一個新的文件以加入函數(shù)。Save 保存文件的編輯內(nèi)容。Save As.在不同的文件中保存當(dāng)前的編輯內(nèi)容。Com pile編譯當(dāng)前文件,相應(yīng)的結(jié)果在Out put Win dow的Build頁中顯示。Comp ile Erro
16、rs 顯示編譯錯誤。選擇一個錯誤可以在編輯窗口定位相應(yīng)的出錯行KUI1 e王55 KILL BOTTOriljnemiw*毀a-ULLruni. *Mm 勺BlbMiwnLifliP-KEILftwirtwri nrtPiPUtE列 hrjjf-fimi niWTHii i.-hi'itiEnXTSt KILL命令可用于刪除已定義的工具箱按鈕和卩Vision3函數(shù)。當(dāng)使用這個命令時, 必須要指KILL BUTTON命令用于移除前面已定義的一個工具箱按鈕。定要移除工具箱按鈕的編號。這個編號在工具箱窗口中每個按鈕的前面。卩Vision3內(nèi)部定義函KILL FUNC *命令用于移除前面已定義
17、的所有用戶函數(shù)和信號函數(shù)。數(shù)不能被刪除。KILL FUNC fun ction_ name命令用于刪除指定的用戶函數(shù)或信號函數(shù)。>KILL FUNC ANALOG/* Delete user fun cti on an alog */例子>KILL FUNC myregs/* Delete user function myregs */>KILL FUNC */* Delete all user functions*/>KILL BUTTON 3/* Kill Toolbox Button number 3*/>KILL BUTTON 1/* Kill Toolb
18、ox Button number 1*/外圍設(shè)備變量根據(jù)工程所選擇的 CPU ,卩Vision3會自動地定義一些符號。這些符號分為兩類:外圍寄存器(或 SFRs)和虛擬仿真寄存器( VTREGs )。在 Simulation Script Templates下,調(diào)試函數(shù) Debug Functions 可利用這些外圍設(shè)備變量自動向外設(shè)輸入信號。外圍寄存器 (SFRs)卩Vision3為外圍寄存器定義了符號。外圍寄存器符號的定義依賴于選擇的微控制器。外圍寄存器符號都具有相關(guān)的地址,可被用于表達(dá)式中。虛擬仿真寄存器 (VTREGs)虛擬仿真寄存器的存在,使得模擬 CPU 的引腳進(jìn)行輸入和輸出成為可
19、能。 VTREGs 不是公有符號,也不能常駐 CPU 的內(nèi)存。它們可以用于表達(dá)式中, 但其值及用法是依賴于 CPU 的。VTREGs 提供了一種輸入來自被仿真硬件上的信號到CPU 引腳的方法??梢允褂?DIRVTREG 命令列出這些符號。表描述了 VTREG 符號。 VTREG 符號的可用性依賴于所選的CPU。心EFEFSJTlhEiOLTTCLOCKXW片上/二IBrtTflt/O引小鮒m POKTA?|HPfiS二MVIEKK13 H襄罌KCJtn vteeg中-方rt|D初蝕莊的Iflj咖14愛血薩環(huán)忒費(fèi)!.tt耳旳ciutr車環(huán)I,IMM刖ttGF*Tre Fq弊 fl窗qT更?.-V
20、TRE描述片上的一個模擬輸入引腳,它的典型代表是A/D轉(zhuǎn)換器輸入。目標(biāo)程ADx序可以讀取寫入到ADx VTREGs中的值。DAx片上的一個模擬輸出引腳。這個值反應(yīng)了 D/A轉(zhuǎn)換器的輸出。xxVRE相關(guān)引腳的電壓輸入。P ORT片上端口的一組I/O引腳。例如,PORTA代表了 PORTA的所有引腳,這些寄存器可以仿真端口I/O.串行接口 x的輸入緩沖??梢韵騍xIN寫入一個8位或9位的值,它們可以被目標(biāo)程序讀取。讀取SxIN以 取決于什么時候輸入緩沖準(zhǔn)備好SxIN以接收另外的字符。值OxFFFF意味著前面的值已被處理完,新的值可以寫入了。SxOU串行接口 x的輸出緩沖。卩Vision3拷貝8位或
21、9位的值到SxOUTVTREG 中。定義串行端口 x的波特率時序。當(dāng)SxTIME為1時,卩Vision使用編程SxTIM的波特率來仿真串口的時序。當(dāng) SxTIME為0時(默認(rèn)值),編程的波特E率時序被忽略,串行傳輸時間是即時的。CLOC仿真的 CPU 的真實頻率。XTAL仿真的CPU的晶振頻率,在 Options - Target dialog 下定義。可以使用 VTREGs 來仿真外部輸入和輸出, 包括與內(nèi)部外設(shè)的接口, 如中斷和時鐘。 例如, 若選中 PORT3 (在 8051 設(shè)備上)的位 2,則 CPU 驅(qū)動仿真外部中斷 0。I/O 口 卩Vision3為每個I/O 口定義了一個 VT
22、REG:例如PORTA。不要把每個端口 (如PIOA_OSR) 的外圍寄存器與這些 VTREGs 混淆了。 外圍寄存器可以在 CPU 存儲空間內(nèi)被訪問, VTREGs 則代表了引腳上的信號。使用 卩Vision3可以很容易模擬來自外部硬件上的輸入,若外部有一串脈沖到達(dá)端口引腳,1000Hz 的頻率在端口 PORTA則可以使用信號函數(shù)來模擬這些信號。如下面的信號函數(shù)以 的引腳 0 處輸入一個方波。signal void one_thou_hz (void) while (1) /* repeat forever*/PORTA |= 1;/* set PORTA bit 0*/swatch (0.
23、0005);/* delay for .0005 secs */PORTA &= 1;/* clear PORTA bit 0*/swatch (0.0005);*/* delay for .0005 secs */* repeat面的命令啟動了這個函數(shù): one_thou_hz ()有關(guān)用戶及信號函數(shù)的更多信息請參閱Vision3 調(diào)試函數(shù)(Debug Functions) 。仿真一個與輸出端口引腳對應(yīng)的外部硬件稍少一些困難。需要兩步,第一步,寫一個卩Vision3的用戶或信號函數(shù)來執(zhí)行希望的操作;第二步,倉U建一個斷點(diǎn)以調(diào)用該用戶函數(shù)。假如使用了輸出引腳 (PORTA的位0)來點(diǎn)亮
24、或熄滅 LED,下面的信號函數(shù)使用PORT2VTREG 來檢查 CPU 的輸出,并在命令窗口顯示信息。signal void check_pA0 (void) if (PORTA & 1) /* Test PORTA bit 0 */printf ("LED is ONn"); /* 1? LED is ON */else /* 0? LED is OFF */printf ("LED is OFFn"):現(xiàn)在, 必須為端口 1 的寫操作添加一個斷點(diǎn)。 下面的命令行將為所有向PORT2 的寫操作添加一個斷點(diǎn)。BS WRITE PORT2, 1,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省淮南市潘集區(qū)2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試題(含答案)
- 清朝領(lǐng)導(dǎo)考試試題及答案
- 市場經(jīng)濟(jì)學(xué)試題及答案
- 管理沙盤面試題及答案
- 2019-2025年軍隊文職人員招聘之軍隊文職管理學(xué)與服務(wù)提升訓(xùn)練試卷A卷附答案
- 2019-2025年軍隊文職人員招聘之軍隊文職管理學(xué)題庫附答案(典型題)
- 煙草公司2025招聘考試全真模擬筆試試題(綜合能力測試卷)和答案解析
- 鼻飼操作及胃管誤入氣道案例分析培訓(xùn)課件
- 房產(chǎn)稅務(wù)知識培訓(xùn)課件
- 鉆石專業(yè)知識培訓(xùn)課件
- 2024年9月抖音短視頻及直播電商月報
- 人教版初中全部英語單詞表
- 2024年浙江省中考社會試卷真題(含標(biāo)準(zhǔn)答案及評分標(biāo)準(zhǔn))
- 期末復(fù)習(xí)《《認(rèn)識100以內(nèi)的數(shù)》復(fù)習(xí)》(教案)2023-2024學(xué)年數(shù)學(xué)一年級下冊
- 2024年醫(yī)師定期考核必刷題庫附含參考答案
- 神經(jīng)外科護(hù)理病例討論-腦膜瘤課件
- NB/T 11434.5-2023煤礦膏體充填第5部分:膠凝材料技術(shù)要求
- 2024年租賃鏟車合同范本
- NB-T32036-2017光伏發(fā)電工程達(dá)標(biāo)投產(chǎn)驗收規(guī)程
- 人才培養(yǎng)與團(tuán)隊建設(shè)計劃三篇
- 《客艙設(shè)備與服務(wù)》課件-1.客艙乘務(wù)員
評論
0/150
提交評論