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

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

3天内不再提示

浅谈项目中的程序设计思路与步骤

玩转单片机与嵌入式 来源:玩转单片机与嵌入式 2023-09-04 10:48 次阅读

对于一个没有太多程序设计经验的萌新工程师来说,如何有规划有条理的进行程序设计,是一个很值得学习的课题。在本文中,作者结合自身的经验,浅要的谈一谈项目中的程序设计思路与步骤。

我们平时在学习开发板、示例程序或者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。

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

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

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

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

审核编辑:汤梓红

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

    关注

    2526

    文章

    48093

    浏览量

    740062
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343620
  • FlaSh
    +关注

    关注

    10

    文章

    1550

    浏览量

    146646
  • 程序设计
    +关注

    关注

    3

    文章

    258

    浏览量

    30188

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

文章出处:【微信号:玩转单片机与嵌入式,微信公众号:玩转单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于labview的制动特性程序设计思路是什么啊 求大神

    基于labview的制动特性程序设计思路是什么啊 求大神
    发表于 05-15 18:46

    11个单片机程序设计经典项目!25个项目资料免费放送!

    ,上拉电阻R1取值为470欧姆,实际应用要取值大一些。电路设计完成后,再次保存设计,下面就可以设计程序了。图3项目1的仿真电路图2.程序设计项目采用Keil软件进行设计,基本操作共4
    发表于 06-21 20:44

    浅谈51系列单片机嵌入式程序设计

    浅谈51系列单片机嵌入式程序设计:文主要提出了一个51系列汇编语言通用程序设计框架,并对其作了详细的探讨.关键字:单片机;嵌入式;程序设计;汇编;51系列1 引言
    发表于 12-03 22:31 26次下载

    实用程序设计

    程序设计就是用计算机所能接受的语言把解决问题的步骤描述出来,也就是编制计算机的程序。AVR单片机程序设计语言有C编译高级语言和宏汇编汇编语言。在设计应用系统时软件
    发表于 07-01 09:58 31次下载

    状态机思路在单片机程序设计中的应用

    状态机思路在单片机程序设计中的应用 状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,
    发表于 02-09 11:25 1w次阅读
    状态机<b class='flag-5'>思路</b>在单片机<b class='flag-5'>程序设计</b>中的应用

    状态机思路在单片机程序设计中的应用

    状态机思路在单片机程序设计中的应用 状态机的概念       状态机是软件编程中的一个重要概念。比这个概念更重要的是对
    发表于 03-18 15:00 1136次阅读
    状态机<b class='flag-5'>思路</b>在单片机<b class='flag-5'>程序设计</b>中的应用

    循环结构程序设计

    循环结构程序设计的几种方法,几种思路,设计语言为C语言
    发表于 12-23 14:35 0次下载

    LabVIEW程序设计步骤

    【LabVIEW从入门到精通】2.3 LabVIEW程序设计步骤
    发表于 01-08 15:44 0次下载

    LabWindowsCVI程序设计步骤

    【LabVIEW从入门到精通】3.3 LabWindowsCVI程序设计步骤
    发表于 01-08 15:50 0次下载

    【LabVIEW从入门到精通】LabVIEW程序设计

    【LabVIEW从入门到精通】2.3 LabVIEW程序设计步骤
    发表于 01-04 09:41 0次下载

    dsp28335如何入门:程序设计步骤

    本文首先介绍了dsp28335的概念,其次介绍了dsp28335电气特性及特点,最后详细阐述了关于dsp28335的程序设计步骤
    发表于 05-23 17:09 1.9w次阅读

    面向对象的程序设计总结与过程化程序设计有什么区别?

    面向对象程序设计(简称OOP)技术最近几年在计算机领域得到了迅猛发展,它是程序设计方法的一场革命。与传统的结构化程序设计(面向过程程序设计)相比,它具有许多优点,其中最主要的是,面向对
    发表于 09-19 14:12 0次下载
    面向对象的<b class='flag-5'>程序设计</b>总结与过程化<b class='flag-5'>程序设计</b>有什么区别?

    PLC程序设计的五个步骤

    PLC程序设计一般分为以下几个步骤
    发表于 05-13 08:51 9841次阅读

    PLC编程中程序设计步骤

    设计plc控制系统时,除了解决输出部件和输入部件的连线方式外,最主要的工作是程序设计与调试。通常程序设计按如下步骤进行。 (1)了解被控系统的工艺过程和控制要求,并作出流程图,以描述控制过程
    发表于 12-17 16:17 2840次阅读

    项目配置步骤

    目录 概述 ——3 配置组态 ——4 使用的软硬件 ——4 项目配置步骤 ——4 概述 Sm@rtServer 选件是用来做远程访问的。 配置组态 使用的软硬件 项目中使用的硬件如表 2-1 所示
    的头像 发表于 05-19 09:10 974次阅读
    <b class='flag-5'>项目</b>配置<b class='flag-5'>步骤</b>