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 条评论

发布
问题