在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

GReq_mcu168 ? 來源:魚鷹談單片機(jī) ? 作者:魚鷹談單片機(jī) ? 2022-02-10 11:42 ? 次閱讀

KEIL 調(diào)試方法,但是到底該怎么使用這些方法呢?這篇文章將介紹個人的調(diào)試經(jīng)驗(yàn)。

本節(jié)分為如下幾部分內(nèi)容:1) 虛擬串口2) 變量使用3) 數(shù)組輸出4) 時間獲取5) LOG 輸出6) 注意事項(xiàng)(KEIL 調(diào)試的缺陷)虛擬串口首先是虛擬串口,為什么要虛擬串口,這里的虛擬串口又是什么意思?在線仿真的時候我們根本不需要虛擬串口,因?yàn)?a target="_blank">單片機(jī)一般來說都有串口,所以不需要虛擬的串口,但是在軟件仿真情況下又該如何呢?有些時候我們可能沒有開發(fā)板,但項(xiàng)目很急,需要提前做,該怎么辦?KEIL 的軟件仿真可以幫你解決大部分問題,它可以幫你驗(yàn)證程序邏輯問題,也能驗(yàn)證硬件配置是否正確,相當(dāng)不錯的功能。比如你的串口配置是否有問題,進(jìn)入仿真模式:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

從上面的仿真圖你可以了解到在軟件仿真模式下,你可以正常使用 printf(),scanf()函數(shù),輸入輸出操作由串口窗口進(jìn)行,所以還是很方便的,但是需要注意的是:即使是軟件仿真,它的發(fā)送時間和你的設(shè)定波特率也是有關(guān)系的,即發(fā)送完一個字節(jié)后,必須延時后才能在串口窗口看到數(shù)據(jù),這個時間和現(xiàn)實(shí)時間可能不匹配(即 115200 不一定是 1 秒就發(fā)送 115200 個 bit,可能更多,也可能更少),但道理是一樣,因?yàn)樗鼘Υ诘墓ぷ鬟^程進(jìn)行了完全模擬。在這里你還可以選擇顯示方式。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這里看到我之前寫的一個注釋:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

但實(shí)際測試發(fā)現(xiàn)并不會丟失最后一個字符,不知道當(dāng)時咋測試的。繼續(xù)正題。有一個問題,如果說你想把這個數(shù)據(jù)傳給其他上位機(jī)呢?比如你想把串口數(shù)據(jù)傳輸?shù)揭粋€虛擬示波器顯示(事實(shí)上 KEIL 也能顯示波形,但是功能比較簡單),又該怎么辦?這個時候你可以虛擬一個 COM 口,將串口數(shù)據(jù)綁定到 COM 中:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

在命令行中輸入紅色方框中的內(nèi)容,既可達(dá)到目的。當(dāng)然你可以將其保存為.ini 文件,具體使用方法請看魚鷹相關(guān)筆記。上面的命令參考鏈接:http://www.keil.com/support/man/docs/uv4cl/uv4cl_cm_assign.htm?_ga=2.225757210.1084600666.1557148734-475076243.1554469739完成綁定后,KEIL 軟件的串口 1 數(shù)據(jù)除了會發(fā)送到 KEIL 串口窗口中(【View】【Serial Windows】),也會發(fā)送到 COM1 口中(當(dāng)然數(shù)據(jù)輸入也是從 COM1 中進(jìn)行輸入的)。但是因?yàn)?KEIL 對 COM1 進(jìn)行了綁定,也就是你的 KEIL 正在使用 COM1 口,那么其他軟件肯定是無法打開這個 COM1 口的,那么這樣又該怎么查看 COM1 的數(shù)據(jù)呢?此時你可以使用一個軟件虛擬兩個串口,這里我用 vspd.exe 軟件虛擬 COM1 和 COM2,并且將 COM1 和 COM2 進(jìn)行了連接,這里就是說 COM1 發(fā)送的數(shù)據(jù)會被 COM2 接收,接收同理,這樣一來,KEIL 中的串口數(shù)據(jù)就能發(fā)送到 COM2 中了,因?yàn)?COM2 并沒有被任何軟件所使用,所以你可以使用串口助手打開(其他串口軟件類似)。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

因?yàn)樵谶@里是虛擬的串口,所以說你的波特率參數(shù)并沒有用處,即你的串口配置成 115200,你的上位機(jī)以 9600 接收也是可以的。但是你會發(fā)現(xiàn),這個中文支持不如 KEIL 自帶的窗口好用,但通過將串口綁定到其他 COM 口的方法能擴(kuò)展它的串口仿真功能,還是相當(dāng)不錯的。事實(shí)上,KEIL 除了仿真串口,也能仿真 I2C、CAN,比如下面的:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

