内核提供的中断接口包括注册和注销中断处理程序,禁止中断,屏蔽中断线,以及检查中断系统的状态。
要分配的中断号,通常是预先设计固定的。某些情况可以通过探测获得,如PCI。
在设备驱动程序的初始化阶段,必须通过request_irq()函数将对相应的中断服务例程挂入中断请求队列,注册并激活一个中断处理程序,以便处理中断。转载,仅供参考。
如果我的回答没能帮助您,请继续追问。
参考和感谢zhzht19861011:FreeRTOS队列分析
队列是主要的任务间通讯方式, 可以在任务与任务间、中断和任务间传送信息。
大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区。
发送到队列的消息是通过拷贝实现的,这意味着队列存储的数据是原数据,而不是原数据的引用。
API函数允许指定阻塞时间。
队列的基本用法:
创建队列API函数xQueueCreate(),但其实这是一个宏,只是定义的像函数而已。真正被执行的函数是xQueueGenericCreate(),我们称这个函数为通用队列创建函数。
参数ucQueueType只是用来可视化跟踪调试用 。
首先调用函数prvAllocateQueueMemory分配队列结构体和队列项存储空间,结构体和队列项在存储空间上是连续的。
分配成功后初始化成员,然后调用函数xQueueGenericReset()初始化剩下的结构体成员。
假设我们申请了3个队列项,每个队列项占用4字节存储空间(即uxLength=3、uxItemSize=4),则经过初始化后的队列内存如图所示。
队列项入队也称为投递(Send),分为带中断保护的入队 *** 作和不带中断保护的入队 *** 作。每种情况下又分为从队列尾部入队和从队列首部入队两种 *** 作,从队列尾部入队还有一种特殊情况,覆盖式入队,即队列满后自动覆盖最旧的队列项。
这个函数用于入队 *** 作,绝不可以用在中断服务程序中。
调用函数prvCopyDataToQueue()将要入队的数据拷贝到队列。这个函数处理三种入队情况,第一种是队列项大小为0时(即队列结构体成员uxItemSize为0,比如二进制信号量和计数信号量),不进行数据拷贝工作,而是将队列项计数器加1(即队列结构体成员uxMessagesWaiting++);第二种情况是从队列尾入队时,则将数据拷贝到指针pxQueue->pcWriteTo指向的地方、更新指针指向的位置、队列项计数器加1;第三种情况是从队列首入队时,则将数据拷贝到指针pxQueue->u.pcReadFrom指向的地方、更新指针指向的位置、队列项计数器加1。如果是覆盖式入队,还会调整队列项计数器的值。
队列结构体中有两个成员跟队列上锁有关:xRxLock和xTxLock。这两个成员变量为queueUNLOCKED(宏,定义为-1)时,表示队列未上锁;当这两个成员变量为queueLOCKED_UNMODIFIED(宏,定义为0)时,表示队列上锁。
电脑死机大体分两类,一类是硬件错误造成的,另一类是软件错误造成的。大量的死机是软件错误。硬件错误有偶然的和必然的。电脑因干扰会偶然出错,这样的死机属于正常死机。这样的出错不一定立即造成死机,很多盘上的链交叉也是偶然出错造成的。规律性很强的死机往往是真正的硬件故障,普通用户无法处理,一定要送修。
蓝屏是显示硬件错误,但这样的硬件错误往往是硬件驱动造成的,实际上还是软件出错。花屏是显示部分出问题,以硬件故障为主。
软件造成的死机,表现出来的往往不是失控就是黑屏。软件错误有可能是硬件偶发错误造成的,但主要是软件编程中的错误,也就是所谓BUG造成的。编程总是难免会有各种BUG,有些是功能性的,只是不能达到某些目的;有些是实质性的严重问题,就会造成溢出或死循环,引起死机。
病毒木马造成的死机实际上还是编程者的软件BUG。病毒木马也是软件,不但免费,而且是强制使用。这类软件是流氓软件,不需要用户的反馈,不提供任何服务,对其中的BUG也不承担任何责任。病毒木马的编程者往往是些初学编程的捣乱分子,水平很低,自命高手,热衷卖弄,作品中BUG无数,经常引起电脑的不正常现象,甚至造成死机。死机不是病毒木马的主观愿望,死机对病毒木马的运行同样没什么好处,不但不能继续运行,还会因为暴露了自身而招致剿杀。
真正的间谍软件是高级编程人员制作的,占用资源少,运行速度快,极少出现BUG,隐藏在电脑中很难发现蛛丝马迹,神不知鬼不觉地窃取资料。这样的间谍软件是有专门目标的,不会轻易出现在普通用户的电脑里。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)