别踩白块儿bot
第6章 面向对象思想+事件驱动结构
先来看一下这个东西吧:http://v.youku.com/v_show/id_XNTk2NzExMjg4.html。
看完之后应该会觉得这个东西的结构非常复杂,这是笔者做过的最复杂的项目之一。由于是给公司开发的,所以和上一章一样不能公开源代码,但是会举一些简单的例子说明。
刚接到这个项目了解了大体功能后,第一反应是用“界面函数”的结构。确实,这个东西是非常适合用界面函数完成的,但是由于当时笔者正在自学C++,于是用C++的思路分析了一下这个项目:
1、总共有4个界面,而且有两个和列表框好像啊。
2、几乎所有的动作都是由旋转编码器触发的。
经过一番思考之后,笔者决定做一次尝试,用面向对象的思想加上事件驱动的机制完成它。
下面就介绍一下这种结构,也希望能借此说明“对象”和“事件”的概念。
第5章 定时器执行任务
先来回顾一下:
在第2章中介绍了界面函数结构,它的思想是主进程为主体,外部的按键等作为特殊情况单独处理。但是当接触到的程序更复杂时,尤其是当程序里还要进行精确定时时,用单进程结构已经满足不了要求了,这就进一步产生了第3章的结构——定时器分配任务。
定时器分配任务结构在主进程结构基础上开辟了一个定时器进程,在这个进程里进行按键扫描任务、计时任务等。此时这些任务是不会被中断的,定时并且精确地每隔一段时间执行一次。当时的看法是:这些定时器里的进程完成任务后把结果保存,主进程可以选用这些结果进行处理。
此外定时器还要进行一个特殊的功能——给主进程下达命令,通知主进程进行某种动作。这个功能的本质就是向主进程提供了时间信息。
这种结构已经结合了定时器,并且已经把一些简短的代码直接放到了定时器中断处理程序里了,但还有相当一部分代码放在主进程里。不是说不能放在主进程里,而是当时没有明确出定时器中的各个进程是如何形成的,这些定时器中的任务有什么更深刻的特征。
本章就是专门讨论这些放在定时器里执行的任务。
第4章 占用式与非占用式程序结构
1. 什么是占用式程序
一个进程在一个时刻只能处理一个任务。
每个任务是为了完成一个功能,如果这个功能的实现过程是一直占用进程处理资源的话,就称这个任务函数是占用式程序结构。
最常见的占用式程序结构就是延时函数了,比如最常用的5ms延时函数
第3章 定时器分配任务
在前两章的内容里都没有考虑中断,本章将引入定时器。引入定时器的原因一些功能需要计时,最常见的就是电子钟了。
第2章 “界面函数”结构
这一章将介绍的是主循环调用任务函数的一种非常常用的结构。到目前为止,在主进程的构建方面,除了顺序调用我只用到过这一种构建方式,并且用得非常多。在2011年的电子设计大赛上,笔者就用了这种程序结构获得了安徽省第一的成绩,可见这种结构的威力。之所以叫它“界面函数”结构,是因为它各个函数就像一个个界面一样,在每个界面(函数)中完成某些特定的功能,我没找到这种结构的通用叫法。
第1章 主函数顺序调用
写过单片机程序都知道,在main函数的结尾会有个 while(1) 循环,它就是单片机的归宿。
在不考虑中断的情况下,整个单片机的最根本任务就是这个循环,由于在主函数里,在此我们称它为“主循环”,认为main函数及其调用的所有子函数(以及子函数调用的子函数)都在“主进程”里。