0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

资深工程师教您巧做单片机项目的思路方法

UtFs_Zlgmcu7890 来源:互联网 作者:佚名 2017-11-30 08:02 次阅读
对于一个没有太多程序设计经验的萌新工程师来说,如何有规划有条理的进行程序设计,是一个很值得学习的课题。在本文中,作者结合自身的经验,浅要的谈一谈项目中的程序设计思路与步骤。


我们平时在学习开发板、示例程序或者demo的时候,会发现这种程序设计都是单一的外设或者功能,功能实现就算演示成功。但是在实际的项目设计过程中,往往需要设计的程序是非常庞大且复杂的,项目的功能和项目需求可能会超级多。此时在程序设计中,既要使MCU同时兼顾各个外设而不发生冲突,又要合理的设计程序构架,使所有的需求都能逻辑清晰的实现相关功能。

所以程序设计一定要有思路。当我们拿到一份项目需求的时候,不能一上来就敲代码,最后随跳跃的思维写出来的程序逻辑把自己都绕晕了还没能实现所有功能。就像盖高楼前一定要有图纸一样,在进行程序设计前也要有程序构架。

程序框架与底层无关,它重在整体需求的实现与逻辑关系。例如我们把一个具体的项目需求细化为10个具体的任务,每个任务都完成一些特定的功能。先忽略每个任务里的内容,这10个任务和它们之间的切换逻辑就组成了此项目的程序构架。

有了程序设计构架,接下来就是实现每一个任务具体的功能,不同的部分分模块编写,例如外设单独写一个文件,传感器驱动单独列一个文件,所有文件之间相互独立,这样不仅思路清晰,且在排查问题的时候,能直接屏蔽某一个文件,更快速的定位问题所在。

有了思路之后,接下来我们谈一谈具体的设计步骤。假设此时我们拿到了一个具体的项目需求书。1项目规划

首先把需求拆分,分为一个个任务,每一个任务去实现相应的部分功能,设计好任务之间的切换条件。此时暂且不考虑底层,只是列出所有任务和任务之间的逻辑切换关系,这样就有了程序构架,然后再规划每个任务里面里面需要多少具体功能,列出来一个表,或者写成空函数先放着。列完每个任务的具体功能之后,我们再回头看需求书,是否所有功能都实现,且它们之间的切换关系逻辑都很清晰。

2功能模块化

第一步完成之后,整体的系统构架和逻辑关系就一清二楚了,接下来我们按照第一步中列的每个任务的功能表,去完成具体功能实现。此时,还不急着敲代码,继续规划。我们知道,对于MCU来讲,通常所有的功能最终是要通过调用底层实现。所以接下来我们要规划需要多少底层的资源,根据第一条中任务具体的功能列表,我们列一个底层驱动表。例如功能需要使用UART,SPI等这些外设资源,所有外设资源列成一个外设表,表中是所有需要使用的外设资源。如果还需要其他驱动,例如传感器、LCD、FLASH等,所有器件列一个器件驱动表。

3编写外设驱动

有了第一步和第二步从上向下的规划,此时我们应该已经很清楚这个项目需求书如何变成代码实现。此时,开始编写程序,从下向上,逐层编写。

首先要根据外设表编写每个外设对应的驱动,每个外设驱动单独列一个文件,编写好之后验证功能是否正常,这个步骤跟本文开头提到的开发板示例程序类似,很基础。如果同一个外设,需要同时实现几路输出或输入,例如需要三个不同的IIC输出,那就同时启动三路IIC验证功能是否都正常,每一路之间会不会有干扰。

每编写一个驱动,一定要对驱动中的每一个函数进行功能验证。只有底层没问题,才能往上封装。

4编写器件驱动

因为器件的驱动很多都是以外设驱动为基础的,所以写完外设驱动之后,利用外设驱动的函数,去实现器件的驱动,例如FLASH,可能是SPI通信的,那么我们首先要写好SPI驱动文件,然后调用SPI驱动文件,编写FLASH驱动文件,完成具体的功能函数,例如FLASH的擦除,读写等。

同样,每一个编写的器件驱动都要对每一个函数进行测试。

5其它驱动的编写

可能在项目中,还涉及到一些无关底层的东西,例如一些加密算法,复杂的数据处理算法,各类通信协议等。可以把每一类分为一个模块,编写或者移植完之后一定要验证每一个函数的功能。

6实现任务里的功能函数

驱动文件都准备好了之后,就利用驱动文件,加上必要的数据处理,去完成任务里的每一个具体的功能函数。

同样,每一个编写的功能函数都要进行测试。保证功能正常实现。

7任务测试

完成步骤6之后,要对每一个任务进行测试,看是否能实现规划中要求的功能。

8系统测试

完成步骤7之后,项目基本完工,因为每一层都是经过测试的,所以整个系统也不会有太大问题,但是也可能存在一些例如逻辑或者资源冲突的错误。此时按照需求书要求的功能对整个系统进行反复测试,查找可能存在的问题,进一步完善程序。

9注意事项

在整个设计过程中,还有一些其他的注意事项,例如:

● 如果开了很多中断,一定要对每个中断设置优先级。明确哪个优先级应该优先处理。

