2021年2月23日 星期二

Raspberry Pi Pico-C/C++ 開發環境建置(命令列和 Visual Studio Code)

網頁最後修改時間:2021/02/23

前一篇已經介紹過了 MicroPython 和 CircuitPython 開發 Raspberry Pi Pico(下面簡稱 Pico)程式編輯環境的建置,這一篇要來介紹怎麼在 Windows 10 建置 C/C++ 開發 Pico 韌體程式的編輯環境。

主題有:


*********************************************************************************

若須購買 Pico,可參考:Raspberry Pi Pico RP2040 開發板分類賣場

有賣場布拉格網頁可參考,可用於 MicroPython 的週邊裝置:

    *********************************************************************************

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
    硬體環境:

    • Windows 10,64 位元作業系統,20H2 版本;
    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*


    【(01)C/C++ 開發環境建置】

    建構 Pico 的 C/C++ 開發環境說難也不難,但是容易在建置過程中,出現預期之外的事情,尤其是在編譯程式的步驟,所以請跟著文中的各小節順序步驟來做。若是您在其中某個過程出現錯誤,文中可能不會剛好有解答,請自行上網找找錯誤訊息所代表的意思,進行排除。


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    *(01-01)所需軟體下載和安裝

    在 Raspberry Pi Raspbian 作業系統建置 Pico C/C++ 開發環境是相對容易的,畢竟 Pico 是 Raspberry Pi 自己開發出來的東西。所以,在 Windows 10 下要去建置 Pico C/C++ 開發環境,就需要安裝幾個額外的軟體套件(Toolchain)才能支援 Pico C/C++ 的開發。

    這幾個軟體套件是:

    • Git
      用來下載 Github 上的程式碼。
    • ARM GCC Compiler
      編譯給 ARM 用的程式碼,所需要用到的工具程式。
    • CMake
      來自維基百科的解釋: CMake是個一個開源的跨平台自動化建構系統,用來管理軟體建置的程式,並不依賴於某特定編譯器,並可支援多層目錄、多個應用程式與多個函式庫。 它用組態檔控制建構過程的方式和Unix的make相似,只是CMake的組態檔取名為CMakeLists.txt。
    • Visual Studio Code(+Visual Studio 2019 Community)
      撰寫 Pico 韌體程式所使用的 IDE。
    • Build Tools for Visual Studio 2019
      來自微軟官網的解釋:這些 Build Tools 可讓您從命令列介面建置 Visual Studio 專案。 支援的專案包括:ASP.NET、Azure、C++ Desktop、ClickOnce、容器、.NET Core、.NET Desktop、Node.js、Office 和 SharePoint、Python、TypeScript、單元測試、UWP、WCF 以及 Xamarin。
    • Python 3

    另外,為了驗證上面的安裝是正常、且可以正確地編譯和產生所需要的 *.uf2 檔,要另外下載 Pico 的軟體開發套件(SDK) pico-sdk 和範例程式 pico-examples;只有通過命令列成功編譯,Visual Studio Code 才能使用來編譯 Pico 的程式。

    ** 除非有特別說明,否則下載的檔案版本都是以 Windows 64 位元作業系統為主要依據,下載的日期為 2021/02/13。

    下面就針對這幾個軟體來做說明。


    **(01-01-01)Git

    如下圖所示。進入到 Git 下載網頁,點選 64-bit Git for Windows Setup. 開始下載(最新的版本),下載的檔案名稱為:Git-2.30.1-64-bit.exe

    滑鼠雙擊下載的檔案,打開安裝程式。

    首先,取消畫面中的選項 ▢ Only show new options,這會讓您自己可以組態 Git 的一些選項(大多的選項可以使用預設值或是自己決定,除了編輯器的選項要選 Windows 裡面已經有的(不然Git 預設是使用 Vim 作為 .git* 的編輯器))。

    完成後,按 "Next >" 進入到下一個畫面。

    接下來的這個畫面,最重要的是畫紅線的那個選項要勾起,這樣 .git* 檔案,才會與接下來設定預設文字編輯的軟體,連結在一起。其他的,維持預設或是自己決定;設錯了或後悔了,重新再安裝一次就可以。

    完成後,按 "Next >" 進入到下一個畫面。

    取決於 Windows 作業系統中有什麼文字編輯軟體,這個畫面就是用來設定開啟 .git* 檔案的是哪一款文字編輯軟體?如果都沒有,就選擇 Use Notepad as Git's default editor(這個選項就是設定記事本為預設編輯器);我是選擇使用 Notepad++ 作為預設編輯器。

    選好後,按 "Next >" 進入到下一個畫面。

    接下來的各項設定就沒什麼特別的,可使用 Git 的預設值,不然就是跟我設成一樣的!

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    除非 Windows 作業系統中有安裝 MinTTY,否則上面的選項不要選!

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Next >" 進入到下一個畫面。

    設好後,按 "Install" 開始安裝。

    開始安裝 ...

    取消畫面上所有選項,按 "Finsih" 完成 Git 安裝。

    到此完成 Git 的安裝。


    **(01-01-02)ARM GCC Compiler

    如下圖所示。進入到 GNU Arm Embedded Toolchain Downloads 的下載網頁,往下滾動一些網頁,點選 gcc-arm-none-eabi-10-2020-q4-major-win32.exe 開始下載(最新的版本),下載的檔案名稱為:gcc-arm-none-eabi-10-2020-q4-major-win32.exe

    滑鼠雙擊下載的檔案,打開安裝程式。

    首先選擇安裝過程中所使用的語言,在這裡選擇 Chinese (Traditional) (繁體中文)

    完成後,按 "OK" 開始進入到安裝畫面。

    按 "下一步(N)",進入到下一個畫面。

    按 "我接受(I)",進入到下一個畫面。

    選擇軟體要安裝的位置。

    完成後,按 "安裝(I)" 開始進行安裝。

    安裝中 ...

    最後完成安裝之前,在這個畫面最重要的就是畫紅線那個選項。這個選項,會將 ARM GCC 安裝路徑,儲存到作業系統的環境變數。若忘記勾選這個選項,Pico 韌體程式就會找不到 ARM GCC 做編譯!

    設好後,按 "完成(F)" 結束程式的安裝。

    到此,就完成 ARM GCC Compiler 的安裝!


    **(01-01-03)CMake

    如下圖所示。進入到 CMake 的下載網頁,往下滾動一些網頁,點選 cmake-3.19.4-win64-x64.msi 開始下載(最新的版本),下載的檔案名稱為:cmake-3.19.4-win64-x64.msi

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
    安裝此版本(v3.19.4)有一點需要注意一下(紅線的部分)!如果之前有安裝過其他版本的 CMake,請先移除掉再做安裝(除非該版本沒有特別標註)。
    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

    滑鼠雙擊下載的檔案,打開安裝程式。

    "Next",進入到下一個畫面。

    勾選 ✅ I accept the terms in the License Agreement,同意授權合約。

    勾選後,按 "Next" 進入到下一個畫面。

    接下來的這個選項很重要!

    選擇 ◉ Add CMake to the system PATH for alll users,將 CMake 的安裝路徑加入到作業系統的 PATH 環境變數,而且給所有的使用者使用。

    設好後,按 "Next" 進入到下一個畫面。

    選擇安裝的資料夾。

    設好後,按 "Next" 進入到下一個畫面。

    按下 "Install",開始安裝。

    安裝中...

    按 "Finish",完成 CMake 的安裝。

    到此,完成 CMake 的安裝。


    **(01-01-04)Visual Studio Code(+Visual Studio 2019 Community)

    Visual Studio 2019 Community、Visual Studio Code 和下一節(01-01-05)的 Build Tools for Visual Studio 2019 都是在同一個網頁中下載

    首先在網頁的開頭處,可以下載 Visual Studio 2019。這裡下載的是社群(Community)版本,檔案名稱是:vs_community__1867175997.1613190539.exe

    下載很容易,按下 "免費下載" 按鈕後,會另外開啟一個視窗。

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
    Visual Studio 2019 Community 應該是不用安裝,不過因為我電腦中有,而且在安裝 build tools for Visual Studio 2019 時有自動被開起來,所以只好把這個部分列出來。

    所以,除非安裝 buile tools for Visual Studio 2019 有問題,可以先選擇不安裝 Visual Studio 2019 Community。

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

    等一會兒,就會自動開啟檔案總管,讓您選擇資料夾儲存。

    接著再往下滾動一些網頁,可以看到如下圖所示的 Visual Studio Code 下載的部分。

    滑鼠移動到(左邊)Visual Studio Code 下的 "免費下載" 上面,下面會出現一個下拉選單,點選 Windows x64,會開啟另一個視窗。

    等一會兒,就會自動開啟檔案總管,讓您選擇資料夾儲存,下載的檔案名稱為:VSCodeUserSetup-x64-1.53.2.exe

    Visual Studio 2019 Community 和 Visual Studio Code 兩者的安裝沒有什麼要特別要注意的地方,只要跟著安裝精靈一步步做即可,所以就不再特別 SHOW 出安裝過程!

    Visual Studio Code 是專門用來作為撰寫 Pico C/C++ 韌體程式的建議 IDE。它的功能很多也很方便,是一個可用於多種程式語言開發的 IDE,對於開發 Pico 韌體程式來說,除了使用命令列之外,使用 IDE 方便用戶不用再手動輸入指令進行編譯,而且能安裝在多種作業系統,是一個值得學習和使用的軟體開發 IDE。


    **(01-01-05)Build Tools for Visual Studio 2019

    接續上一節(01-01-04)的網頁,往下滾動網頁到幾近最下方,滑鼠點按 > Visual Studio 2019 的工具,下面會出現幾個可以下載的工具軟體。

    按下 build tools for Visual Studio 2019 旁邊的 "下載" 按鈕,會另外開啟一個視窗。

    等一會兒,檔案總管就會自動開啟,讓您選擇資料夾儲存,下載的檔案名稱為:vs_buildtools__761303167.1568543353.exe

    滑鼠雙擊下載檔案,等待安裝畫面出現,按 "繼續(O)" 進入到下一個畫面。

    這時安裝程式會自動下載所需要的檔案,要等一會兒!

    下載完成後,就會開啟一個 "Visual Studio Installer" 的視窗。

    這裡會繼續下載並開始安裝 build tools,要耐心再等等!

    不一會兒就會安裝好!

    如果之前曾經安裝過舊版本 build tools for Visual Studio 2019,就會沿用之前的設定進行安裝,安裝之後就會出現如下的畫面。

    按下 "關閉",就可完成整個 build tools for Visual Studio 2019 的安裝。

    若是之前沒有安裝過舊版本的 build tools for Visual Studio 2019,那麼就會出現下面的視窗。您要確認 C++ 建置工具C++ build tools)已被勾選(要不就自己勾選),然後按下 "安裝"(Install),開始安裝選擇的項目。

    完成後,按下 "關閉" 完成安裝。

    到此,就完成 build tools for Visual Studio 2019 的安裝。


    **(01-01-06)Python 3

    如下圖所示,進入到 Python 的下載網頁,點選 Latest Python 3 Release - Python 3.9.1 (或是選擇當下的最新版本)進入下載頁。

    進入後,往下滾動網頁至幾近最下方處,點擊 Windows Installer (64-bit) 下載,下載的檔案名稱為:python-3.9.1-amd64.exe

    滑鼠雙擊下載的檔案,打開安裝程式。

    勾選 ✅ Add Python 3.9 to PATH,添加 Python 3 的路徑到作業系統的 PATH 的環境變數。

    選擇 "Customize install",使用客製化方式安裝。.

    勾選畫面中的全部選項。

    設好後,按 "Next" 進入到下一個畫面。

    確認有勾選到 ✅ Install for all users 和 ✅ Add Python to environment variables 兩個選項,並設定好 Python 3 安裝資料夾。

    完成後,按 "Install" 開始安裝 Python 3。

    安裝中 ...

    安裝中 ...

    按 "Close" 完成 Python 3 安裝。

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
    文件中特別說明到,Makefile 需要 python3.exe 來執行,但現在基本上不再需要再特別去做設定。但如果等一下下面的編譯出現找不到 Python 的錯誤,請用管理者權限開啟 "命令提示字元" 視窗,執行下面指令(改變目錄到 Python 3 安裝的資料夾),然後再重新執行原來的動作:

    d:/Python/Python3> mklink python3.exe python.exe

    /*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

    到此,完成 Python 3 的安裝。


    **(01-01-07)pico-sdk

    接下來要來準備編譯的工作。

    首先,編譯 Pico 的韌體程式需要它的 SDK,要先來把它下載回來。

    開始之前,請自己選擇一個目錄作為下載的目的資料夾(下面操作用的資料夾是 E:\EmbeddedSystemDev\Raspberry Pi Pico),然後打開 "Windows / Visual Studio 2019 Community / x64_x86 Cross Tools Command Prompt for VS 2019" 命令提示字元視窗,輸入下面指令:

    E:\>cd "EmbeddedSystemDev\Raspberry Pi Pico"
    E:\EmbeddedSystemDev\Raspberry Pi Pico>git clone -b master https://github.com/raspberrypi/pico-sdk.git
    E:\EmbeddedSystemDev\Raspberry Pi Pico>cd pico-sdk
    E:\EmbeddedSystemDev\Raspberry Pi Pico\pico-sdk>git submodule update --init

    上面的指令會上 Github 下載 pico-sdk,並且更新 submodule 為主項目對應的版本。

    下載的 pico-sdk,對於作業系統和前面安裝的軟體來說,並不知道它的路徑位置,用戶必須手動將它加入到系統變數中(本文中是將其新增到用戶的環境變數 PICO_SDK_PATH),否則編譯時會出現錯誤。

    打開作業系統的 "設定"("Windows / 設定"),進入到 "關於" 頁面中,選擇 "進階系統設定"

    "環境變數(N)..." 按鈕,打開設定視窗。

    "新增" 一個使用者環境變數。

    在出現的 "編輯使用者變數" 視窗,進行如下欄位的設定:

    • 變數名稱PICO_SDK_PATH
    • 變數值E:\EmbeddedSystemDev\Raspberry Pi Pico\pico-sdk

    設好後,按下 "確定" 儲存並回上一個視窗。

    可以看到,已新增一個使用者變數 PICO_SDK_PATH

    按下 "確定" 關閉視窗。

    新增或修改環境變數很重要的一點,要讓這個設定的變數生效!

    生效的方式有兩種:使用者登出再登入,或重新開機(建議後者避免前者無效)!。


    **(01-01-08)pico-examples

    設定好了 Pico SDK 之後,就可以開始來做編譯了。但編譯需要 Pico 韌體程式,幸運的是樹莓派官方有提供很多的 Pico 範例程式,所以下面就要用這些範例程式,來測試上面已安裝好的工具軟體安裝的正確性。

    延續 01-01-07 的動作。

    重開機之後,開啟與 01-01-07 同樣的命令提示字元視窗,然後輸入下面指令:

    E:\>cd "EmbeddedSystemDev\Raspberry Pi Pico"
    E:\EmbeddedSystemDev\Raspberry Pi Pico>git clone -b master https://github.com/raspberrypi/pico-examples.git E:\EmbeddedSystemDev\Raspberry Pi Pico>echo %PICO_SDK_PATH% E:\EmbeddedSystemDev\Raspberry Pi Pico\pico-sdk

    先切換到 Pico 範例程式下載用的目標資料夾;然後上 Github 下載 pico-examples Master 分支的範例程式(下載的最新的 Pico 範例程式碼);最後確認環境變數 PICO_SDK_PATH 設定是否正確?

    01-01-07 和 01-01-08 指令實際輸入的情況,就如下圖所示。


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    *(01-02)在 Windows 10 作業系統下編譯 pico-examples

    編譯 Pico 韌體程式所需要的軟體和範例程式碼已經準備就緒,接下來就是要實際來測試安裝的結果。

    延續 01-01-08 的動作,輸入下面指令:

    先切換目錄到 pico-examples,建立一個給所有範例程式編譯輸出的檔案用的資料夾,再切換到這個資料夾,最後依照所使用的編輯環境,指定適用的 Generator(NMake Markfiles)。

    完成最後一個指令後(如下圖所示),會在當前的目錄下輸出 Makefile 或者 IDE 專案檔,另外也會產生這次建置相關資訊的快取檔。有了這些之後,就可以用 nmake 建立程式。 

    如下圖所示,利用 nmake 建立程式的一部分輸出紀錄。這個過程不會太短,要耐心等等 ...

    完成後,在 build/ 下會建立出所有範例程式的資料夾,並且產生 ELFbin uf2 的檔案。其中 ,uf2 就是可直接 "拖"、"放" 到 Pico 燒錄的檔案。

    編譯中 ...

    編譯完成。

    編譯完成的 build/ 目錄中的資料夾,就如下圖所示。

    Pico 範例程式的編譯成功與否,是決定 Visual Studio Code 是否能正常編譯的前提,所以必須先確認這一小節的動作能正常執行,再往下一小節!

    到此,完成 Pico 範例程式們手動的編譯!


    /*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
    *(01-03)設置 Visual Studio Code 開發環境

    使用 Visual Studio Code 來撰寫和編譯 Pico 韌體程式是很方便的,只要簡單的設定與修改幾個參數值就可以,尤其是前面已經把這些東西走過一遍,這裡等於就只是複習而已。

    現在,開啟 "Visual Studio Code",點選左邊 Activity Bar 的 "Extensions",並搜尋 cmake

    在出現的列表中,選擇 CMake Tools 做安裝。

    點選左邊 Active Bar 的 "Manage",並在其下拉選單中選擇 "Settings"

    "Settings" 頁籤中:

        1.    左邊樹狀選單選擇 "Extension / CMake Tools configuration"
        2.    尋找 Cmake: Configure Environment
        2.1  按下 "Add Item" 新增一個欄位
        3.    Item 填入 PICO_SDK_PATH
        4.    Value 填入 E:\EmbeddedSystemDev\Raspberry Pi Pico\pico-sdk

    接著繼續尋找 Cmake: Generator,在其欄位下方填入 NMake Makefiles

    CMake 基本的環境參數設定好之後,開啟 pico-examples 資料夾,準備開始編譯。

    pico-examples 載入後,Visual Studio Code 軟體畫面的右下角會彈出一個視窗。這是要用戶為這個範例程式的專案,選擇編譯工具(只要選擇一次就好,之後若持續出現可以不理它)的提示視窗。

    按下 "Yes" 進行編譯工具的選擇。

    下拉選單中,選擇 GCC for arm-node-eabi ...

    專案編譯工具的選擇,也可經由按下板手圖示的方式,開啟下拉列表選單。

    按下最下方 Status Bar(狀態列)的齒輪(Build)圖案,就會開始編譯 pico-examples 裡面所有的範例程式,結果跟手動編譯是一樣的。

    接著開啟一個 pico-examples 裡面的範例(下面開啟的是 {pico-examples/adc/adc_console/adc_console.c})不難發現,程式上面出現了很多個紅色波浪底線。

    這是因為 C/C++ 組態沒有設定正確,所以語法檢查時會出現這些紅色底線。請注意,這並不影響實際的編譯!只不過看起來不美麗、很不乾淨!

    所以,若是一樣遇到這個情形,下面一起來試試解決這個問題吧!

    在 Visual Studio Code 畫面中,按下組合鍵 Ctrl+Shift+P,畫面中間會出現一個下拉選單。

    輸入 c/c++,選擇過濾之後的 C/C++: Edit Configurations (UI)

    出現的 "C/C++ Configurations" 頁籤其實就是 {.vscode/c_cpp_properties.json} 的 UI 版本。

    有兩個地方要做變更。

    第一個地方是:IntelliSense mode。預設的值是 windows-msvc-x64,要將其改為 windows-msvc-arm。這樣像是 uint16_t 就不會被視為位置的東西。

    第二個是 Include path。要另外把 PICO_SDK_PATH 環境變數所指的路徑新增在此處(E:\EmbeddedSystemDev\Raspberry Pi Pico\pico-sdk\src/**)。這樣標頭檔的紅色底線就會消失不見。

    如果 adc_console.c 程式碼的紅色底線沒有消失的話,試著關閉後再重開檔案,應該就可以看到跟下面一樣乾淨的畫面。

    到此,完成 Pico 範例程式們使用 Visual Studio Code 的編譯!


    【(02)結論】

    學習 Pico 的第一步,除了閱讀它的資料之外,建置它的編譯環境尤其重要!

    前一篇說明了 Pico Python 環境的建置,這一篇說明了 C/C++ 編譯環境的建置以及 Visual Studio Code 專案編譯的設定,大致上官方建議的開發方式就是這兩種,希望部落格的這兩篇網頁,能夠給對開發 Pico 韌體程式有興趣的人一個入門所需。


    .

    .

    .

    .

    沒有留言:

    張貼留言

    留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

    發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

    不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !