关于开发中如何防止死等程序导致其它任务运行不了方法

在嵌入式软件开发中,比如单片机的程序,我们一定会写到一个大的死循环的程序,也就是轮询IO口,通常用

while(1)
{

}

    来实现大循环,程序就会在while(1)中不断的循环执行一些任务,但是,任务与任务之间如果存在延时,就会大大的削弱整个架构的实时性,虽然现在的高级单片机ARM已经具有了多线程的机制,但是避免不了的依然是要写死循环,也就是说,表面上看到程序是一起在跑的,其实是把时间切成若干份,然后进行调度,在linux内核中,fork一条进程需要调度,do_thread也需要进行调度。

    最近在工作上遇到一个这样的问题,串口协议要求比如等到IO口为低电平,数据才能发送。关于这个问题,没别的方法,按照那个架构来说只能死等while(等到IO口低电平输出),但是这样就会遇到一个问题,如果一直死等,万一IO没有低电平输出,那么就会发生丢包的可能以及其他任务会被直接影响到运行,毕竟单片机一般采用的架构都是顺序执行的,但是看到有工程师做这样的处理,我也就学过来了,让while做超时处理,一旦在一定的时间内等待不到低电平输出,那么就让这个循环退出,这样就不会影响到其它任务的执行了,也降低了丢包了,但还是会有丢包,只能慢慢调试了,要是有高手看到麻烦教我一下,最近我们公司也是因为这个问题卡了很久,表示伤不起,我们来看一下是怎么实现的。

//做IO口超时等待
	while(1)
	{
		if(等待低电平)
		{
			break ; //有了就退出执行其它任务
		}
		else   //没有的话就做超时处理,Time_count是一个定时器里的一个全局变量计数器
		{
			Time_count++;
			if(Time_count>0x700)
			{
				Time_count++;
        	  	break ;
			}

		}
	}
时间: 2024-10-29 06:15:41

关于开发中如何防止死等程序导致其它任务运行不了方法的相关文章

Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法.分享给大家供大家参考,具体如下: 一.如图 二.代码实现 public class ColorImageActivity extends Activity { private ImageView mImageView; private SeekBar mSBRed,mSBGreen,mSBBlue,mSBAlpha,mSBLight; //修改后的图片 private Bitmap mModBitmap; //画布

Android开发中方向传感器定义与用法详解【附指南针实现方法】

本文实例讲述了Android开发中方向传感器定义与用法.分享给大家供大家参考,具体如下: Android中的方向传感器在生活中是一个很好的应用,典型的例子是指南针的使用,我们先来简单介绍一下传感器中三个参数x,y,z的含义,以一幅图来说明. 补充说明:图中的坐标轴x,y,z和传感器中的X,Y,Z没有任何联系! 如上图所示,绿色部分表示一个手机,带有小圈那一头是手机头部 传感器中的X:如上图所示,规定X正半轴为北,手机头部指向OF方向,此时X的值为0,如果手机头部指向OG方向,此时X值为90,指向

移动开发中HTML5能否替代本地程序?

 随着移动设备越来越先进,对HTML5的支持度越来越高,我们进军移动领域的时候,都会遇到一个问题,是选择HTML5和还是Native(用原生代码编写的本地程序)?HTML5的前景无疑是诱人的,一句"Write once, run anywhere"就可以秒杀一切.笔者最近两年来对HTML5与Native有较为深入的研究,觉得两者之间不能仅仅是二分法来选择,还要根据企业自身的情况.团队的构成.公司的战略以及产品的特点来综合选择. HTML5的发展前景我无疑是非常看好的,各大公司也不遗余力

opencv for android-关于opencv-Android开发中mat的问题

问题描述 关于opencv-Android开发中mat的问题 在程序中只要加new Mat()语句,程序就会停止运行,去掉就能正常运行,求帮忙啊 解决方案 http://blog.csdn.net/yanzi1225627/article/details/17060301 解决方案二: 关于OpenCV的Mat画图问题[opencv学习]关于Mat释放的问题opencv中Mat的数据类型设置问题

Andriod开发中AsyncHttpClient类库学习教程

AsyncHttpClient client = newAsyncHttpClient(); client.get("http://www.google.com", newAsyncHttpResponseHandler() { @Override public void onSuccess(String response) {   System.out.println(response); } }); 通过AsyncHttpClient类的实例就可以执行网络请求,包括get.put.

Windows phone 8.1开发中解决调用真实摄像头会死机的问题

无论你是用Silverlight还是用RT的API来开发,在使用MediaCapture拍照片或录视频时,要是在模拟器上运行会万事大吉:但是,一旦放到真实手机上运行,肯定有人发现了,细心的朋友肯定发现了--不知道为什么,会经常导致手机重启,或者死机. 啊,顺便给大家说说,死机不可怕,也不用重置,也不用刷机,不会丢失资料的,你只要同时按下"音量减"+"电源"两个键,要同时按住,不要放开,大约等10多秒后,会关机,然后你再放开这两个键,这样手机就软启了,不会丢失数据.

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

Ajax程序开发中常见问题

Ajax程序开发中常见问题,看下文章或许你就少犯了许多错误了. 1.ajax,action中response返回的xml文档格式错误时,eclipse debug进入不到action中.     2.ajax缓存问题,需要加入xmlHttp.setRequestHeader("If-Modified-Since","0");便可解决.     3.如果不是ajax提交,而设置了PrintWriter out = response.getWriter();则jsp会产

界面-web程序开发中文件的下载

问题描述 web程序开发中文件的下载 在登录得主界面增加下载的链接,可以下载发布到服务器上的文件.使用的框架是spring,Struts2,ibatis. 解决方案 如果你不愿暴露文件存储路径,就用io流的方式,若果无所谓,直接把路径放在超链接上即可. 解决方案二: BufferedInputStream br = new BufferedInputStream(new FileInputStream(f)); byte[] buf = new byte[1024]; int len = 0;