對此感興趣的可以參考鏈接:http://www.keil.com/support/man/docs/uv4/uv4_sm_can_communication.htm變量使用在前面公布的文章中,魚鷹曾經(jīng)說過一個詞,顛覆認(rèn)知:打了多年的單片機(jī)調(diào)試斷點(diǎn)到底應(yīng)該怎么設(shè)置?| 顛覆認(rèn)知也說過一個串口通訊的問題:KEIL 調(diào)試的 ini 文件有什么用?通過運(yùn)用上面的知識,總算是解決了項(xiàng)目串口通信的問題,測試多天,不再出現(xiàn)這個問題了。那么魚鷹是如何解決的呢?且聽魚鷹道來。這個通信錯誤的現(xiàn)象是,前一個數(shù)據(jù)幀尚未發(fā)送完成,后面又來一個數(shù)據(jù)幀,導(dǎo)致傳輸數(shù)據(jù)錯亂了,這種現(xiàn)象在多任務(wù)中很常見,所以魚鷹很早就對它進(jìn)行了研究:信號量保護(hù)之禁止中斷因?yàn)轸~鷹知道,資源互斥的現(xiàn)象很平常,只有深刻理解了其中的原理,你才能更好的掌握它。而這個通信過程的互斥資源有兩個,第一個是發(fā)送緩存數(shù)組的資源,另一個就是串口。在這里因?yàn)闆]有采用隊列的方式發(fā)送數(shù)據(jù),所以緩存數(shù)組和串口是綁定在一起的,也就是說,一旦數(shù)組中含有發(fā)送數(shù)據(jù),那么馬上就開始進(jìn)行發(fā)送,中間不應(yīng)該斷開,所以可以把數(shù)組和串口當(dāng)成一個資源使用(特別需要注意的是,一定要在對數(shù)組賦值之前獲得互斥鎖,而不是在串口發(fā)送前獲取,因?yàn)橹灰@樣,才能保證你發(fā)出的數(shù)組數(shù)據(jù)不會被其他程序修改)。很明顯,這個資源是互斥的,所以可以使用一個變量作為訪問該資源的鎖,每次訪問之前看資源是否被使用,如果被使用了就等待。而鎖的釋放是由發(fā)送完成中斷完成的,即只有將全部數(shù)據(jù)發(fā)送完成之后這把鎖才能釋放,進(jìn)而由其他任務(wù)使用。那么如何利用上面提到的技能查找這類問題呢?這里的關(guān)鍵點(diǎn)還是在鎖,因?yàn)槿绻@把鎖被正確使用的話,是不應(yīng)該出現(xiàn)兩個數(shù)據(jù)幀混亂的情況的,需要對這把鎖重點(diǎn)關(guān)注,那么該如何關(guān)注呢?就是用前面的斷點(diǎn)窗口,對這個變量(鎖)設(shè)置寫入訪問斷點(diǎn),如下:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這里要說明一點(diǎn),單片機(jī)所有的全局變量都是可以在命令行直接獲取數(shù)據(jù)的(事實(shí)上如果你將斷點(diǎn)設(shè)置在函數(shù)內(nèi)部,也可以獲取局部變量的值),比如你在命令行直接輸入 lock,那么結(jié)果如下:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

0x00000001 就是這個全局變量 lock 的值。回到剛才鎖的話題。在斷點(diǎn)窗口設(shè)置之后,你就會在 Command 命令窗口中得到如下消息:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

正常的 lock 數(shù)據(jù)流程應(yīng)該是這樣,1~0~1~0~1……也就是上鎖、釋放鎖交替進(jìn)行的,但是魚鷹在觀察有錯誤通信的代碼發(fā)現(xiàn),出現(xiàn)了 1~0~0 這種情況,也就是說一次上鎖之后,出現(xiàn)了兩次釋放鎖的過程,那這是怎么回事?魚鷹前面說過,釋放鎖的位置在串口發(fā)送完成中斷中(此處是 DMA 傳輸完成中斷),難道有其他位置對它進(jìn)行了清零操作?為了確定這個位置繼續(xù)增加調(diào)試信息(注意如果重新設(shè)置了一個新斷點(diǎn),需要把之前的斷點(diǎn)刪除):

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這次將寫入時的 PC 指針打印出來(需要注意,ST-LINK 不能實(shí)時更新這個 PC 數(shù)據(jù),但 CMSIS-DAP 可以,暫時未找到解決辦法),你會發(fā)現(xiàn)清零的位置是一樣的(沒有實(shí)際環(huán)境,模擬的情況):

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

