接上一章:NCS初探--基于nrf5340的blinky
本次測試,網絡核跑 radio_test ,應用核跑 empty_app_core。這個empty_app_core的項目就是為了那些隻在網絡核上跑的demo設計的,因為單獨一個網絡核是跑不起來的,必須要在應用核中使能網絡核才可以!這個空的工程使能網絡核後就關閉了ram和時鐘。
需注意:
1. 使用IDE SES下載下傳有時會遇到問題,推薦使用west下載下傳!
2. 如果要debug其中一個核的代碼,最好放在最後下載下傳。
radio_test
1.使用SES
首先使用SES裝載項目,目的是ses在裝載項目時,會先build一遍,我們後面隻要下載下傳代碼就可以了。項目位址如圖:
然後選擇闆子型号:
注意,radio_test 隻能建構在網絡核上,如果你選擇的是應用核,會建構失敗!
注意,選擇nrf5340dk而不是pdk!
項目裝載好後,打開NCS内置cmd,路徑在NCS/toolchain/git-cmd.cmd 。不能使用預設cmd,因為内置的cmd有配置必要的環境變量!
在cmd中使用 cd 指令定位到項目檔案夾下,比如我的路徑是:
E:\NCS\v1.5.1\nrf\samples\peripheral\radio_test\build_nrf5340dk_nrf5340_cpunet
這個檔案夾就是項目裝載成功後SES自動根據腳本建立的。
使用指令 【west flash --recover】,會自動重新編譯一遍然後下載下傳。
參數 【--recover】 不是必須的,但是在首次下載下傳建議直接使用,或者推薦使用 【nrfjprog --eraseall】先把闆子裡面的代碼擦除再燒寫,避免因為代碼還在跑而引發的各種異常。
2.使用west
首先我們使用NCS内置cmd定位到radio_test這個檔案夾,然後使用west建構項目:
west build -b nrf5340dk_nrf5340_cpunet -d build_nrf5340_cpunet -p
-b 後跟闆子型号
-d 後跟建構項目的目标目錄,不指定則預設為 build
-p 清除目錄緩存
使用這個指令後,cd 到你指定的目錄裡,使用【west flash --recover】燒寫網絡核代碼。
empty_app_core
步驟同上,也是兩種方式,一種使用SES裝載項目,一種直接用west指令建構項目,裝載時選項如下:
使用west建構項目請參照上一節,注意 -b 後跟的闆子應該為nrf5340dk_nrf5340_cpuapp。
注意,使用【west flash】下載下傳時,不要再加參數【--recover】。
下載下傳完成後:
測試
如果前兩步都沒有問題, 則nrf5340dk在電腦上的三個序列槽應該有一個發送指令會傳回,序列槽配置如下:
根據官方文檔,插上開發闆後,電腦上顯示3個序列槽,序列槽号從大到小,最大的序列槽号是應用核的列印,最小的是網絡核列印,中間的預設不輸出。但是根據實際使用發現,有時候也可能是中間的序列槽,是以最好三個都試一下,如果正常,則如:
輸入help可以顯示所有支援的指令!
TAB鍵可以自動補全或者提示參數!
比如你要設定資料速率,輸入d然後按TAB鍵:
再輸入a再按TAB,補全data_rate,再按TAB,提示可以跟哪些參數:
調試
首先隻用一個jlink是無法同時調試兩個核的(兩個jlink沒試過),是以我們分為兩種情況:
1.調試網絡核
操作步驟:
(1)為了防止下載下傳代碼出現異常,我們先用【nrfjprog -e】擦除所有代碼。
(2)打開radio_test下載下傳代碼并進入debug模式,中間可能會彈出來:
我們直接點Yes就可以,這時候代碼已經停在main裡:
而且序列槽也會列印出來OS已經啟動了:
這個時候你可以選擇直接運作代碼,或者等待app核代碼燒錄。比如我這裡直接運作:
可以看到多了一句列印,但是因為沒有app核代碼,網絡核沒有被使能,是以卡在了等待時鐘函數裡。這個時候點暫停,也可以印證:
這時候我們使用【west flash】下載下傳app核代碼:
可以看到下載下傳成功後,網絡核代碼順利跑了起來。
2.調試應用核
如果你從上一步停止debug,然後打開empty_app_core工程,直接start debugging,你會發現無法debug!代碼停在:
筆者猜測是因為網絡核如果在運作了,應用核去重新下載下傳并将代碼重新從代碼起點開始運作會有問題!
目前解決辦法是,在網絡核沒有跑起來之前debug應用核代碼:
(1)先使用【nrfjprog -e】擦除所有代碼
(2)使用【west flash】下載下傳net核代碼
(3)在SES裡start debugging,中間可能會彈出:
直接點Yes,代碼定位在main裡:
此時,你用序列槽會發現,網絡核代碼已經在跑了,應用核代碼還在暫停狀态,是以兩個核心的代碼都是獨立運作的!此時你就算一直把應用核代碼處在debugging暫停狀态,仍然可以使用指令去和序列槽互動。
3.不複位調試
上面兩種調試都是基于需要代碼從頭開始運作的調試,如果你調試時并不需要代碼一定要從頭開始,那可以使用Attach Debugger,使用它的好處在于不用重新下載下傳和複位代碼,不管是應用核還是網絡核,直接啟動就可以直接調試,不用再考慮兩個核先去下載下傳哪個的問題。
當然,啟動調試之後,MCU是直接處于運作狀态的,除此之外其他都和從頭開始運作debug是一樣的。