中断下半部三种机制

中断下半部的三种机制。对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部?

中断下半部的处理

对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部?

这里有一些经验可供借鉴:

如果一个任务对时间十分敏感,将其放在上半部。

如果一个任务和硬件有关,将其放在上半部。

如果一个任务要保证不被其他中断打断,将其放在上半部。

其他所有任务,考虑放在下半部。

实现下半部中断的三种机制

目前使用下面三种方法:

1.软中断

2.tasklet

3.工作队列

软中断

软中断是一组静态定义的下半部接口,有 32 个,可以在所有处理器上同时执行,类型相同也可以;在编译时静态注册。

软中断的流程如下:

\

软中断执行函数如下:

asmlinkage void do_softirq(void)
{
__u32 pending;
unsigned long flags;

/* 判断是否在中断处理中,如果正在中断处理,就直接返回 */
if (in_interrupt())
return;

/* 保存当前寄存器的值 */
local_irq_save(flags);

/* 取得当前已注册软中断的位图 */
pending = local_softirq_pending();

/* 循环处理所有已注册的软中断 */
if (pending)
__do_softirq();

/* 恢复寄存器的值到中断处理前 */
local_irq_restore(flags);
}

代码之中第一次就判断是否在中断处理中,如果在立刻退出函数。这说明了什么?说明了如果有其他软中断触发,执行到此处由于先前的软中断已经在处理,则其他软中断会返回。所以,软中断不能被另外一个软中断抢占!唯一可以抢占软中断的是中断处理程序,所以软中断允许响应中断。虽然不能在本处理器上抢占,但是其他的软中断甚至同类型可以再其他处理器上同时执行。由于这点,所以对临界区需要加锁保护。

软中断留给对时间要求最严格的下半部使用。目前只有网络,内核定时器和 tasklet 建立在软中断上。

Tasklet

注意,这第二种机制是基于软中断实现的,灵活性强,动态创建的下半部实现机制。两个不同类型的 tasklet 可以在不同处理器上运行,但相同的不可以,可以通过代码动态注册。

在 SMP 上,调用 tasklet 是会检测 TASKLET_STATE_SCHED 标志,如果同类型在运行,就退出函数。

tasklet 由于是基于软中断实现的,所以也允许响应中断。但不能睡眠(我认为不能睡眠原因是它们内部有 spin lock)。

工作队列

将下半部功能交由内核线程执行,有着线程上下文环境,可以睡眠。

提供接口把需要推后执行的任务排列到队列里,提供默认的工作者线程处理排到队列里的下半部工作。

工作队列实际上是一个链表,工作线程作为死循环,链表空时休眠,不空是执行每一个工作。

各种机制的比较

下半部上下文顺序执行保障
软中断中断随意,同类型都可以在不同处理器同时执行
tasklet中断同类型不能同时执行
工作队列进程不保障,可能被调度和抢占

选择:

- 工作队列:适用于任务推后到进程上下文完成,可以休眠

- tasklet:任务接口简单,支持中断响应,但有同种类型不能同时执行的限制