可以看到,清零操作時的 PC 指針都是一樣的,也就是說,釋放鎖的過程確實(shí)只有一處,那么為什么會出現(xiàn)兩次釋放呢?那肯定是啟動了兩次 DMA 傳輸,導(dǎo)致兩次進(jìn)入傳輸完成中斷,從而釋放了兩次鎖。這里再說一點(diǎn),怎么通過 PC 指針找到對應(yīng)源代碼的位置:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

之后輸入你的 PC 指針即可:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

但是按理來說,如果上鎖操作正常的話,應(yīng)該不會出現(xiàn)兩次啟動 DMA 傳輸?shù)倪^程才是,所以由此可以判斷出,肯定有至少一處地方?jīng)]有上鎖而直接使用了互斥資源,才最終導(dǎo)致了異常情況。通過對互斥資源在整個系統(tǒng)的使用情況,發(fā)現(xiàn)確實(shí)有一個地方使用了互斥資源,但是卻沒有對互斥資源上鎖(當(dāng)時由于某種原因,只對鎖是否可用進(jìn)行了判斷,但判斷完成后,并沒有對它加鎖)。當(dāng)加上了這把鎖之后,通信就此正常了(實(shí)際情況要比這個更復(fù)雜一些)。為什么說顛覆認(rèn)知,就是因?yàn)檎莆樟诉@個技能后,很多問題可以迎刃而解。就比如項(xiàng)目中有一個變量莫名奇妙的變化了,通過對每一次寫入操作的監(jiān)控,發(fā)現(xiàn)了數(shù)據(jù)變化順序出現(xiàn)了問題,不該出現(xiàn)的變化卻出現(xiàn)了,從而深入下去找到變化的原因,并最終解決了這個項(xiàng)目問題。可以說掌握了這個技能,魚鷹用它解決了很多以前難以解決的問題,所以我才會對它推崇備至!從前面講述的內(nèi)容可以知道,原來 printf 函數(shù)不僅可以打印一些字符串,還能獲取運(yùn)行在單片機(jī)上所有的數(shù)據(jù)(包括你定義的全局變量、靜態(tài)變量、外設(shè)寄存器CPU 寄存器),了解了這個,你再也不用在你原來的代碼中添加調(diào)試代碼后再刪除了,使用這個方法有以下幾點(diǎn)好處:1、命令行中的 printf 函數(shù)打印數(shù)據(jù)比串口打印速度更快,極大地減少了調(diào)試語句對原本代碼的影響。2、再也不會忘記刪除代碼了,因?yàn)檫@些語句根本就沒有下載到單片機(jī)中,只要退出調(diào)試模式,就不會對程序造成任何影響。3、只要你使用 KEIL,有一個可以設(shè)置斷點(diǎn)的調(diào)試器(不管是 ST-LINK、CMSIS-DAP、還是 J-LINK)都可以采用這種方式調(diào)試,極大的方便了開發(fā)。說到程序的變量,事實(shí)上我們也可以在 KEIL 內(nèi)部定義一個變量,即使用 DEFINE 命令定義一個變量名,這個變量不存在于單片機(jī)中,而只存在 KEIL 軟件中,所以不用擔(dān)心存儲空間不夠的問題,但是因?yàn)閱纹瑱C(jī)和 KEIL 共用同一套符號系統(tǒng),所以,你定義的變量名不能和單片機(jī)的全局變量名相同。至于你定義的這個變量用來干什么,那完全就是你自己的事情了。數(shù)組輸出前面的內(nèi)容說了程序中的變量都可以通過 printf 函數(shù)打印出來,但在公眾號公布的文章說過,它畢竟不是標(biāo)準(zhǔn)的 C 語言函數(shù),所以它不支持指針,所以也不支持?jǐn)?shù)組,那么我們該如何輸出數(shù)組呢?這個時候其實(shí)要用到公眾號公布的另一篇關(guān)于 ini 的使用問題的文章。看完那篇文章之后,在 ini 文件中輸入以下代碼,并編譯執(zhí)行:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

然后,在你的程序中添加如下代碼:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這里的 OspreyARR 數(shù)組是我們準(zhǔn)備輸出的數(shù)據(jù),OspreyPointer 這個數(shù)據(jù)用于保存數(shù)組的地址。因?yàn)椴恢С种羔槪荒軗Q種方式來達(dá)到相同的效果了。然后對上面的斷點(diǎn)設(shè)置如下:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

