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

发布
问题