历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-09-23 来源:eefocus

一.潜在的危机

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,则死区时间接近中断间隔时间,接收过程是可靠的。


推荐阅读

史海拾趣

HI Microwave Technology Limited公司的发展小趣事

HI Microwave Technology Limited自2004年在中国成立以来,便以“Hertz Infinite”(赫兹无限)为愿景,致力于将产品范围扩展至30 KHz至110 GHz+(针对GaAs、HEMT、PHEMT和MMIC基产品)以及220 GHz+(针对毫米波产品和子系统)。这一宏伟愿景不仅为公司指明了发展方向,也激励着每一位员工不断追求技术创新和产品卓越。在初创阶段,HI Microwave通过引进国际先进的生产设备和技术人才,迅速在微波通信领域站稳脚跟。

DMC Tools公司的发展小趣事

DMC Tools公司高度重视人才培养和引进。公司定期举办各种培训活动,提高员工的技能水平和综合素质。同时,公司还积极引进高端人才,为公司的技术创新和产品研发提供有力支持。这些人才为公司的发展注入了新的活力,推动了公司的持续进步。

BOT公司的发展小趣事

广西来宾电厂是中国第一个国家正式批准的BOT试点项目。该项目由法国电力国际和通用电气阿尔斯通公司作为项目公司的主要股东,总投资为6.16亿美元。这个电厂的装机规模为72万千瓦,安装了两台36万千瓦的进口燃煤机组。在长达18年的特许经营期内,该项目为广西地区提供了稳定的电力供应,同时也为项目公司带来了可观的投资回报。随着时间的推移,该项目成为了BOT模式在中国成功应用的典范,为后来的类似项目提供了宝贵的经验。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

自1964年起,CDIL便踏上了半导体制造的先驱之路。当时,电子产业正处于蓬勃发展的初期,CDIL凭借对技术的敏锐洞察和不懈追求,迅速成为印度乃至全球半导体制造领域的佼佼者。其硅芯片和器件的制造质量和技术水平均达到了世界级标准,为印度电子产业的发展奠定了坚实基础。

Avel Lindberg公司的发展小趣事

CDIL采用无晶圆厂模式生产分立半导体器件,专注于功率半导体和高可靠性组件的研发与生产。这一模式使CDIL能够更加灵活地应对市场变化,降低生产成本,提高产品竞争力。同时,公司还采用自己的封装技术,确保产品能够满足太空应用等严苛环境的严格标准。

Abilis Systems公司的发展小趣事

CDIL采用无晶圆厂模式生产分立半导体器件,专注于功率半导体和高可靠性组件的研发与生产。这一模式使CDIL能够更加灵活地应对市场变化,降低生产成本,提高产品竞争力。同时,公司还采用自己的封装技术,确保产品能够满足太空应用等严苛环境的严格标准。

问答坊 | AI 解惑

联发科PK晨星,谁将是台股股王

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 联发科作为台股股王,是全球前五大IC设计公司,而作为新兴的台湾未上市公司的股王晨星的实力也不容小看,笔者现将两大公司进行一个简单的对比。  联发科 晨星    董事长蔡明介 ...…

查看全部问答>

请教MAX267滤波器芯片应用问题

    MAX267是专用的带通滤波器芯片,我想要得到中心频率信号10000倍的增益,所以用两片267级联,每片有两个二阶滤波器,每个的Q都是10,时钟信号都一样1.83KHz,中心频率为11Hz,结果得到一放大的正弦波,放大倍数差不多是10000,但是幅值 ...…

查看全部问答>

PCB连线

请问高手们   其他元件是可以连线的 可是自己制作的封装  焊盘的线 竟然只能在封装里面画  不能划到外面去 为什么呢?…

查看全部问答>

CAN分帧接收问题

单帧接收正常,多帧情况下分帧接收时,只能重复收到第一帧,程序如下,数组时分配的是一个足够大的静态数组,不知道怎么回事? //ID号表示:主机, 控制1,查询1   表示接收的是查询1的数据      if (RxMessag ...…

查看全部问答>

终于熬夜将Alientek开发板的资料上传了一小半!

终于熬夜将Alientek开发板的资料上传了一半! 下一半这个周末上传,周末亚运多放一天假! Alientek开发板所有的代码都是原创(当然不排除有些外设驱动程序是 移植的网上的代码进行修改),一共28个实例,由正点原子完成, 不完全手册一共 ...…

查看全部问答>

请教5509的bootloader问题

使用5509,通过MCBSP0以SPI外接一个串行flash 程序硬件仿真正常, 但却无法将已经转换为hex格式的程序下载到flash里面, 报错是flashburn显示flash和ccs没有联通。 我想请教的包括: 以mcbsp0口链接flash的时候, flash的逻辑地址,物理地址 ...…

查看全部问答>

【求助】f149的SPI收数据问题请教大家!

我写了个SPI的程序来读MMC卡,用软件模拟SPI读写正常,用硬件SPI口能发送数据,就是不能收到数据不知道为什么,下面是我的软件SPI程序和硬件SPI程序和初始化,希望大家能帮忙看看出了什么问题,非常感谢,程序如下!(都采用SPI0口的三根线)P3.3,P ...…

查看全部问答>

MLX90615与MSP430单片机连接

RT,哪位大哥用过MLX90615红外温度传感器与MSP430单片机,求连接图和驱动代码,不胜感激!…

查看全部问答>

论坛高手帮个忙

data verification failed at address 0x3fffc0please verify target memory and memory map   怎么解决,请问?高手帮帮忙,…

查看全部问答>

1-9999秒倒计时程序

1-9999秒倒计时程序…

查看全部问答>