事實(shí)上我們也可以設(shè)置成這樣:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這里的 0x2000 004E 就是數(shù)組的地址,但是因?yàn)槊看尉幾g之后,數(shù)組的地址可能都不一樣,所以使用一個變量 OspreyPointe 實(shí)時保存這個地址,這樣你需要顯示什么數(shù)據(jù),只要修改這個變量的值即可,不需要修改斷點(diǎn)窗口的值。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

全速運(yùn)行之后,你就可以獲得如下結(jié)果:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

可以看到,數(shù)組中的所有數(shù)據(jù)都打印出來了,同時將當(dāng)前打印的地址、長度信息也打印出來了。數(shù)組查看這個技能有什么好處?下位機(jī)和上位機(jī)通信是很正常的是,而通信錯誤再正常不過了,那么怎么實(shí)時獲取通信過程的數(shù)據(jù)呢,以前靠串口 printf,現(xiàn)在靠更高級的 KEIL printf,就是這么簡單,串口助手都省了。除此之外,我們還可以對接收或者發(fā)送的數(shù)據(jù)進(jìn)行解析,方便閱讀,比如下面的是我在工作中根據(jù)自己的通信協(xié)議做的一個簡單解析:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

時間獲取上面介紹了獲取數(shù)據(jù)的方法,但是很多時候,我們不僅需要數(shù)據(jù)進(jìn)行分析,還需要獲取數(shù)據(jù)時間,有時候時間是很關(guān)鍵的一環(huán)。那么該如何獲取時間呢?以前一般使用 SysTick 獲取時間,但是當(dāng)你使用操作系統(tǒng)的時候,你會發(fā)現(xiàn)這個時鐘被操作系統(tǒng)占用了,那么怎么辦?搶嗎?肯定不行,那么只能找替代方案了,那么找誰,普通定時器?高級定時器?都不是,這里魚鷹推薦 DWT。為什么推薦它呢?1、很多 STM32 單片機(jī)都集成了這個模塊2、它的精度是 CPU 運(yùn)行周期,即它是由 CPU 系統(tǒng)時鐘驅(qū)動的,即你的內(nèi)核時鐘頻率是 72 M,那么它的頻率也是如此,所以精度很高。當(dāng)我們使用定時器中斷的時候,如果需要看你的定時中斷是否及時處理了(如果沒有及時處理,那么兩次進(jìn)入定時中斷的時間肯定是不同的),那么使用 DWT 是不二人選,因?yàn)榧词鼓愕闹袛嘌舆t了一個指令的執(zhí)行時間,它也能發(fā)現(xiàn),因?yàn)槎噙\(yùn)行一條指令,那么 DWT 的計數(shù)器必然會增加,所以如果時間要求高的話,可以直接獲取計數(shù)器的值。但很多時候,可能并不需要那么精準(zhǔn)的時間,而只需要大概的實(shí)際時間,而且為了方便使用,魚鷹使用相對時間(即上次和這次執(zhí)行時間之差),所以可以使用下面的這個函數(shù)(上面這個函數(shù)用于直接獲取計數(shù)器的值,0xE0001004 為 DWT 計數(shù)器的地址,事實(shí)上 DWT 使用是需要初始化配置的,但 KEIL 在進(jìn)入 Debug 模式后會自行配置,不需要你操心):

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

并且為了和正常時間匹配,對 DWT 時間進(jìn)行了換算,單片機(jī)系統(tǒng)時間設(shè)置為 72M,所以我這里除以 72 用于換算成 us 時間,另外為了更加精確,使用了浮點(diǎn)型數(shù)據(jù)(關(guān)于為什么加 0xFFFF FFFF 請看公眾號相關(guān)文章,魚鷹就不在此詳述了)。那么該怎么使用呢?我在公眾號的視頻中其實(shí)已經(jīng)展示了這個方法,現(xiàn)在詳細(xì)介紹這個方法:首先設(shè)置一個你需要的斷點(diǎn),然后在 Command 里面輸入你的 printf()調(diào)試信息:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這樣就可以了(前提是你已經(jīng)使用 ini 文件包含了上述內(nèi)容)。其實(shí)單純獲取時間信息是用處不大的,你還可以結(jié)合前面的變量和數(shù)組數(shù)據(jù)顯示,一起輸出到命令窗口,這樣你就能獲得這個斷點(diǎn)的執(zhí)行頻率和變量的數(shù)據(jù),但是這里需要說明一點(diǎn)的就是,魚鷹在 KEIL V5.14 下用調(diào)試器 CMSIS-DAP 可以同時在 Watch 窗口和命令窗口中實(shí)時刷新數(shù)據(jù),但是使用 ST-LINK 時發(fā)現(xiàn)命令窗口的數(shù)據(jù)變量值是不能實(shí)時刷新,也就是說這個變量始終是一個數(shù)據(jù),并沒有改變。但是后來在使用 V5.25 版本時,CMSIS-DAP 調(diào)試下,命令窗口能刷新,Watch 窗口卻不能刷新了,所以各種情況需要道友自行分析,不能認(rèn)為數(shù)據(jù)不變就是真的不變了,很可能是軟件或調(diào)試器的問題,但能確定的一點(diǎn)就是,當(dāng)你將程序暫停時,Watch 還是會刷新數(shù)據(jù)的,這個時候的數(shù)據(jù)是可以信任的。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

(關(guān)于這個還有一篇文章KEIL 下如何準(zhǔn)確測量代碼執(zhí)行時間?)LOG 輸出不知道你是否羨慕別人的上位機(jī)程序能夠?qū)崟r的打印 LOG 數(shù)據(jù),是否夢想著自己的嵌入式程序有一天也能實(shí)現(xiàn)?事實(shí)上真的可以。在嵌入式開發(fā)時,受單片機(jī)資源的限制,很多時候都是用串口打印數(shù)據(jù),高級一點(diǎn)的用 J-Scope 之類的工具,但是用串口有比較多限制:1. 需要實(shí)現(xiàn)串口驅(qū)動程序,并占用為數(shù)不多的串口資源2. 串口速度比較慢3. 需要一個類似串口助手的上位機(jī)4. 數(shù)據(jù)接收后需要自己保存這些數(shù)據(jù)5. 不能設(shè)置斷點(diǎn),調(diào)試受到很大的限制6. 調(diào)試代碼在調(diào)試完之后得刪除,萬一忘記了,就會影響性能但是用了 KEIL 自帶的 LOG 打印功能,就不存在這些問題,它的輸出速度就是調(diào)試器的速度,調(diào)試器多快,你的打印就有多塊(但是打印數(shù)據(jù)也別太多,需要針對性的打印,后面會說原因),而調(diào)試器速度一般都是 M 級別的,對于一般情況完全夠用了。現(xiàn)在看怎么使用,使用的話,其實(shí)很簡單,就是幾條指令的事情,在你的 ini 文件最后輸入以下命令:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這樣從這條命令以下的所有內(nèi)容都會保存在 DEBUG_LOG_OUT.txt 中(所以如果你不想把 ini 文件的其他內(nèi)容保存在 LOG 中的話,那么就把這條命令放在 ini 文件最后即可)。現(xiàn)在解釋一下這幾條命令,LOG OFF 表示將 LOG 文件關(guān)閉,即使你沒有打開一個 LOG 文件,執(zhí)行該命令也不會出錯,這條命令主要是防止一個 LOG 文件重復(fù)打開的錯誤,加上這條命令就不會了。第二條命令,即將 Command 窗口的數(shù)據(jù)保存在 DEBUG_LOG_OUT.txt 中,注意這里有個 > ,而 DEBUG_LOG_OUT 這個文件名就隨你意了,但是實(shí)驗(yàn)的時候按這個來,等你確定會了之后就可以隨便取你喜歡的名字了,出了問題自己對比一下就知道了。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

然后再說一點(diǎn),這里使用的是相對路徑,即你的工程文件下的路徑,如果你想往上一層,你可以使用 ../ 表示在這個工程上的一個文件夾下輸出 LOG 文件。當(dāng)退出調(diào)試模式之后,KEIL 將自動保存 Command 數(shù)據(jù)到文件中(也就是說在此之前你是看不到這些調(diào)試數(shù)據(jù)的),現(xiàn)在看看我的調(diào)試 LOG:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

一次設(shè)定之后,LOG 打印就不需要你操心了,即使調(diào)試器通信錯誤,它也會把之前輸出的數(shù)據(jù)保存下來的。看到這里,你應(yīng)該知道 ini 文件到底有多重要了吧,你的所有調(diào)試命令都可以用它保存并在進(jìn)入調(diào)試模式后自動執(zhí)行,比如說你有一個斷點(diǎn),很復(fù)雜,不想每次設(shè)置,那么你可以在設(shè)置完一次后,從命令窗口將這個命令復(fù)制到 ini 文件中,比如像這樣:

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

