和记娱乐


网站导航

联系我们

和记娱乐

联系人: 

电 话:021-64057486

公司网址:http://www.happy123456789.com

   址:成都市松江区漕河泾松江新兴产业园区研展路丰产支路55号B座803室

邮编:201165


通信知识

您的当前位置: 和记娱乐主页 > 通信知识 >

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

发布日期:2019-11-21 09:12 来源:和记h88 发布人:和记娱乐 点击:

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

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

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

      和记娱乐,和记h88,h88平台官网