W806 CDS工程完美支持C++編譯

發布於 2022-12-22 13:49:59

CDS 開發環境下W806如何完美支持C++

  • ​ 最近有小夥伴諮詢W806的CDS 開發環境,如何支持C++ 開發;一看這位小夥伴就是eclipse 的死忠粉 ; 哈哈哈,那我就專門寫一篇關於如何支持C++的簡短教程給到大家,滿足大家的需求;制作好的工程鏈接可以下載嘗試 https://www.aliyundrive.com/s/ZN8zA5EvznL

    1. 下載配置好的W806的CDS 工程,並解壓工程

      可以參考這邊文章內容 : http://ask.winnermicro.com/article/68.html

      也可以直接阿裡雲鏈接下載: https://www.aliyundrive.com/s/CfdxmJu2Tc1

      使用CDS 打開W806的SDK 如下圖

      image-20221222120552497

    2. 默認例程開啟了RTOS ,為了簡化轉換C++步驟,大家可以還原為裸機工程,不還原也無所謂,沒有什麼影響,不介意的可以跳過該步驟

      • 按照注釋講解 將 CONFIG_KERNEL_NONE 宏給反向注釋回來
      • 重寫main函數為裸機步驟

        image-20221222121120356

        修改後的 main 函數,編譯沒問題後,燒錄到板子中確保沒問題後,在進行下面步驟

        image-20221222121332656

    3. 將W806 C工程轉換為支持C++的工程

      右鍵項目文件,按照圖中步驟點擊

      image-20221222121823364

      在彈出的對話框中 選擇 編譯工具鏈<W806 內核為CK804 采用 平頭哥abiv2指令集>

      image-20221222122022610

    4. 修改system.c 文件

      ​ 路徑為 platform -----> arch --->xt804 ---->bsp 下

      在 SystemInit 函數末尾添加編譯器對C++ 構造函數初始化的調用接口 _init() 函數 ,該函數實現用戶無需關心 只需要引用即可 。

      關於 _fini() 函數的調用,實在 main 函數結束之後進行回收的時候使用,由於是單片機程序 main 函數一旦結束,也就意味著系統異常了,因此

      不添加調用也是可以的,添加過後如圖所示

      image-20221222123241245

      大家也可以直接複制

      #include <csi_config.h>
      #include "csi_core.h"
      extern void _init();
      extern void _fini();
      void SystemInit(void)
      {
          xxxxxx
          xxxxxx
          _init();
      }
    5. 包含 C++ 需要的頭文件路徑

      • 右鍵項目工程 按照圖中操作步驟進行添加路徑即可

        image-20221222124213658

      • 由於添加路徑比較多,可以去到 C 文件編譯的有文件中將路徑整體複制過來,具體步驟如下

        image-20221222124714317

    6. 添加 鏈接下所需要的 兩個庫文件 分別為 stdc++ 和 supc++

      image-20221222124948595

    7. 前期準備工作基本完成了,剩下的就可以編寫C++文件了

      • 鼠標單擊 main.c ,隨後按鍵盤 F2 ,在彈出的對話框中 修改main.c 為 main.cpp

        image-20221222125412092

      • 由於是C++ 編譯還需要在main.cpp 的內容的最開始和結束 加上 宏 限定為按照C 的方式編譯

        添加好的如圖所示

        image-20221222125727694

        為防止寫錯,也可粘貼下面提供的

        #ifdef __cplusplus
        extern "C" {
        #endif
        
          xxxx
          xxxx
        #ifdef __cplusplus
        }
        #endif
        • 修改好後 可以編譯SDK了此時可以從 下方的Console 中觀察編譯過程 ,main.cpp 成功編譯。

          image-20221222134015364

    8. 以上步驟已經完成了SDK C 語言編譯到 C++的編譯過程 ,用戶可以自定義添加C++文件進行測試,本次也基於此寫一個小小的例子供大家參考

      • 借用 http://ask.winnermicro.com/article/72.html 文章中 isme 大佬的 例子 來為大家演示
      • 右鍵需要添加 cpp 的地方 進行類的創建,本次選擇 src 目錄

        image-20221222130615957

        • 在彈出的對話框中填寫 要創建 C++ 的類名 本次 類名 為 Line

          image-20221222130749219

          隨後按照 isme 大佬的例程補全實現即可

          image-20221222131415563

          在 main.cpp 中包含對應 頭文件進行測試即可,我這裡順便 測試了 string 有些需要使用C++ 的 string 類型;編譯燒錄 查看串口 0 的打印信息

          image-20221222131747974
          image-20221222131933457

最後放上 打包好的鏈接 有需要的小夥伴可以下載嘗試

https://www.aliyundrive.com/s/ZN8zA5EvznL

1 條評論

發布
問題