在嵌入式开发中如何提高自己的代码水平

这篇具有很好参考价值的文章主要介绍了在嵌入式开发中如何提高自己的代码水平。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  在开始学习嵌入式系统或者单片机系统的时候,大多数人的学习方法都是自己找视频教程或书本自己学,有的人也许会掏钱报个培训班什么的跟着老师学。

  当自己慢慢的可以独立写代码的时候,就会觉得已经学会了。特别是自己能独立完成一些简单的项目之后感觉自己可以出师了。慢慢的随着各种项目的锻炼,写代码的能力也会慢慢提高。写到最后就会发现,其实好多项目都是不同的代码重新组合,一个功能写好之后,在每个项目中都可以用。比如写好了一个串口功能之后,那个项目用到了串口,直接将以前写好的代码拷贝过去就完了,最后开发项目就变成了一个拼积木的过程。

  这时候基本写代码好像就失去了最开始学习的激情,写代码就变成了一个体力活了,基本也不用动脑了,都是复制粘贴了。写代码的能力好像也很难在突破了,感觉到了瓶颈。这时候就很难找到视频或者书籍或者老师教自己如何突破这个瓶颈。此时如果想要自己的代码水平更进一步,要怎么做呢,下面我就将自己的经验分享一下。

  在自己写完一个功能之后,如果想知道自己写的怎么样,最好的办法就是找一个别人写的同样功能的代码去比较。看看自己写的和别人写的有什么区别。找代码的时候,不能网上随便找一个,因为你不知道你找到的代码是初学者写的还是高手写的。容易被误导,这时就要找大家比较认可的,代码风格比较好的去比较。我一般找到都是某原子和某火的代码。下面就通过一个简单的LED代码来分析比较一下。

  首先看某原子的代码

  这是 led.h 的代码

在嵌入式开发中如何提高自己的代码水平,STM32学习笔记,STM8学习笔记,单片机,stm32,嵌入式,提高,代码
  这是 led.c 的代码

在嵌入式开发中如何提高自己的代码水平,STM32学习笔记,STM8学习笔记,单片机,stm32,嵌入式,提高,代码
  led.h里面用到的位操作是在sys.h头文件中定义了。

在嵌入式开发中如何提高自己的代码水平,STM32学习笔记,STM8学习笔记,单片机,stm32,嵌入式,提高,代码
  这个初始化代码看起来非常简洁,首先使能用到的IO口时钟,然后初始化相应的IO口。在初始化函数中一眼就能看出两个LED分别是PA2和PD8口。代码理解起来非常容易。

  接下来看某火的代码
   头文件 bsp_led.h

在嵌入式开发中如何提高自己的代码水平,STM32学习笔记,STM8学习笔记,单片机,stm32,嵌入式,提高,代码

   C文件 bsp_led.c

在嵌入式开发中如何提高自己的代码水平,STM32学习笔记,STM8学习笔记,单片机,stm32,嵌入式,提高,代码

  首先从文件名字就能发现区别,上面的是led.h,下面的是bsp_led.h。前面加了一个bsp,这个bsp是什么意思呢?BSP即Board Support Package,板级支持包。也就是这个文件是和当前硬件系统有关的。然后在看头文件中的内容,发现在头文件中,把LED用到的IO口和具体引脚重新定义了一个名字。然后在C文件中初始化LED口的时候,用的都是新的名字。初始化的流程也是先使能用到的IO口的时钟,在初始化用到的相关IO口。但是从初始化代码中很难看出,当前使用的LED口是哪个端口。代码看起来感觉就比较费劲。

  为什么一个简单的LED功能,风格却相差这么大呢?这两种风格你自己的代码更接近于哪一种呢?从我自身来说,刚开始的时候比较喜欢上面的那种风格,简单明了,代码写起来很容易。但是随着写代码的时间增加,逐渐开始喜欢下面的这种风格。代码也由上面的风格逐渐转换为下面这种风格了,下面就分别讨论一下这两种风格的差异。

  刚开始写代码的时候,第一种风格比较适合,写起来比较简单,容易理解,代码出现问题时查找起来也更加方便快速。但是随着项目的增加和需求的各种变化,就会发现,第一种代码修改起来比较麻烦,比如LED口发生了变化,那么头文件和和初始化函数都需要修改,变动一次要修改好几个地方,修改的时候容易漏掉有些地方,导致调试起来各种问题不断,增加了调试的难度。这时就想,能不能值修改一个地方,就能把LED口用到的地方都修改过来。此时就需要用到第二种代码的方式了。在头文件中将LED用到的端口和时钟都抽象出来,重新定义一个名字。在初始化代码的时候,初始化的只是是LED口,至于这个LED具体对应到哪个口,直接在头文件中定义就行。这时候初始化代码就不需要修改了。

  简单的理解就是,第一种方法写起来简单,针对的是具体的IO口,但是一旦项目发生了改动,修改和移植起来比较麻烦。第二种方法写起来复杂,但是是一个抽象的方法,它的初始化函数和具体的IO口没有关系。当项目发生变动或者移植起来更方便。

  这两种方法各有优缺点,可以根据自己的实际情况选择不同的方法,也可以将这两种方法结合起来。比如我感觉第一种方法的位带操作比较简单,将所有的位操作统一定义在一个文件中,使用起来比较方便。第二种方法的位带操作都卸载头文件中,写起来比较麻烦,也比较复杂。但是第二种方法把LED口使用的IO口和引脚抽象出来比较好。那么就可以将第一种的位带操作和第二种的端口抽象同时用在自己的项目上。

  这样通过对别人代码的分析,然后结合自己的代码,对比不同代码的优缺点,然后再修改自己的代码。不断的模仿别人优秀的地方,自己的代码也就写的越来越好了。如果感觉自己的技术比较好了,那么就可以去看库函数的源码,或者操作系统的源码,看看官方的源码是如何将不同类型不同型号的单片机抽象为统一的函数。如果哪天你看到别人的代码之后,一眼就能看出代码的优缺点时,那么就说明你的水平已经很高了,已经突破了自己的瓶颈了。文章来源地址https://www.toymoban.com/news/detail-697691.html

