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

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

3天内不再提示

当单片机遇到多个模块的数据需要处理,应该怎么办?

贸泽电子设计圈 来源:未知 作者:李倩 2018-03-09 13:51 次阅读

这里利用一个实际发生的例子,针对初级工程师经常犯的一个小错误,或者经常要走的一个弯路,做了针对性的纠正。希望可以帮到大家,文笔不好,文章中有叙述不清的地方大家多多指教。

这篇文章我不是想说编程的规范性的东西,如果你想让自己的程序文件最起码直观的看起来美观、可读性强,推荐找华为的“C语言编程规范”。

我只想说一说当我们的单片机遇到多个模块的数据需要处理,类似于“多任务”时我们应该怎么办?

背景是这样的,9月份开始安排一个工程师开始做电动汽车交流充电桩机械设计部分由公司机械结构部门负责。充电桩的电子部分总体上分为X个部分(用到的资源),电阻触摸屏(RS232),M1卡读写(RS232),电能计量表(RS485),语音提示(SPI),电力开关(继电器IO),通讯接口(RS485、CAN)。

工程师做的过程非常勤奋,期间也是困难重重,改了很多个版本,第二年6月总算把充电桩立起来了。

咱们来验收一下吧,结果发现读卡的时候不能处理触摸屏,播放语音的时候不能处理读卡,语音播放不能打断或者跳跃,反正就是所有事件必须一个一个按部就班的来,一旦操作错误就需要多次执行、等待、甚至重新来过。

一个工作3年多的工程师怎么会把产品做成这样呢?看看程序吧!

一看不要紧,吓一跳!整个的程序是没有逻辑的,一条线就往下写……

