rt_thread_t_姻缘美满指的什么

rt_thread_t_姻缘美满指的什么关于作者:hello我叫Sugar一名爱动脑、爱动手并且不断在进步的极客,开源作品有ArduPilotLog(飞控日志分析软件)、car_407ve(结合RT-T…_rtthreadc++

关于作者:
hello 我叫Sugar 一名爱动脑、爱动手并且不断在进步的极客,开源作品有 ArduPilotLog(飞控日志分析软件)、car_407ve(结合 RT-Thread 和 ardupilot 的麦轮车)、QGC 飞控调试插件等。

背景介绍:RT-Thread C++”发现可参考的文章不算多。亲密配合https://www.rt-thread.org/qa/thread-11707-1-1.htmlhttps://github.com/SuWeipeng/car_407ve

RT-Thread 的 C++ 组件

  • 组件在哪里

    640?wx_fmt=jpeg

  • 组件的依赖

    640?wx_fmt=jpeg

给 RT-Thread 和 C++ 牵红线的过程

Sugar 只是做个媒,其实大多数工作 RT-Thread 都做完了。

  • 同平台下的 libc

    Sugar 开源代码不维护工程,只维护配置文件,工程可以交给 progen 自动生成。

    这样的好处之一就是:通过配置文件能够很清楚地知道哪些代码参与了编译。

    对于配置文件的介绍请见《一招通吃 MDK5、IAR、GCC》和《【升级】一招通吃 MDK5、IAR、GCC》(1) MDK5 下的 libc

    640?wx_fmt=jpeg

    (2) IAR 下的 libc

    640?wx_fmt=jpeg

    (3) GCC 下的 libc

    640?wx_fmt=jpeg

    GCC 下需要注意的地方

    640?wx_fmt=jpeg所以 Sugar 没有用 RT-Thread 官网推荐的 env。

    这样在 gcc 编译的时候就要定义一个宏,防止 RT-Thread 的 libc 和系统的 libc 冲突。

    640?wx_fmt=jpeg

  • GCC 下的链接脚本:

    链接脚本使用 rt-thread 官方代码里的 link.lds 最省事了,该折腾的 RT-Thread 官方都折腾好了。

    以前 Sugar 使用 CubeMX 生成的 链接脚本,要是用 C++ 的话要改的地方比较多。

    因为 Sugar 没有用 env,所以用 link.lds 的时候遇到了这个错误:

    /opt/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: section .ARM.extab.text._Z15constrain_floatfff loaded at [08058358,08058363] overlaps section .data loaded at [08058358,0805871f]
    collect2: error: ld returned 1 exit status
    Makefile:145: recipe for target 'build/stm32f407ze-rtt.elf' failed
    make: *** [build/stm32f407ze-rtt.elf] Error 1

    别担心,其实在链接脚本里加一行就能解决这个问题了。

    .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >CODE

    640?wx_fmt=jpeg

  • 代码上要注意的地方

    (1) IAR 下不能有重名文件的解决办法。

    640?wx_fmt=jpeg

    (2) C++11 标准与 RT-Thread。

    在遥控车的开源代码里 Sugar 移了 ardupilot 的库,ArduPilot 代码使用 C++11 标准。

    为了增加 rt-thread 和 C++11 的亲密度,让遥控车代码能三平台(MDK5、IAR、GCC)通用。

  • 这里 Sugar 花了不少时间。

    最终没有找到完美解决办法,MDK5下折了个中。

    640?wx_fmt=jpeg

    IAR 下 RT-Thread 和 C++11 兼容的办法。

    640?wx_fmt=jpeg

    MDK 下 rt-thread 与 C++ 编译要注意的地方。

    640?wx_fmt=jpeg

    GCC 下就不说了(因为要说的话比较多,背景介绍里那个引用的链接已经说得比较全面了)。

    (3) C++ 使用 rtthread 命名空间

    using namespace rtthread;

    640?wx_fmt=jpeg

说了半天,这个代码控制效果到底是啥样?

这部分就要上 ArduPilotLog 来展示了。控制效果主要取决于算法和参数,rt-thread 为算法和日志的记录提供了良好的运行环境。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

从数据可以看出控制效果是相当不错的哦。

PS

不是 Sugar 造的代码,Sugar 只是代码的搬运工。

PID 是搬的 ardupilot 最新的 AC_PID 库。Log 是移植 ardupilot 的日志系统(改为 C 语言版)。用上国产 RTOS 实时系统 RT-Thread。

懂架构的好处就是:可以当个合格的搬运工。(这么说真是 LOW 到家了)懂架构可以用一点点吹灰之力就能高效的完成一整套优质可靠的代码实现目标任务。(这么说有没有更有吸引力?)

如果读者有想提高软件架构能力的意愿,欢迎加入 Sugar 的《软件架构训练计划》

END

RT-Thread线上活动

1、【RT-Thread能力认证考试12月——RCEA】经过第一次考试的验证,

能力认证官网链接:https://www.rt-thread.org/page/rac.html(在外部浏览器打开)

640?wx_fmt=png

立即报名

#题外话# 喜欢RT-Thread不要忘了在GitHub上留下你的640?wx_fmt=pngSTAR640?wx_fmt=png哦,你的star对我们来说非常重要!链接地址:https://github.com/RT-Thread/rt-thread

RT-Thread线下活动

1、STM32全国研讨会,RT-Thread近期参展城市预告:上海、广州、顺德

你可以添加微信18917005679为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群

640?wx_fmt=jpeg

RT-Thread

长按二维码,关注我们

640?wx_fmt=png

看这里,求赞!求转发!

640?wx_fmt=gif

640?wx_fmt=gif点击阅读原文进入RT-Thread官网

今天的文章rt_thread_t_姻缘美满指的什么分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/64735.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注