有很多研究單片機的小伙伴在面對多核異構處理器時,可能會對多核的啟動流程感到困惑——因為不熟悉GCC編程和GDB調試,所以也無法確定多核異構處理器的程序是否能像單片機那樣方便地編寫和仿真。本篇文章,小編就將以飛凌嵌入式的OKMX8MP-C開發板為例,為大家介紹多核異構處理器M核程序的啟動配置、程序編寫和實時仿真的過程。
一、M核程序啟動 NXP i.MX8M Plus處理器的M核是無法單獨啟動的,必須由A核uboot加載,因此飛凌嵌入式基于這款處理器打造的OKMX8MP-C開發板也是默認不開啟M核的,需要修改uboot下的環境變量,配置M核自啟動。 這樣每次A核啟動后,uboot會加載/run/media/mmcblk2p1/目錄下的forlinx_m7_tcm_firmware.bin文件,M核啟動后會完成內核初始化,并由資源域0變為資源域1,再將時鐘、外設、內存等資源初始化,就可以完成程序的輪轉運行了。 1. uboot環境變量加載M核 (1)重啟OKMX8MP-C開發板,按空格鍵進入uboot命令行控制臺。
(2)輸入”1”進入uboot控制臺。并按順序依次輸入以下命令,修改uboot環境變量,使其能加載M核程序。
2. 下載M核程序 (1)我們可以使用IAR軟件對飛凌M核軟件開發包的程序進行編譯,在工程目錄/IAR/debug目錄下將生成*.bin文件,將文件名稱改為:forlinx_m7_tcm_firmware.bin ;
(2)使用串口Xmodem,網絡FTP,SCP,U盤,TF卡等多種方式,都可以將forlinx_m7_tcm_firmware.bin 從電腦拷貝至核心板/run/media/mmcblk2p1/目錄下,在Linux調試串口輸入 sync 命令同步 ; (3)給OKMX8MP-C開發板重新上電,A核uboot會加載M核程序,通過M核串口即可看到程序的打印信息。 二、M核程序編寫 許多使用單片機的用戶習慣通過Keil或IAR這類IDE工具對程序進行編寫;由于此類軟件易用性較差,因此很多時候我們都會再使用VScode等編輯器進行代碼的編輯開發;但此類編輯器對程序編譯、燒寫和仿真時又相當不方便,大家在選擇工具時可能會很頭痛。 這里小編推薦使用VScode對代碼編寫和修改,使用IAR對程序編譯、下載、仿真。 1. IDE工具——IAR IAR是支持多個廠家的單片機處理器的集成開發環境(IDE),用于提供開發環境的應用程序,是集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟件。 i.MX8M Plus處理器的IAR版本要求在9.20版本以上,用戶可在網上自行下載。用戶在安裝IAR后,打開飛凌嵌入式提供的M核SDK開發包,可在boards\evkmimx8mp\driver_examples\*\*\iar目錄下找到iar工程文件*.ewww,雙擊即打開IAR項目。
2. VScode VScode是微軟推出的一款跨平臺的編輯器,能夠在windows、Linux、iOS等平臺上運行,通過安裝插件可以讓這個編輯器變成一個編譯器。軟件打開后在菜單欄單擊文件--打開文件夾,選擇SDK下對應的例程,即可完成代碼的編寫和修改工作。 三、M核程序仿真 飛凌嵌入式OKMX8MP-C開發板支持JTAG對M核的硬件仿真功能,用戶可在IAR中通過JTAG設置斷點,實時查看和修改各變量,全速運行或單步運行程序等功能,提高程序排查錯誤時的效率。 1. 安裝JTAG (1)在Segger官網下載J-LINK驅動,并在電腦上安裝程序,IDE工具選擇IAR; (2)由于i.MX8M Plus是推出時間相對較短的芯片,因此需要更換Segger目錄下8mp的J-LINK驅動; (3)如果使用的NXP官方的 SDK還需要更換啟動文件。 2. 硬件鏈接 飛凌嵌入式OKMX8MP-C開發板JTAG接口采用標準線序,用戶可通過20pin 2.54間距轉10pin 1.27間距的JTAG轉接板和10pin1.27 間距的連接線與J-LINK連接,注意J-LINK 1腳要和開發板JTAG 1 腳對應。
3. 硬件仿真 (1)用戶將程序編譯完成后,將執行程序放入 核心板/run/media/mmcblk2p1/ 目錄下,因為硬件仿真是將SDK包的程序加載到內存執行,所以要仿真的程序和核心板中的forlinx_m7_tcm_firmware.bin可不是同一個; (2)點擊仿真按鈕或快捷鍵Ctrl+D,進入仿真界面,可正常設置斷點、監測變量、單步和全速執行、復位等操作; (3)如果需要查看freeRTOS任務調度情況,在工程處右擊,選擇OptionS菜單,Debugger-Plugins界面中勾選FreeRTOS and OpenROTS。
4. 串口打印 飛凌嵌入式OKMX8MP-C開發板除了支持JLink硬件仿真外,應用程序中還可通過PRINTF函數向M核串口輸出打印信息,了解程序運行過程。
|