热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【再见,2020】rtthread入门系列之先用后学

学一样新东西的时候,一开始从心底都是抵触的,需要不断在获取正反馈,才能快速掌握新新知识.克服抵制心理.rtthread学习网站https:www.rt-thread.orgdoc

学一样新东西的时候, 一开始从心底都是抵触的, 需要不断在获取正反馈, 才能快速掌握新新知识. 克服抵制心理.

rt thread 学习网站
https://www.rt-thread.org/document/site/


1 rt thread 之缘


1.1 从裸机开发开始

在学校里进行开发的时候, 学长和老师教会了一些前后台的逻辑, 定时器轮询任务, 以这样来的方式开发智能车或者其他电子产品, 那个时候还好, 偶尔了解到rtos 之类的, 一看望去, 原理好复杂啊, 就没细学,一没必要, 二也学不会.所以一直用着前后台的逻辑编写代码.


1.2 单片机的分身术

后来工作了, 前后台的写法, 已经无法完成一些逻辑复杂的任务了, 刚好空挡期就学会了ucos操作系统, 因为是抱着一个明确目标去学习用, 只是想实现多个while(1) 的循环体, 然后发现原来用起来很简单,一个创建任务的函数就搞定了,真就是把单片机拆分成数个单片机一起用了, 学完创建任务的功能后, 有一种春风得意马蹄疾的快感, 这样键盘任务, 和显示任务, 计算任务, 就非常容易去理清逻辑了.

然后那时候的感觉就是, rtos这样太简单了, 果然还是裸机开发下, 程序驱动的移植, 和调试比较重要, 操作系统也没那么神奇, 但是真好用.

实现了多任务, 已经能够解决那时候工作比较棘手的问题, 关于线程通信, 说来惭愧, 沿用了全局变量的思想, 就没有线程通信, 准确的说, 持续了一小段时间仅仅使用了操作系统的一个创建任务的函数, 但这么傻瓜的操作, 却成为了后面深入学习的敲门砖.


1.3 分身乏术

分身乏术一词,可能描述不对, 虽然上面说了已经实现了分身术, 但是程序逻辑还是偶尔不稳定, 有很多时候和预想的结果不太一样, 比如传感器那边的数据, 最早可能立刻就可以处理了, 最晚可能要等到thread_delay()的时间了, 完全就和赌博一样跑程序了, 尤其是当我用同样的编程思维写了一个电脑端的多线程程序后, 程序直接占用了25% 的cpu , 我人都傻掉了, 区区几行c 代码, 竟然如此猖狂, 独占了一个cpu 核心全速运行, 是时候做点什么去改变了.
信号量 作为第一个用在多线程同步的成员, 直接解放了不止多少cpu 的工作量, 又及时, 又能释放cpu 资源, 没数据的时候, 也不会空转(空闲任务空转另说,可以用低功耗解决, 降频之类的…), 简直又是一个得力助手啊, 比如串口收到数据后, 才去通知线程去处理, 太完美了.
事件集合 在ucos 叫做标志位组, 信号量虽好,但是只能一对一, 确实偶尔设计的逻辑有局限性, 我想等待多个线程都发来同步信号,就用到这个了
互斥量 作为特殊的信号量, 信号量可以不断的往上+1 , 互斥量只能加到1 , 就可以保证, 有生产, 才有消费


1.4 移植好麻烦

虽然操作系统很好用, 除了上文提到的同步线程的功能以外, 还有线程通信的邮箱, 消息队列等, 都非常好用, 都是一看就会, 一用就爽那种, 但是新的问题又出现了, 由于工作上遇到不同的单片机, 所以需要不断的去移植,配置各种通信啊 , 比如串口, iic , spi 等等, 就算是同一个牌子的单片机, 配置选项也不尽相同, 通常需要同时打开数个文档, 数个软件, 经过反复调整, 非常麻烦.这种工作基本上属于花时间涨经验比较少的那种.

如果能一套代码, 到处运行就好了, 通过了解发现, rt-thread 处理具备常规操作系统的线程调度管理之外, 还有设备管理框架, 只需要对接底层驱动, 就可以写同样的代码, 非常方便移植, 轻松做到了应用软件, 和底层驱动分离.


1.5 调试好麻烦

在用ucos 操作系统时, 需要调用自己写的部分代码进行测试, 或者与产品进行交互调试的时候, 就非常麻烦, 需要自己写一个相应help 的指令, 用来响应自己写的指令, 配置参数, 查看状态之类的. 后来用来finsh 之后, 这些问题统统不存在了, 而且可以通过 导入指令宏进行操作. 程序就可以变得有效解耦. 可以非常自由.
比如用rt thread 写的程序可以做到一个c 文件, 一个功能, 需要某个功能, 直接把文件拖进去, 自动创建任务,执行, 导出调试指令, 不需要就直接删除, 对于开发非常快捷方便.


小结

除了以上非常好用的功能之外, 还有很多在线的软件包, 可以一键添加进来(ENV 部署工具), 学习进步最快的方法, 就是阅读优秀的源代码, 大量的软件包, 纠正了我很多不良习惯. 是非常值得学习的一个操作系统

关于rt thread与其他操作系统的区别, 我从网上找到了一张对比图, 虽然一开始从ucos 那里获取到了不少好处, 但我还是背叛了ucos…

在这里插入图片描述

关于rt - thread 的论坛, 有很多靠谱的大佬坐镇, 对于一开始入门的我, 提供了不少帮助

论坛地址
https://club.rt-thread.org/


推荐阅读
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
author-avatar
别装了gg_925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有