热门标签 | 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/


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了Java虚拟机中的垃圾收集器,包括年轻代收集器Serial收集器、ParNew收集器、Parallel Scavenge收集器,以及老年代收集器Serial Old收集器、Parallel Old收集器和CMS收集器。对每种收集器的算法和特点进行了详细解析,希望对读者有参考价值。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
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社区 版权所有