• 嵌入式工程师,用好C语言这一利器的三要素


     

     作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?

    • 要用C语言的思维方式来进行程序的构架构建

    • 要有良好的C语言算法基础,以此来实现程序的逻辑构架

    • 灵活运用C语言的指针操作

        虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程。

        嵌入式工程师在编写C语言程序的时候,要针对遇到的问题进行程序构架构建。

        比如我们要处理“猴子选大王”的经典问题:一群猴子,手拉手排成一个圆,从任意一只猴子开始从1开始报数,当遇到要排除的数(预先设定)时该猴子退出该圈,从下一只猴子开始继续从1报数,如此反复,最终剩下的猴子便是猴子的大王。

    用C语言的思维方式进行程序构架构建

        程序分为三大部分:

    a、数据获取,为了程序的运行,上面的问题要获得猴子的总数,从那只猴子开始和剔除的个数;

    b、数据运算,需要从一堆数据中剔除相应的数据,注意逻辑的正确;

    c、提高程序的运行速率,少用循环多用指针。

    用C语言进行逻辑实现

    a、 数据获取,通过printf和scanf进行参数的获取。

     同时注意异常时的处理,比如上面两个if语句就是异常情况的判断,每种异常情况对应不同的返回值,这样便于程序过程的调试和数据的合法性。

    b、 /* 定义链表节点类型 */

         构建循环链表进行“猴子”的圆圈建设。

     通过该步骤后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建过程中需要注意一下几点:内存的开辟,此时遵守使用多少开辟多少的原则。

        如果一下开辟过多,会引起内存泄露的问题,但是,这个小程序是不会遇到这种问题了。其次是熟悉循环链表的构建方法:链表的尾巴指向链表的头。这个时候有心的话还会联想到双向链表的情况。

    c、 /* 找到第 k 个节点 */

     找到从第几个位置开始计数。此时,p指向开始的“猴子”。因为采用了链表方法,这个过程只需要关注p指针的next指向即可。

    a、 保存初始的“猴子”圆圈参数。

      为什么要保留这个呢?首先要控制猴子数目,所以保留了全部的数目。其次用q(qurry)来保留剔除猴子前面的链表,并连接剔除猴子后的链表。这样,完成了循环链表的元素删除。

    b、 猴子查数。

        猴子查数是整个程序的关键,需要完成以下任务:a、找到开始的“猴子”数;b、删除该“猴子”;c、将删除掉的循环链表首尾连接起来。

     通过以上数据运算,可以完成相应链表元素的删除,这或许就是C语言程序的魅力所在。

    使用C语言的指针

        比如本程序的链表指针的定义,p,s,q。

     我们知道,指针操作不但可以减少数据操作需要的内存,还可以提高程序的运行速度。

        指针的优势,或许在本程序中表现的不明显,在大量数据和对操作速度要求比较敏感的情况下会很明显,比如Linux内核中,就会有很好的体现。

        总之,对于嵌入式工程师,不但能设计出好的硬件电路,如果也能写出好的软件程序就会让我们的生活更加美好。

    【学习交流群:607439754】

    【下方分享一些学习资料,感兴趣的可以看下】:

    物联网嵌入式工程师网络基础

    嵌入式开发-进程间通信详解

    嵌入式工程师必备的Web知识

    数据结构在嵌入式中的应用。

     嵌入式应用轻量级数据库。

    IIC总线协议

    嵌入式操作系统uC/OS

    【下方分享一些网盘资料包,需要的自行领取】:

    嵌入式物联网 22个STM32项目、大赛作品,【华清远见发放资料包】http://makerschool.mikecrm.com/f4wjYBB

  • 相关阅读:
    Feign实现各个服务之间的远程调用问题
    算法-2.两数相加
    <顶会论文>11月14号基于预训练的增量模型
    OpenBox(一个高效通用的黑盒优化系统)安装与使用
    Python 中 Selenium 的 send_keys() 函数
    CorelDRAW最新24.1.0.360版本更新介绍讲解
    【教3妹学算法-每日1题】按字典序排在最后的子串
    运动蓝牙耳机排行榜,目前最好的运动耳机推荐
    美国NSC大规模数据泄露,涉及壳牌、戴尔、特斯拉等2000多家公司
    解析java中的\r、\n、\r\n、\n\r的区别
  • 原文地址:https://blog.csdn.net/an520_/article/details/125893812