這樣你每次進(jìn)入調(diào)試模式后,那些斷點(diǎn)就會被自動設(shè)置了,根本不用你操心,而且如果需要修改的話,也是直接在編輯器中修改后重新編譯就行,馬上就能生效,不再需要從斷點(diǎn)窗口設(shè)置了。而這里有個刪除所有斷點(diǎn)的命令,這是為了防止和之前設(shè)置的斷點(diǎn)沖突,所以一次性全部刪除了(事實(shí)上,可以刪除某一個斷點(diǎn),但需要斷點(diǎn)序號,而斷點(diǎn)序號每一次都可能不一樣,所以選擇直接全部刪了方便)。而為了更好的配合這些功能,可以把下面的 Breakpoints 勾選去掉,這樣它就不會保存關(guān)于斷點(diǎn)的設(shè)置了,而為了讓 Toolbox 在關(guān)閉后還能每次自動顯示出來,也可以去掉 Toolbox 的勾選。

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

另外再說一點(diǎn),KEIL 支持把某一塊內(nèi)存數(shù)據(jù)保存成文件,這個命令是 SAVE,感興趣的話可以去官網(wǎng)了解一下。注意事項(xiàng)上面說了 KEIL 命令調(diào)試的很多優(yōu)點(diǎn),現(xiàn)在說說它的缺點(diǎn):1、KEIL 命令調(diào)試不支持指針,這個已經(jīng)多次強(qiáng)調(diào)了,要實(shí)現(xiàn)指針的功能,只能間接使用。2、對程序運(yùn)行造成一定的影響(事實(shí)上這個不關(guān) KEIL 的事,是調(diào)試系統(tǒng)本身的問題)前面說過,調(diào)試器可以說是第三方監(jiān)視器,雖然幾乎沒有侵入性(事實(shí)上對 CPU 還是有影響的),但是它還是會竊取 CPU 時鐘的,而且在執(zhí)行斷點(diǎn)的時候,雖然由 ini 文件定義的函數(shù)由 KEIL 執(zhí)行了,實(shí)際上上執(zhí)行這些函數(shù)也是需要時間的,那這個時間怎么來,就是通過暫停 CPU 后去執(zhí)行這些代碼,這個你可以通過 DWT 計數(shù)器看出來,因?yàn)橹挥?CPU 執(zhí)行了 DWT 才會計數(shù),但是你會發(fā)現(xiàn)在執(zhí)行這些代碼時,DWT 是沒有進(jìn)行計數(shù)的(在 KEIL 函數(shù)的前后獲取 DWT 計數(shù),可以發(fā)現(xiàn)計數(shù)值不變):

KEIL調(diào)試經(jīng)驗(yàn)總結(jié)

也就是說 CPU 和 KEI 是在交替使用系統(tǒng)時鐘的。平常來看,由于 KEIL 執(zhí)行速度很快,看不出來問題,但到中斷的時候卻會出現(xiàn)問題。情況是這樣的,驅(qū)動步進(jìn)電機(jī)時,魚鷹使用了這種調(diào)試方法打印每次進(jìn)入定時器中斷的時間,發(fā)現(xiàn)即使使用最高精度的情況下(CPU 運(yùn)行時鐘),每次進(jìn)入中斷的時間看似都是固定的,但步進(jìn)電機(jī)還是表現(xiàn)出失步情況,也就是說系統(tǒng)內(nèi)部時間看起來每次進(jìn)入中斷時間一樣,但是實(shí)際情況是,已經(jīng)丟失了時間(好好理解這句話),這個時間損耗就在運(yùn)行這些命令上,而一旦把這些命令輸出刪去,就會發(fā)現(xiàn)電機(jī)不再出現(xiàn)失步了。這是一個比較大的缺陷,但是在一般情況下是不會有多大問題的,因?yàn)橐话闱闆r下竊取一點(diǎn) CPU 時間也不會對整個系統(tǒng)有太大影響,前提是你別竊取太多了。

原文標(biāo)題:KEIL 調(diào)試經(jīng)驗(yàn)總結(jié)

文章出處:【微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5013

    瀏覽量

    88075
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1557

    瀏覽量

    77043
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5121

    瀏覽量

    98195

原文標(biāo)題:KEIL 調(diào)試經(jīng)驗(yàn)總結(jié)

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    DCDC 芯片無輸出的問題的調(diào)試經(jīng)驗(yàn)

    該文檔聚焦于 DCDC 芯片無輸出的問題,分享調(diào)試經(jīng)驗(yàn),幫助工程師解決實(shí)際電路調(diào)試中的難題,主要內(nèi)容包括:*附件:【調(diào)試經(jīng)驗(yàn)分享】DCDC芯
    的頭像 發(fā)表于 01-24 16:02 ?349次閱讀

    電源環(huán)路快速調(diào)試理論與經(jīng)驗(yàn)

    電源環(huán)路快速調(diào)試理論與經(jīng)驗(yàn) 在工程實(shí)際應(yīng)用中,下圖所示有源補(bǔ)償網(wǎng)絡(luò)最常見: 有源補(bǔ)償網(wǎng)絡(luò)(一)的簡圖如下所示: 以上均屬于有源超前-滯后補(bǔ)償網(wǎng)絡(luò),其傳遞函數(shù)、零點(diǎn)和極點(diǎn)的推導(dǎo)公式詳見徐德鴻教授所著
    的頭像 發(fā)表于 11-28 10:59 ?330次閱讀
    電源環(huán)路快速<b class='flag-5'>調(diào)試</b>理論與<b class='flag-5'>經(jīng)驗(yàn)</b>

    Linux日志管理經(jīng)驗(yàn)總結(jié)

    日志內(nèi)容,合理的日志內(nèi)容(日志錨點(diǎn),內(nèi)容格式,等)可以為應(yīng)用服務(wù)的執(zhí)行記錄、問題排查提供最有力的幫助。
    的頭像 發(fā)表于 10-24 17:36 ?262次閱讀

    業(yè)務(wù)復(fù)雜度治理方法論--十年系統(tǒng)設(shè)計經(jīng)驗(yàn)總結(jié)

    復(fù)雜度量公式 ? ? ? ? ? 子模塊的復(fù)雜度cp乘以該模塊對應(yīng)的開發(fā)時間權(quán)重值tp,累加后得到系統(tǒng)的整體復(fù)雜度C 這里的子模塊復(fù)雜度 cp是一個經(jīng)驗(yàn)值 需要注意:如果一個子系統(tǒng)特別復(fù)雜,但是很少使用及修改,也不會對整體復(fù)雜度造成太大影響。例:spring框架內(nèi)部代
    的頭像 發(fā)表于 09-05 14:11 ?1059次閱讀
    業(yè)務(wù)復(fù)雜度治理方法論--十年系統(tǒng)設(shè)計<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    keil可以讀出單片機(jī)的程序嗎

    Keil是一款廣泛應(yīng)用于單片機(jī)程序開發(fā)的軟件,它提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案。然而,關(guān)于Keil是否能直接“讀出”單片機(jī)的程序,這一
    的頭像 發(fā)表于 09-02 10:32 ?1246次閱讀

    keil軟件仿真如何仿真輸入

    Keil軟件是一款廣泛使用的嵌入式開發(fā)工具,它提供了豐富的功能,包括代碼編輯、編譯、調(diào)試和仿真等。 1. Keil軟件概述 Keil軟件是一款集成開發(fā)環(huán)境(IDE),專為嵌入式系統(tǒng)開發(fā)
    的頭像 發(fā)表于 09-02 10:25 ?999次閱讀

    個人機(jī)智云開發(fā)實(shí)踐:經(jīng)驗(yàn)總結(jié)與技術(shù)分享

    在個人的機(jī)智云開發(fā)過程中,主要包括以下幾個步驟1.項(xiàng)目創(chuàng)建與數(shù)據(jù)點(diǎn)設(shè)置2.在機(jī)智云平臺上創(chuàng)建項(xiàng)目并定義所需的數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)將用于設(shè)備和云端的通信。3.無線通信模塊固件燒錄4.下載并燒錄適用于所選無線模塊的GAgent固件。例如,我使用了正點(diǎn)原子的esp8266模塊,選擇了對應(yīng)的GAgentforESP8266固件。5.MCU方案代碼移植6.將機(jī)智云提供的
    的頭像 發(fā)表于 07-05 08:10 ?392次閱讀
    個人機(jī)智云開發(fā)實(shí)踐:<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>與技術(shù)分享

    瑞薩雙通道同步升壓控制器ISL81805調(diào)試經(jīng)驗(yàn)分享及總結(jié)

    本文介紹了簡要介紹了瑞薩 ISL81805 的特性性能等,并通過電源調(diào)試,為大家分享了相關(guān)的經(jīng)驗(yàn)和注意點(diǎn)。
    的頭像 發(fā)表于 06-17 18:54 ?1906次閱讀
    瑞薩雙通道同步升壓控制器ISL81805<b class='flag-5'>調(diào)試</b><b class='flag-5'>經(jīng)驗(yàn)</b>分享及<b class='flag-5'>總結(jié)</b>

    凱迪正大對電纜安全檢查知識經(jīng)驗(yàn)總結(jié)分享

    電纜作為電力傳輸?shù)闹匾d體,其安全穩(wěn)定運(yùn)行直接關(guān)系到整個電力系統(tǒng)的可靠性。因此,電纜的安全檢查至關(guān)重要。下面給大家分享一下武漢凱迪正大電氣多年電纜故障查找總結(jié)經(jīng)驗(yàn),我們將圍繞電纜安全檢查的關(guān)鍵點(diǎn),給大家分享。
    的頭像 發(fā)表于 05-27 11:33 ?444次閱讀
    凱迪正大對電纜安全檢查知識<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>分享

    請問workbench不生成keil文件怎么調(diào)試

    workbench不生成keil文件怎么調(diào)試
    發(fā)表于 05-27 06:16

    RZ/G2L Demo調(diào)試經(jīng)驗(yàn)流程分享(1)

    r01us0553ej0107-rz-g(Release Note).pdf,r01us0556ej0102-rz-g(Board_StartUp_Guide_smarcEVK).pdf,對SMARC EVK of RZ/G2L的調(diào)試經(jīng)驗(yàn)
    的頭像 發(fā)表于 05-06 14:25 ?739次閱讀
    RZ/G2L Demo<b class='flag-5'>調(diào)試</b><b class='flag-5'>經(jīng)驗(yàn)</b>流程分享(1)

    基于FPGA進(jìn)行DNN設(shè)計的經(jīng)驗(yàn)總結(jié)

    DNN中應(yīng)用最廣泛的是CNN和RNN,CNN是一種卷積網(wǎng)絡(luò),在圖片識別分類中用的較多,RNN可以處理時間序列的信息,比如視頻識別和語音識別。
    發(fā)表于 04-07 10:23 ?616次閱讀
    基于FPGA進(jìn)行DNN設(shè)計的<b class='flag-5'>經(jīng)驗(yàn)總結(jié)</b>

    使用外部QSPI在KEIL調(diào)試老是不對,為什么?

    我打算程序在QSPI 里運(yùn)行,但是要實(shí)現(xiàn)在KEIL調(diào)試,我首先將STM32H750 W25Q64對應(yīng)的FLM 文件放到系統(tǒng)目錄下,然后做好配置,然后調(diào)試程序,但是程序起始運(yùn)行地址不在0X90000000對應(yīng)的地址上,反而在0X
    發(fā)表于 04-01 07:21

    PLC系統(tǒng)的安裝與調(diào)試流程

    PLC控制系統(tǒng)的安裝與調(diào)試,涉及到各項(xiàng)工作,并且只能按序進(jìn)行,一環(huán)緊扣一環(huán),稍有不慎都將導(dǎo)致調(diào)試失敗,不但延誤工期,甚至?xí)p壞設(shè)備。本文介紹了在現(xiàn)場實(shí)踐中總結(jié)出的PLC控制系統(tǒng)的安裝與調(diào)試
    的頭像 發(fā)表于 03-27 17:08 ?921次閱讀
    PLC系統(tǒng)的安裝與<b class='flag-5'>調(diào)試</b>流程

    使用keil可以用jlink下載調(diào)試,但是用rt thread studio就無法下載調(diào)試是怎么回事?

    使用keil可以用jlink下載調(diào)試,但是用rt thread studio就無法下載調(diào)試,這個是怎么回事?
    發(fā)表于 03-01 06:35
    主站蜘蛛池模板: 福利影院在线 | 狠狠干夜夜爽 | 5566精品资源在线播放 | 亚洲羞羞裸色私人影院 | 日本人的xxxxxxxxx69 | 精品在线视频一区 | 天天综合天天看夜夜添狠狠玩 | 日本久操视频 | 第四色激情 | 国产成人在线影院 | 狠狠色丁香婷婷久久综合不卡 | 天天射日日射 | 亚洲国产成人久久精品影视 | 亚洲国产精品乱码一区二区三区 | 亚洲小说区图片区另类春色 | 亚色网站 | 特黄特黄特色大片免费观看 | 婷婷综合五月天 | 国产三级日本三级在线播放 | 免费高清视频在线观看 | 色五月激情五月 | 最近观看免费高清视频 | 国产在线观看午夜不卡 | 深夜释放自己vlog糖心旧版本 | 亚洲综合色丁香婷婷六月图片 | 狠狠操操| 四虎影片国产精品8848 | 欧美a色| 国产精品免费久久 | 国内精品视频 | 中文字幕一区在线播放 | 亚洲精品一线二线三线 | h视频在线看 | 欧美性色黄在线视 | 欧美一区二区三区高清视频 | 国产精品毛片天天看片 | 恨恨操 | 热99在线视频 | 97干干| 久久99国产精品久久99 | 五月天婷婷久久 |