到了这里,关于在嵌入式开发中如何提高自己的代码水平的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 嵌入式物联网STM32实战开发代码例程库

    几百个例程清单,CSDN下载地址: https://download.csdn.net/download/weixin_39804904/88671879 开发例程清单(持续新增中,欢迎点赞关注): 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar 0003基于STM32F103单片机GPIO实现

    2024年02月02日
    浏览(50)
  • 【嵌入式系统开发】Keil 实现十次作业详细代码

          🔥《嵌入式系统开发》系列专栏主要以LPC1100系列微控制器为硬件平台,详细介绍Cortex—-M0微控制器的原理与开发技术,基于keil仿真软件平台设计最小应用系统板和具有在板仿真器的口袋开发板以及相关例程。       🔥本文已收录于嵌入式系统开发系列专栏:嵌入式

    2024年02月08日
    浏览(9)
  • 使用VSCode clangd插件进行linux内核代码阅读和嵌入式开发

    使用VSCode clangd插件进行linux内核代码阅读和嵌入式开发

    在进行 Linux 内核代码阅读和嵌入式开发时,选择合适的开发工具至关重要。VSCode 是一个流行的跨平台编辑器,并且它的扩展生态系统非常强大。在这篇博客中,我们将介绍如何使用 VSCode Clangd 插件来提高 Linux 内核代码的阅读和嵌入式开发效率。 Clangd 是一个基于 Clang 的语言

    2024年02月09日
    浏览(18)
  • 【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

    【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

            绘图与图表在嵌入式里有的比较多,尤其是图表,我们常在股票里看到的“图表折线/曲线 图/饼状图等”都可以用 Qt 的图表来实现。绘图和图表的内容本章主要介绍绘图和图表的基本操作,以简单的例子呈现绘图与图表的用法,目的就是快速入门绘图与图表,关

    2024年02月12日
    浏览(17)
  • 嵌入式LINUX开发系列之ARM板子如何替换debian镜像源

    嵌入式LINUX开发系列之ARM板子如何替换debian镜像源

    当你做嵌入式开发过程中拿到一个开发板,遇到 apt update ,发现无法成功,镜像源无法使用,这样的话大大增加了开发难度。最近一个项目遇到这个问题,搜寻网络却无法得到有效答案,本人作为一名嵌入式开发工程师,在这里总结了一下,希望对大家做开发有所帮助,共同

    2024年03月24日
    浏览(14)
  • 【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

    【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

            在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本文介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。         QFile 类提

    2024年02月12日
    浏览(15)
  • 【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

    【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

            Qt 网络模块为我们提供了编写TCP/IP客户端和服务器的类。它提供了较低级别的类,例如代表低级网络概念的 QTcpSocket,QTcpServer 和 QUdpSocket,以及诸如 QNetworkRequest, QNetworkReply 和 QNetworkAccessManager 之类的高级类来执行使用通用协议的网络操作。它 还提供了诸如QNet

    2024年02月16日
    浏览(15)
  • 【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

    【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

            要想使用 Qt Charts,我们的 Qt 版本得使用 Qt 5.7 之后的版本。其实 Qt Charts 并不是 Qt 5.7 才有的,是在 Qt 5.7 以前只有商业版本的 Qt 才有 Qt Charts。我们能免费下载的 Qt 版本都是社区(开源)版本。         Qt Charts 很方便的绘制我们常见的曲线图、折线图、柱状

    2024年02月12日
    浏览(15)
  • Git基础教程:使用Git Pull从远程仓库拉取代码(适用于嵌入式开发)

    Git基础教程:使用Git Pull从远程仓库拉取代码(适用于嵌入式开发) 在嵌入式开发中,使用版本控制系统是一种常见的做法,以便团队成员之间能够协同开发,并保持代码的版本管理。其中,Git是一种广泛采用的分布式版本控制系统,它提供了许多强大的功能来管理代码库。

    2024年02月08日
    浏览(11)
  • 【十年开发积累】STM32产品开发代码案例合集,嵌入式物联网工程师珍贵资料(物联技术666)

    简介     例程涵盖:STM32各类功能配置,外围传感器初始化,模块初始化,物联网协议,操作系统移植,功能开发,产品案例等等,十分具有参考价值。 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码0001.rar 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码0002.rar

    2024年02月21日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包