您现在的位置: 主页 > 嵌入式人才市场 > 企业招聘信息 > 单片机应用程序架构的介绍
本文所属标签:
为本文创立个标签吧:

单片机应用程序架构的介绍

来源:网络 网络用户发布,如有版权联系网管删除 2018-06-30 

单片机应用程序架构的介绍

“单片机应用程序的架构”这可能不是一个专业术语,但是是对一些经验的一个总结。我们在开发单片机的时候,程序的架构大致可分为以下三种:

1. 顺序执行程序,这类写法是大多数人使用的方法。

2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。

3. 操作系统,此法应该是应用程序编写的最高境界。

下面来详细的介绍一下:

1.顺序执行

这种方法的应用程序比较简单,在实时性,并行性要求不太高的情况下是一个不错的方法,程序设计简单,思路比较清晰。初学者使用的比较多,但是也是单片机应用最广的一种。我们来看Arduino 库的mian()函数。

这是一个典型的顺序执行的程序模型:

单片机应用程序架构的介绍

2.时间片轮询法。

很多人说过这种方法,但是都没有讲的很清楚。我也找了好久的资料,看到了这样的例子,感觉还是很不错的,很经典的。我们来看看:

目标:使用1个定时器,完成3个不同的任务。

  • 定义数据

单片机应用程序架构的介绍

  • 定时器中断服务函数

单片机应用程序架构的介绍

定时中断服务函数,在中断中逐个判断,如果定时值为0,表示没有使用此定时器或此定时器已经完成定时,不用处理。否则定时器减1,直到为0时,相应标志位值1,表示此任务的定时值到了。

  • 在需要的应用定时的地方添加如下代码

单片机应用程序架构的介绍

在任务中判断TaskMark[0] 是否为0x01即可

通过上面的例子:定时器的复用我们可以看出,在等待一个定时的到来的同时我们可以循环判断标志位,同时也可以去执行其他函数。这个就厉害了。

循环判断标志位:如果循环判断标志位,是不是就和上面介绍的顺序执行程序是一样的呢?一个大循环,只是这个延时比普通的for循环精确一些,可以实现精确延时。

执行其他函数:那么如果我们在一个函数延时的时候去执行其他函数,充分利用CPU时间,是不是和操作系统有些类似了呢?

时间片轮询法的架构:

  • 设计一个结构体

单片机应用程序架构的介绍

  • 此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数

单片机应用程序架构的介绍

  • 任务处理

单片机应用程序架构的介绍

此函数就是判断什么时候该执行那一个任务了,实现任务的管理操作,应用者只需要在main()函数中调用此函数就可以了,并不需要去分别调用和处理任务函数。

下面我们就来举例说明这个架构怎么运用吧,我们还是以Arduino为例子,来执行3个任务:每隔1s执行任务1,每隔30ms执行任务2,每隔10s执行任务3。大家不要吐槽,说这个需求就用arduino直接编程就好了,分分钟的事,为啥还要搞的那么麻烦,我只能说,还是要细细研究一下。

单片机应用程序架构的介绍

我们看一下输出:

单片机应用程序架构的介绍

有没有有点带上操作系统的感觉。

3.操作系统

操作系统就不说了,多任务那是很简单的事了。就不做介绍了。

总结:时间片轮询法优势还是比较大的,即有顺序执行法的优点,也有操作系统的优点。结构清晰,简单,非常容易理解。用的也是最多的。

更多的内容请关注头条号:小5嵌入式



              查看评论 回复



嵌入式交流网主页 > 嵌入式人才市场 > 企业招聘信息 > 单片机应用程序架构的介绍
 我们 函数 执行

网站地图

围观()