● 相同优先级下的两个中断,禁止在第一个中断中触发第二中断,程序会卡死。

● 少用全局变量,系统运行时必要的变量和状态可以都放在结构体中。然后只定义一个结构体变量。

● 当结构体的成员为不同数据类型时,成员排序就显得很重要,优化排序会节约很多内存。

● 结构体做形参的时候,为减少栈空间的开支,最好设置结构体指针类型的形参。

● 不可以返回指向栈空间的指针。

● 如果通信接收或者发送没有硬件FIFO,可以编写软件FIFO,避免丢包。

● 所有变量要初始化具体数值,尤其是局部变量。

● 定义指针类型变量一定要初始化。

● 只在本文件里使用的函数或者全局变量,一定要加static。

● 头文件中只能声明,不可以定义。

● 一定要添加合适的注释,大部分时候代码不知自己看。

● 使用数据结构存储或者处理数据,例如结构体、枚举、链表、队列等。

看完这些步骤,是不是觉得复杂项目的程序设计原来也挺简单的,那就愉快的开始程序设计之路吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5998

    文章

    43950

    浏览量

    620571
  • 外设驱动器
    +关注

    关注

    0

    文章

    3

    浏览量

    3409

原文标题:浅谈项目中的程序设计思路与步骤

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #单片机 #电子工程师

    电子工程师单片机
    jf_24750660
    发布于 :2022年10月20日 07:21:46

    TI工程师掌控自己的电源设计

    TI工程师掌控自己的电源设计
    发表于 08-04 09:41

    跪求单片机高手,资深电子工程师指点

    如果您是单片机高手,资深电子工程师,请留步观看!本人欲学习单片机,各位高人如有较为系统的资料、书籍、光盘,请不不吝赐教!十分感谢!邮箱:dingyanming0903@163.com
    发表于 01-08 17:20

    工程师掌控自己的电源设计

    工程师掌控自己的电源设计
    发表于 04-16 20:48

    工程师掌控自己的电源设计

    工程师掌控自己的电源设计
    发表于 04-16 20:53

    此书帮你深入学习单片机成为资深高级工程师

    本帖最后由 冰葑世纪 于 2013-7-29 00:42 编辑 如果你觉得你的单片机有了一定水平,但还是成不了资深或者高级工程师,那么,下面的资料帮你实现这个愿望,下载地址:[hide][/hide]
    发表于 07-23 15:05

    单片机兼职工程师

    最近有个STM32的项目,想找位单片机兼职工程师,最好工作经验5年以上的,有意者加Q详谈:496269080
    发表于 05-29 23:07

    【社区之星】如何成为一位“合格”的资深电子工程师

    。技术的合作与共享,是一个有利于大家、有利于千秋的事情,所以我希望工程师能在社会中摆正自己的位置,与社会融为一体,以促进社会技术的跨时代大发展。 9、电子发烧友:出的《单片机编程魔法师之高级裸编程
    发表于 11-24 15:55

    资深工程师的进阶之道

    ARM嵌入式和单片机学习有着密不可分的关系,在学习单片机的过程中积累必要的学习经验和知识是非常有必要的,如何在这一过程中逐渐成为高级嵌入式工程师呢?本文将为大家介绍如何在学习过程中,积累成为高级
    发表于 09-27 15:15

    资深工程师与你分享单片机学习经验

    钱吗?企业还会为找不到高技术人才而发愁吗?再说了,企业敢用只学了10天的单片机工程师吗?希望读者能像笔者一样,掌握正确的方法之后,坚持去玩。2.熟练软件开发工具开发工具软件一定要熟练。说到开发工具,因为
    发表于 10-12 09:28

    国内控制器龙头行业招聘资深算法工程师

    国内智能控制器龙头企业研究院招聘资深算法工程师,工作地点:南山科技园,有兴趣请联系:kezhq@126.comqq:12530691 谢谢资深算法工程师5年以上
    发表于 01-26 17:45

    前华为资深工程师带你玩转嵌入式软件调试方法

    内容面向哪些人群:嵌入式软件开发工程师单片机软件开发工程师、软件开发工程师等 参与直播将获得如下知识点:1、了解嵌入式软件开发主流的调试手段2、CLI设计原理和源码实现3、如何制作一
    发表于 10-18 15:48

    前华为资深工程师带你玩转嵌入式软件调试方法(附命令行代码)

    。本次直播主要介绍软件调试几种主流方法,重点详细讲解CLI的设计原理和源代码实现并如何制作一个自己的CLI。直播内容面向哪些人群:嵌入式软件开发工程师
    发表于 10-19 12:00

    【高手问答】资深工程师版主殷培与聊聊不一样的LabVIEW

    的事儿【高手问答】第14期——如何升华51单片机基础,成为一个出色的开发工程师。【高手问答】第13期——向资深PCB设计取经:如何设计高速PCB【高手问答】第12期——韦东山老师VS
    发表于 08-28 13:58

    资深工程师单片机项目经验分享

    资深工程师单片机项目经验分享,条条真理!
    的头像 发表于 05-30 17:13 2962次阅读
    <b class='flag-5'>资深</b><b class='flag-5'>工程师</b><b class='flag-5'>单片机</b><b class='flag-5'>项目</b>经验分享