While(1){//上电进入主程序 或 触发触摸屏//播放提示语音Delay();//等待播放完毕//读取M1卡信息Delay();//等待读卡数据返回//播放提示语音Delay();//等待播放完毕//M1卡数据交互,判定下一步操作及提示Delay();//等待数据处理完毕…………}

这里说这个工程师基本上对于自己设计的产品没有任何的整体概念,或者说对自己开发的程序用到设计上会有怎样的实际效果根本就不清楚。

他犯了几个我们在程序开发过程中最忌讳的几个问题:

1、 delay(死等)这类函数只在应该实验室验证某个功能过程中用到,在实际的产品开发时无论是主循环while中,还是其调用的函数中,亦或是中断服务程序中绝对不可以用到。

2、 产品设计的各个子模块之间的逻辑关系太强,例如:必须等待播音完毕才能读卡进入下一步操作等。

我们讲,产品设计中只有各个事件处理模块间的逻辑关系弱化,才能更加灵活地进行处理。例如:两个事件A和B,如果程序开发时将A做成B事件的必要条件,B事件的触发就必须等待A事件的发生。反之,如果A事件作为B事件处理的一个特殊情况,那么程序开发起来就变得灵活很多。

3、 没有考虑到单片机本身是一个单核单任务的架构,每一个事件都会独占CPU内核,当多个任务模块同时存在时我们应该对各个事件进行区分,我们应当分情况、分事件实时性要求等区分对待。

那么针对于这样的问题,或者是遇到类似的项目我们应该如何处理呢?

几条建议:

1、将硬件系统区分为独立单元单独做成底层驱动函数和应用函数,并且函数正常应该有参数和返回值,其中返回值是必要的。如何衡量这类函数呢?这类函数可移植性强,只要一个.h文件和一个.c文件就可以随意放到任何工程中。例如:语音播放、M1读卡、485处理等等。

2、将1中的所有函数进行时间评估,评估点有两个。一个是函数的执行时间t,第二个是函数的周期性发生的时间T,一个最基本的条件是t < T,理想情况应该是t << T。

3、建立一个集中逻辑处理函数,在这个函数中对1中的各个函数进行调度。这个函数发挥的作用相当于嵌入式系统中的系统调度。这种调度是整个硬件逻辑中所有事件处理的调度,它的目的是完成一个处理过程,但是绝不依赖于任意事件的必要处理过程。这样就将问题2中提到的事件间的逻辑关系弱化了,处理起来变得十分灵活,使得各个关系不在相互必要。

4、为了保证前面内容的正常实施还需要针对各类事件的周期,建立一个必要的时间管理函数,时间函数的基础一般情况下由一个内部定时器的中断来完成,中断的周期一般我们考虑5-10ms。按照实际需求将N个定时器中断定义为一个事件处理的周期TT,这个周期应该保证处理完最恶劣情况可能发生的所有t,且保证TT < T。

5、 这其中也有例外,一些实时性要求高的事件应当用中断完成。其中中断处理函数的处理事件应尽量短,时间要求参见2。

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

    关注

    6030

    文章

    44487

    浏览量

    631865
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10802

    浏览量

    210772

原文标题:当单片机遇到多个模块的数据需要处理,应该怎么办?

文章出处:【微信号:Mouser-Community,微信公众号:贸泽电子设计圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    52单片机测控转速怎么办

    52单片机测控转速怎么办?程序怎么写?上位机采用MODBUS协议数值设置速度,经验数据控制转速。。。怎么办啊?
    发表于 06-25 23:35

    如何利用单片机高效地并行处理多个外设通信?

    现在写代码一直会遇到这样的问题:单片机处理某一个外设请求的时候,如何兼顾到其他的外设请求,简而言之就是单片机如何能高效地并行处理
    发表于 10-14 22:10

    NRF24L01模块无法实现电脑向单片机数据怎么解决?

    有两块NRF24L01模块,一块是转USB串口,另一块是插在开发板上的,目前可以实现单片机向电脑传数据,无法实现电脑向单片机数据
    发表于 06-10 09:25

    一个系统中需要用到多个按键的时候怎么办

    需要用到多个按键的时候怎么办呢?就像数码管一样,该如何解决多个按键输入问题?这里就引入矩阵键盘的概念:键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式
    发表于 01-21 07:49

    DMA有何功能?多个DMA请求一起来怎么办

    DMA有哪些功能呢?与DMA相关库函数有哪些呢?DMA有何功能?多个DMA请求一起来怎么办?
    发表于 01-27 07:11

    请问单片机串口不够用怎么办

    做一个设计用的STC12C5A60S2单片机,有三个模块需要用RXD和TXD串口,但是单片机只有两个串口怎么办?三个
    发表于 09-20 06:49

    51单片机不能识别红外循迹模块发出的的高电平怎么办

    51单片机不能识别红外循迹模块发出的的高电平怎么办
    发表于 10-18 06:09

    51单片机不能识别红外循迹模块发出的的高电平怎么办

    51单片机不能识别红外循迹模块发出的的高电平怎么办
    发表于 10-23 07:02

    主板坏了怎么办

    主板坏了怎么办? 大家用组装机的朋友,常遇到主板坏了,不懂的常不知如何处理,其实有些故障是很容易排除的,现在这个时代,将主板拿出去
    发表于 05-22 08:54 1.2w次阅读

    单片机的程序开发经常会出现那些错误

    的东西,如果你想让自己的程序文件最起码直观的看起来美观、可读性强,推荐找华为的“C语言编程规范”。我只想说一说当我们的单片机遇到多个模块数据需要
    的头像 发表于 01-09 10:41 4879次阅读

    单片机遇到状态机 入门QP

    单片机遇到状态机前言前些日子在微信上看到李肖遥的公众号,里面系统讲述了QP框架,我很有感触。我用QP框架很多年了,一开始是使用QM和QPC++,到后来抛弃了QM,直接使用QPC裸写程序,到后来
    发表于 01-17 12:03 9次下载
    <b class='flag-5'>当</b><b class='flag-5'>单片机遇到</b>状态机 入门QP

    单片机遇到多个模块数据需要处理应该怎么办

    这篇文章我不是想说编程的规范性的东西,如果你想让自己的程序文件最起码直观的看起来美观、可读性强,推荐找华为的“C语言编程规范”。我只想说一说当我们的单片机遇到多个模块数据
    发表于 02-09 10:44 2次下载
    <b class='flag-5'>当</b><b class='flag-5'>单片机遇到</b><b class='flag-5'>多个</b><b class='flag-5'>模块</b>的<b class='flag-5'>数据</b><b class='flag-5'>需要</b><b class='flag-5'>处理</b>,<b class='flag-5'>应该</b><b class='flag-5'>怎么办</b>?

    器件的工作频率较高时怎么办

    器件的工作频率较高时怎么办 随着科技的不断进步,许多电子器件需要工作在较高频率下以满足越来越复杂的应用需求。然而,较高的工作频率也意味着器件面临着更多的挑战和问题。因此,器件的工作
    的头像 发表于 08-29 16:25 736次阅读

    单片机没有DAC外设功能怎么办

    在消费电子行业,难免有时为了省成本而出现需要用到DAC而单片机没有DAC外设的情况,那么遇到这种情况怎么办呢?
    的头像 发表于 09-14 16:46 1643次阅读
    <b class='flag-5'>单片机</b>没有DAC外设功能<b class='flag-5'>怎么办</b>

    linux用gdb调试遇到函数调用怎么办

    linux用gdb调试遇到函数调用怎么办? 在Linux上使用GDB调试时,遇到函数调用是一个常见的情况。函数调用可能涉及到多个函数、多个
    的头像 发表于 01-31 10:33 669次阅读