zoukankan      html  css  js  c++  java
  • 学会以合作的方式思考

            对于所有任务,无论在何种情况下,任务的运行时间 t 都应该小于时间间隔。即如果任务不能在规定的时段内完成,就中止该任务,尤其是对于以查询方式运行的中断程序。

    比如,这样的代码是不可靠的:

    // 等待, 直到AD转换结束(检查ADCI)  
    while((ADCON & ADCI) == 0);


    因为在某些情况下,可能由于如下原因导致系统被挂起:

    a 如果模数转换器的初始化不正确,不能确定模数转换将被执行

    b 如果模数转换器的输入电压过高,那么可能根本就不运行

    c 如果没有正确初始化变量ADCON或ADCI,那么可能不按要求运行

    如果要求系统很可靠,则必须能够保证没有函数会这样挂起。循环超时提供了一种简单而有效的方法来提供这样的保证。

    循环超时很容易创建,其代码结构的基础是软件延迟:

    UINT16 Timeout_loop = 0;  
    ...
    while(((ADCON & ADCI) == 0) || (++Timeout_loop == 0));

    UINT16 Timeout_loop = 1;  
    ...
    while(((ADCON & ADCI) == 0) || (Timeout_loop == 0))
    {
    Timeout_loop++;
    }

    后者的好处是可以很方便的注释掉这种循环超时,这时如果再发生前面所说的错误,至少程序不会一直停留这这里,而会继续往下执行,当然紧接着后面应该有对这种错误的相应处理方法。

    注:

            这种循环超时因为是软件延迟实现的,故不太容易精准的控制延迟时间,且没有很好的可移植性,可以考虑用硬件定时器替代。

    比如,假设8051定时器1已经开启,10ms定时

    while((ADCON & ADCI) == 0) || ! TF0);  




     



  • 相关阅读:
    一种安全云存储方案设计(上)——基于二次加密的存储策略与加密图文混合检索
    lamda表达式导致运行时VerifyError
    编译原理:语法分析概述
    语音识别与 RNN-Transducer 概述
    通信原理基本概念
    追光捉影的自动机:2021 卓工实训小作文
    【实战】jsfinder+jsinfo-scan结合改造
    js基础记录
    qq、微信二次分享
    收藏链接
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309827.html
Copyright © 2011-2022 走看看