历史上的今天

今天是:2024年09月23日(星期一)

正在发生

2019年09月23日 | UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

发布者:ShimmeringStar 来源: eefocus关键字:UART0  串口编程  OS—II 手机看文章 扫描二维码
随时随地手机看文章

一.潜在的危机

1.在uc/os操作系统中设计串口编程时,由于ISR和多个任务并发执行,情况比较复杂。尤其是接收状态为被动状态时,只能靠串行口中断来接收数据。

2.在进行串行通信时,双方遵循相同的通信协议。由于波特率不变,因此相邻两次串口中断的间隔时间基本固定。

3.在以下两种情况时会使接收过程出现错误:

(1)第一种情况是系统关中断的最长时间大于相邻两次串行接收中断的间隔时间,这时将可能导致遗漏一次中断,造成数据丢失。

(2)实时操作系统内核的关中断的最长时间是已知的,通常很短,它不是问题关键。

(3)系统关中断的最长时间往往是由用户软件造成的,例如:我们编写的中断服务函数过于复杂,导致系统为了处理中断服务函数而导致关中断时间过长。

(4)第二种情况是在串口程序正在运行期间有一个比它优先级更高的中断程序中断了串口程序。从而造成数据丢失。

(5)在这里提一个概念:把不能响应串口接收中断的这段时间称为“死区”。因此解决问题的关键是:死区时间不能比相邻两次串口中断的间隔时间长。


二.如何解决危机

l  任务在访问比较耗时的共享资源时不要采用关中断的方式(改成互斥信号量)。

l  ISR要尽可能简短,将可以剥离的工作转交关联任务去完成。

(此处的设计方式和Linux中把中断分为上半部分,和下半部分的原理有着同工异曲的含义)

采用上面的方法来缩短死区时间。

另一中方法是:

加长相邻两次串口接收中断的间隔时间。

l  方法一:降低波特率,这个方法简单,但因此也导致通信效率的下将。其次,一般在进行串口编程时,波特率一般是固定的。因此此方法一般不太适用。

l  方法二:在波特率不变的情况下减少中断次数,达到加长相邻两次串口接收中断间隔时间的效果。

ARM芯片的串口具有16字节的缓冲区,可以设置每接收1,4,8,14字节产生一次中断。如果设置每接收8字节中断一次,则比1字节中断一次要延长8倍的中断间隔时间。

Tiger-John说明:

l  在使用有数据缓冲功能的串口编程后,比较容易满足相邻两次串口接收中断的间隔时间大于死区时间的条件,但仍然存在潜在的危险。

想要可靠的避免这场危机:必须要满足以下条件

(1)相邻两次串口接收中断的间隔时间必须大于系统死区时间

(2)接收缓冲区的空闲时间必须足够存放在“死区”时间内接收到的新数据。

 若设置每接收8字节中断一次,则空闲空间也为8字节。由于死区时间比中断间隔时间短,故接收的新数据必然少于8字节,才不会出现数据丢失现象。

即在满足中断间隔时间大于“死区”时间的前提下,将中断条件设置为接收缓冲区的1/2,则死区时间接近中断间隔时间,接收过程是可靠的。


关键字:UART0  串口编程  OS—II 引用地址:UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机

上一篇: UART0串口编程(一):通信协议设计;RS232标准
下一篇:各种ARM仿真器接口图

推荐阅读

   虽然这一篇报告命题为「两岸半导体产业比一比」,但其实并没有比拼的意思。 两岸半导体产业最近几年都是处在相互竞合的状态,既是竞争对手,但在某方面又需要合作,在某些程度上可以说是在同一条船上的。例如说,中国大陆的IC设计公司会向台湾晶圆厂投片、大陆晶圆厂也会委托台湾封测业者进行IC封装测试业务;另一方面,台湾芯片业者为了在地供货的...
(文章来源:中科罗伯特机器人学院) 科技的发展使得工业机器人的技术也不断的进行研发,为了适应各种不同的工作,工业机器人的种类也是越来越多,很多人在选择工业机器人的时候总是很迷茫,那今天我们带大家来了解一下工业机器人的分类,帮助大家以后进行选择。 工业机器人是一种自动的、位置可控的、具有编程能力的多功能机械手,这种机械手能够借助...
示波器不能一直连续的去捕获波形并保存下来,如果在自动的模式下,示波器是不停的刷新波形数据的。如果需要捕获一段时间内信号的连续波形。您可以按照下面的步骤设置:1、将存储深度设置到最高,2、将时基调到合适的档位,根据您要观测的时间来设置,例如您想观察1S的时间,那么将时基设置到100ms/Div,这时整个屏幕上的时间就是100ms*14格(DS2000)=1.4s....
ROHM开发出防水等级达IPX8的小型高精度气压传感器IC“BM1390GLV”非常适用于白色家电和工业设备等对防水性能有要求的应用全球知名半导体制造商ROHM(总部位于日本京都市)面向白色家电、工业设备和小型物联网设备,开发出防水等级达IPX8*1的小型高精度气压传感器 IC“BM1390GLV(-Z)”。 在智能手机和可穿戴式设备等应用中,气压传感器已被广泛用于获取...

史海拾趣

问答坊 | AI 解惑

看到一篇文章, 转帖过来

是转帖哦 本人创业10年,9死1生,占过便宜吃过亏,辛苦过也懒惰过,看到这个论坛里面充斥着大量的没有创业经验的人在指导别人创业,另有大量由于缺乏思路赔光家底的故事,本人非常痛心,本着救人加吹牛的心态特将本人独家秘籍和盘托出,以免大家少走弯路 ...…

查看全部问答∨

64个按键

本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 64个按键  …

查看全部问答∨

大量复杂VHDL程序范例

大量复杂VHDL程序范例不同方式实现的8线-3线编码器 D触发器 奇偶校验 多路选择器 多输入与门 编码器/译码器 D触发器 分频器BCD-七段译码器 RAM/ROM ROM初始化 移位寄存器 状态机 LED显示译码 加法器 乘法器 多路选择器 寄存器 ...…

查看全部问答∨

問,at24c02頁寫方式,每頁一次最多可以寫幾個字節?

我試了,超過8個就出錯,好像把前面寫的覆盖了!…

查看全部问答∨

关于S3C2443开发板

本人现在正在预研一个项目,硬件平台是SAMSUNG S3C2443,我做2440的BSP开发两年,OS是WINCE5.0,现在一下跳到2443,心里没底,主要是要加ATA和WIFI功能,目前对2443了解不是很多,仅仅是粗略的读过DATASHEET,目前,计划买个开发包(重点是驱动), ...…

查看全部问答∨

能否用汇编语言编程直接读写U盘?

需要哪些资料?是不是和COM1:,COM2:一样?…

查看全部问答∨

请教关于学习注册表的一点困惑

小弟正学习注册表的操作, 但是一直有个问题不明白, 注册表能做什么, 我也知道很多应用程序,驱动,系统配置信息都存在里面, 但还是不理解注册表发挥作用是什么机制,在什么时候会操作注册表, 各种信息为什么要存入注册表,它到底为什么存 ...…

查看全部问答∨

想做一个遥控控制定时器的东西,不用太复杂,给推荐个遥控功能的芯片。

好像说的不够专业啊,能明白就好了。我自己找了找,快花眼了,太多了,不知道该用哪个。…

查看全部问答∨

拜托大家看看我这个出错信息是怎么回事(VHDL做寄存器组)

编译reg_aggr.vhd总是出现这个错误 Error:Termination notification:errors in ...\\reg_aggr.vhd prevent from further processing ------------------------------------------reg_aggr.vhd----------------------------------------------- ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved