天天看點

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

接上一章: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一遍,我們後面隻要下載下傳代碼就可以了。項目位址如圖:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

 然後選擇闆子型号:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

注意,radio_test 隻能建構在網絡核上,如果你選擇的是應用核,會建構失敗!

注意,選擇nrf5340dk而不是pdk!

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

項目裝載好後,打開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指令建構項目,裝載時選項如下:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試
NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

使用west建構項目請參照上一節,注意 -b 後跟的闆子應該為nrf5340dk_nrf5340_cpuapp。

 注意,使用【west flash】下載下傳時,不要再加參數【--recover】。

 下載下傳完成後:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

測試

如果前兩步都沒有問題, 則nrf5340dk在電腦上的三個序列槽應該有一個發送指令會傳回,序列槽配置如下:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

根據官方文檔,插上開發闆後,電腦上顯示3個序列槽,序列槽号從大到小,最大的序列槽号是應用核的列印,最小的是網絡核列印,中間的預設不輸出。但是根據實際使用發現,有時候也可能是中間的序列槽,是以最好三個都試一下,如果正常,則如:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

輸入help可以顯示所有支援的指令!

TAB鍵可以自動補全或者提示參數!

比如你要設定資料速率,輸入d然後按TAB鍵:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

再輸入a再按TAB,補全data_rate,再按TAB,提示可以跟哪些參數:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

調試

首先隻用一個jlink是無法同時調試兩個核的(兩個jlink沒試過),是以我們分為兩種情況:

1.調試網絡核

操作步驟:

(1)為了防止下載下傳代碼出現異常,我們先用【nrfjprog -e】擦除所有代碼。

(2)打開radio_test下載下傳代碼并進入debug模式,中間可能會彈出來:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

我們直接點Yes就可以,這時候代碼已經停在main裡:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

 而且序列槽也會列印出來OS已經啟動了:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

這個時候你可以選擇直接運作代碼,或者等待app核代碼燒錄。比如我這裡直接運作:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

可以看到多了一句列印,但是因為沒有app核代碼,網絡核沒有被使能,是以卡在了等待時鐘函數裡。這個時候點暫停,也可以印證:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

這時候我們使用【west flash】下載下傳app核代碼:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

可以看到下載下傳成功後,網絡核代碼順利跑了起來。 

 2.調試應用核

如果你從上一步停止debug,然後打開empty_app_core工程,直接start debugging,你會發現無法debug!代碼停在:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

 筆者猜測是因為網絡核如果在運作了,應用核去重新下載下傳并将代碼重新從代碼起點開始運作會有問題!

 目前解決辦法是,在網絡核沒有跑起來之前debug應用核代碼:

(1)先使用【nrfjprog -e】擦除所有代碼

(2)使用【west flash】下載下傳net核代碼

(3)在SES裡start debugging,中間可能會彈出:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

直接點Yes,代碼定位在main裡:

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

此時,你用序列槽會發現,網絡核代碼已經在跑了,應用核代碼還在暫停狀态,是以兩個核心的代碼都是獨立運作的!此時你就算一直把應用核代碼處在debugging暫停狀态,仍然可以使用指令去和序列槽互動。

3.不複位調試 

上面兩種調試都是基于需要代碼從頭開始運作的調試,如果你調試時并不需要代碼一定要從頭開始,那可以使用Attach Debugger,使用它的好處在于不用重新下載下傳和複位代碼,不管是應用核還是網絡核,直接啟動就可以直接調試,不用再考慮兩個核先去下載下傳哪個的問題。

NCS初探--基于nRF5340的雙核測試radio_testempty_app_core測試調試

當然,啟動調試之後,MCU是直接處于運作狀态的,除此之外其他都和從頭開始運作debug是一樣的。

繼續閱讀