您现在的位置: 爱51代码网 >> 范文 >> 文章正文
[图文]占用式和非占用式程序结构分析

在改造之前的扫描程序是不适合放在定时器中断处理程序里执行的,因为太长,可能还没执行完就来了下一个中断。就算勉强执行完了,留给主进程处理其它事情的时间也不多了。
而改为非占用式之后,可以在中断处理程序里直接调用扫描程序,它会很快地执行完,然后有充足的时间留给其他任务。
    3、非占用式程序并不是一定会降低效率。
    先拿“三大改造”的第三点说明,它虽然形式上消除了延时函数,但是每次调用此函数时对num变量的处理,以及有其产生的相关判断语句,总的代码量比原来的要多。
    但是,这真的就仅仅是这样了吗?改造之前的函数,执行玩退出之后所有的led全是熄灭的,只有在此函数执行过程中(延时阶段)才会点亮(传统数码管扫描亦是如此)。
    而改造之后的函数,它的功能就是指定一下每个灯的亮灭,然后立马退出,在执行其它任务的过程中该点亮的灯是在点亮的状态。这样就提高了整体的亮度,在执行其他任务的过程中,从某种意义上说也是在执行当前任务。
    这可能还不能太清楚地说明问题,下面我要再举一例,传统的按键扫描一般是这样:
    if(key==0)    //key是某个引脚
    {
         delay5(1);
         if(key==0)    //确认按键已按下
         {
             //do something
         }
    }
    这段代码也是很浪费时间的,中间有个5ms延时拜拜浪费。
    通过对它改造之后,结合定时器,可以几乎完全地把这5ms时间省出来:
    static unsigned char keylast;    //保存上次的按键值
    if(key==0 && keylast==1)    //检测到一个下降沿
    {
         //do something
    }
    keylast=key;
    结合定时器进行改造,是真的可以把占用式函数的延时时间节省出来的。
 
六、非占用式程序的一般结构
    非占用式程序将占用式程序分割执行,需要用到静态变量对当前步骤进行记忆,其一般结构如下:

逻辑变量计算就是根据任务功能构建出一个合理的逻辑结构。
    对逻辑变量的响应就是对构建好的逻辑结构的结果的响应和执行。
 
七、吐槽
    最近开发 DYS388 写了不少程序,以前在写程序的过程中就隐约发现了所谓占用式和非占用式程序结构的区别,程序写多了肯定能发现问题,但是如果不停下来总结,而是一味的开发,那是不会有进步的。
    组织庞大的程序需要正确的理论指导,学习很多的知识也需要进行总结。知识点太多不可能学完,只有将他们提升到理论层次,将这种思维方式刻在脑子里才能灵活地运用,并从容地接受新的知识。

上一页  [1] [2] 

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    SharePoint 2013 Search REST AP
    SharePoint如何搜索指定的爬网内
    weblogic Servlet: "action" fai
    webdav 与exchange通信失败未找到
    SharePoint2013文档库可以直接存
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    SharePoint 2013 Search REST AP
    SharePoint如何搜索指定的爬网内
    weblogic Servlet: "action" fai
    webdav 与exchange通信失败未找到
    SharePoint2013文档库可以直接存
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    如何测量锂电池剩余电量
    WINCE6.0对话框右上角没有OK
    使用getlasterror返回值一直
    AD14如何输出DWG文件
    Keil-v5开发STM32F103RCT6的
    BKP_DR寄存器中的值RESET之后
    arm板自启动运行应用程序时为
    RX8025T日和秒都读成32
    tornado 2.2 PPC 加入-mlong
    8 error C2664: “sscanf”:
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |