学会以合作的方式思考
2011-12-03 10:13
288 查看
对于所有任务,无论在何种情况下,任务的运行时间 t 都应该小于时间间隔。即如果任务不能在规定的时段内完成,就中止该任务,尤其是对于以查询方式运行的中断程序。
比如,这样的代码是不可靠的:
因为在某些情况下,可能由于如下原因导致系统被挂起:
a 如果模数转换器的初始化不正确,不能确定模数转换将被执行
b 如果模数转换器的输入电压过高,那么可能根本就不运行
c 如果没有正确初始化变量ADCON或ADCI,那么可能不按要求运行
如果要求系统很可靠,则必须能够保证没有函数会这样挂起。循环超时提供了一种简单而有效的方法来提供这样的保证。
循环超时很容易创建,其代码结构的基础是软件延迟:
或
后者的好处是可以很方便的注释掉这种循环超时,这时如果再发生前面所说的错误,至少程序不会一直停留这这里,而会继续往下执行,当然紧接着后面应该有对这种错误的相应处理方法。
注:
这种循环超时因为是软件延迟实现的,故不太容易精准的控制延迟时间,且没有很好的可移植性,可以考虑用硬件定时器替代。
比如,假设8051定时器1已经开启,10ms定时
比如,这样的代码是不可靠的:
// 等待, 直到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);
相关文章推荐
- 学会以合作的方式思考
- 不管你以后写不写JS,都应该学会这种思考方式
- 不管你以后写不写JS,都应该学会这种思考方式
- 学会用麦肯锡的方式思考
- Windows Azure 解决方案系列: 领先的集成化公司以云端对云端的协同合作方式加快了进入市场的脚步
- 如何学会独立思考?
- c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
- 谈薪,你学会正确方式了吗?
- form表单提交数据编码方式和tomcat接受数据解码方式的思考
- 有关.NET参数传递的方式引发的思考
- 【分享】面对问题,学会思考
- 【同步荡秋千让学前儿学会合作】说…
- 刷算法题学到的一些思考问题的方式(动态更新)
- 教你如何以对象的方式思考
- 独立思考者的思考模型----智商160以上的人都应该学会的
- JAVA线程终止方式的思考
- 【顶】(与同事合作的快乐)技术人员也需要先学会做人,再学会做事,再是能成事,最后是成名得利
- 合作开发带来的思考
- 思考方式--PDCA循环
- SaaS系统收费方式思考