- 软中断:提供的执行顺序保障最少,支持中断响应,由于同类型软中断在其他处理器可同时执行,所以要采取措施保护共享数据。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
扫地机器人结构及控制系统设计 自动清扫机器人是当今服务机器人领域一个热门的研究方向。从理论和技术上讲,自 动清扫机器人比较具体地体现了移动机器人的多项关键技术,具有较强的代表性,从市 场前景角度讲,自动清扫机器人将大大降低劳动强度、提高劳动效率,适用于宾馆、酒 店、图书馆、办公场所和大众家庭。因此开发自动清扫机器人既具有科研上的挑战性又 具有广阔的市场前景。 家用智能清扫机,包括计算机、传感器、电机与动力传动机构、电源、吸尘器、电源开 关、操作电位计等,在清扫机的顶部共设有三个超声波距离传感器;清扫机底部前方边 沿安装有5个接近开关,接近开关与超声波距离传感器一起,构成清扫机测距系统;清扫 机装有两台直流电机;在清扫机的底部安装有吸尘器机构。自动清扫机器人的功能是自 动完成房间空旷地面尤其是家居空旷地面的清扫除尘任务,打扫前,要把房间里的物体 紧靠四周墙壁,腾出空旷地面。清扫机完成的主要功能:能自动走遍所以可进入的房间 ,可以自动清扫吸尘,可在遥控和手控状态下清扫吸尘。 本文所介绍的自动清扫机器人的总体布局方案如图1所示,前后两轮为万向轮,左右两轮 为驱动轮。驱动轮设计采用两轮独立且各由两台步进电动机驱动的转向方式,通过控制 左右两轮的速度差来实现转向.考虑到机器人实际应用的实用性,本驱动系统设计成一个 独立的可方便替换的模块,当机器人驱动系统发生故障时,只需简单步骤就可以对驱动 部分进行替换.同时为了机器人能够灵活的运动,从动轮选用万向轮. 下图为自动清扫机的三维立体图: 自动清扫机器人车箱体采用框架式结构。从下至上分隔成三个空间:第一层装配各运 动部件的驱动电机、传动机构;第二层为垃圾存储空间;第三层装配机器人控制系统、接 线板、电源电池、开关等。 自动清扫机器人控制系统硬件主要是以单片机AT89C51作为核心,辅助其外围电路、 电机驱动电路、传感器检测电路以及红外遥控电路等,各模块在单片机的控制下,相互协 调工作,保证自动清扫机器人各种功能的实现.该控制系统框图如图2所示。传感器在清扫 机器人上的布置如图下所示,图中红色的圆点代表六个红外传感器的位置。 下图为清扫机的硬件系统: 步进电机作为执行元件,广泛应用于各种自动化设备中。步进电机和普通电动机不同 之处在于它是一种可以将电脉冲信号转化为角位移的执行机构,工作中传递转矩的同时 还可以控制角位移或速度。本研究中采用两台步进电机分别驱动两个驱动轮,通过通电 方式的不同使自动清扫机器人的行走机构达到前进、后退、左转、右转的运动姿态。自 动清扫机器人的吸尘器则采用直流电机(H桥式电路)驱动。 下图为步进电机驱动电路: 采用以AT89C51单片机为核心的红外接收电路和步进电机驱动电路.红外遥控器发射 不同的码值来控制步进电机的正转、反转、加速减速以及启动停止。单片机通过对红外 信号的解码来实现步进电机的变速。红外发射器原理图如下所示: 设计行走功能模块程序设计系统选用了图 3所示的行走方案.程序设计时要考虑:吸尘器在外圈行走时, 为了避免接近开关中断对程序运行的干扰, 应对接近开关的中断处 理程序做 相应处理.由于吸尘器两动力轮的中心与车体中心不重合, 故采用以一轮为中心的旋转方式并通过检测转弯标志位 ( 1或 0)来判断转向.在墙角转弯时处,根据吸尘器外形的几何尺寸计算吸尘器遇墙停止后, 后退再转弯的时间。吸尘器内圈行走时的转弯依靠转弯设定值实现。当超声波传感器 1的值小于等于设定值时, 吸尘器转弯。考虑到超声波传感器的最小量程为 0. 5 m, 第一圈内圈行走的转弯设定值设定为 50 cm, 以后每圈的转弯设定值递增 30 cm。吸尘器单向行驶至转弯结束的过程称为一次单向清扫过程。若某次单向行驶结束后 检测到超声波传感器 1的值小于转弯设定值, 则吸尘器原地再次转弯, 然后前进至墙停止, 整个房间清扫完毕。 设计躲避障碍物功能模块程序设计避障总规则: 利用超声波实测值与已测得的房间长 (宽 )值的比较, 判断某次单向清扫途中是否有障碍物。若有障碍物: 行走时若为左转, 采用左避让规则; 行走时若为右转, 采用右避让规则。障碍物避开后按行走规则继续行进; 若无障碍物: 按行走规则继续行进, 在转弯前应判断是否有足够的空间供机器人吸尘器转弯。若吸尘器可以转弯, 则转弯, 本次单向清扫完毕; 若吸尘器不能转弯, 说明下次单向清扫起始点处有障碍物, 后退,避开障碍物后再转弯, 前进至通过障碍物边线后, 本次单向清扫完毕。避障功能是在行走功能基础上实现的, 分为内圈避障程序设计和外圈程序设计。清扫完毕的判断方案: 用外圈行走结束后清扫区域的精确长、宽值与内圈行走轨迹宽度 30 cm相除, 商即为长、宽方向上各自所需的单向清扫次数, 有余数则说明还有一块宽度小于30 cm 的矩形区域需

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值