中断函数和中断处理函数是不是同一个东西??急!!!!!

testweb 2008-07-04 10:56:01
请问中断函数和中断处理函数指的是同一个东西??
我在有些文章看到中断函数没有返回值和参数,但是中断处理函数显然是有返回值和参数的
...全文
931 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2008-07-05
  • 打赏
  • 举报
回复
我只想澄清一些概念,不想做一些无意义的咬文嚼字。

(1)当你在做一个计算机(嵌入式)系统时,在为系统做初始化时往往会有设置中断向量的操作。
当你设置好某个特定的外部事件(比如定时器超时)的中断向量后,当你允许(使能)了该设备(定时器),那么等到特定时刻(定时器超时),
外设(定时器)会向你CPU核心发送外部中断请求,如果此时没有对它进行任何屏蔽的话,并且也没有比它优先级更高的中断事件处于未决状态的话,
那么此时该事件的中断发生。
为了能够对该事件处理,必须要有一个处理该中断事件的函数入口地址,称该地址为中断向量
因此中断向量位置一般是由CPU(硬件)来决定的,而里面对于特定中断事件的处理可以由开发人员进行自由地软件编程。
但是,在处理完该中断事件后,也就是要返回该中断向量函数,必须要使用特殊的中断返回指令(在X86系统中为IRET;在Blackfin指令集中为rti)。

问题1:为什么说中断向量函数不需要有返回值?
回答: 因为中断事件是异步发生的。当系统在接受一个中断事件,对它进行处理,完了之后,如果有返回值,那么由谁来处理这个返回值呢?
况且一个中断可能会发生在不同的线程中,或者在上下文切换之际发生(这种情况可能会比较少,有些系统在做上下文切换时,往往会屏蔽所有
可屏蔽中断。但是上下文切换也往往存在临界去【Critical Region】和非临界区)。因此对于中断向量函数的返回值是无法进行处理的。
而如果说要以调用普通函数的方式为它传递参数就更不可能了。你只能为中断向量函数提供某种区域(其所能访问的)的相对全局变量,
对该变量设定值,然后在该中断向量函数中进行处理;或者是通过写某个相对全局变量的值,以此作为返回。
比如:

volatile int argument = 0, retValue = 0; // the key word "volatile" here is necessary

// The following pragma is pseudo, that only describes the effect of the interrupt vector function
#pragma interrupt_vector(TIMER)
// @0x00001000 the address of the vector for timer event
void timer_vector_handler(void)
{
save_context(); // Save the context(almost all the general registers)
retValue = toggle_led(LED1, &argument); // According to argument, If argument is 0, turn it off; Otherwise, turn it on.
// Then, the value of argument is toggled.
// retValue is a return vbalue that indicates whether the operation is successful or not.
reset_timer(); // clear the timer interrupt status and reset the timer.
restore_context(); // resotre the context saved before
// iret(); // Because the function is predeclared as #pragma interrupt_vector,
// the compiler may automatically generate "iret" instruction at the end of the fucntion
}



问题2:那么一些带有参数或返回值的中断处理函数又是什么呢?
回答: 这些中断处理函数一般是基于操作系统下的用户自定义处理函数。比如说,在Windows系统下,应用程序编写者可以通过使用一个定时器来处理很多事情。
但是应用程序用户别指望直接使用内核提供的中断向量函数对定时器进行操作,相反,操作系统对于定时器有个定时器事件的管理。
比如说定时器1可以观察64个状态值,一旦某个值处于超时状态,就会调用其相应的由应用程序编写者先前所注册的中断处理函数进行回调。而这些用户自定义函数可以有返回值或带有参数。
比如,用于进行Windows桌面程序编程的MFC库中的SetTimer函数:

UINT SetTimer(
UINT nIDEvent,
UINT nElapse,
void ( CALLBACK* lpfnTimer )(HWND, UINT, UINT, DWORD) = NULL
) throw();

上面第三个参数就是指向用户定时中断处理函数的指针,并且带有4个参数。

hai040 2008-07-04
  • 打赏
  • 举报
回复
有点虚,感觉是一样的,印象中是没有返回值的
只能google,是一样的,下面的贴里还有把它叫成“中断服务函数”的
一般来说是没有返回值的

http://www.dzsc.com/dzbbs/20050921/200765185731390496.html
中断处理函数能带返回值吗?

参数可以有
aozhi 2008-07-04
  • 打赏
  • 举报
回复
中断函数没有返回值,可以有参数。但出于效率的考虑参数不能是浮点型。lz概念错误。
king_water 2008-07-04
  • 打赏
  • 举报
回复
一个东西,不能带返回值,可以用全局变量
K行天下 2008-07-04
  • 打赏
  • 举报
回复
楼主好像发了2遍啊!
http://topic.csdn.net/u/20080704/11/813c7136-e91e-4ff8-a3db-d95083baf72a.html
内容概要:本文围绕主动配电网鲁棒故障恢复问题展开研究,重点实现了两阶段鲁棒优化模型与确定性模型的Matlab代码复现,属于IEEE顶刊级别科研成果的高质量复现工作。研究针对配电网在故障情况下面临的多重不确定性因素,构建了包含故障隔离、网络重构、负荷恢复等关键环节的优化模型,采用YALMIP等工具进行建模与求解,提供了完整的仿真代码与详实的实验结果分析,充分验证了所提方法在提升主动配电网韧性、增强供电恢复能力方面的优越性能。研究不仅展示了理论建模过程,更强调实际编程实现与仿真调试,有助于深入理解鲁棒优化在电力系统中的应用机制。; 适合人群:具备电力系统分析基础和一定Matlab编程能力的研究生、高校科研人员以及从事智能电网、配电网自动化等相关领域的工程技术人员。; 使用场景及目标:① 学习并掌握两阶段鲁棒优化在主动配电网故障恢复中的建模思想与求解流程;② 复现高水平期刊研究成果,提升科研仿真与论文写作能力;③ 将所学方法应用于配电网韧性评估、应调度决策、网络动态重构等实际工程问题的研究与开发; 阅读建议:建议结合文中提供的网盘资源下载完整代码,按照目录结构循序渐进地学习,重点关注模型构建的数学逻辑与Matlab实现的技术细节,通过亲自运行和调试代码加深对算法原理与优化过程的理解,并可在此基础上拓展至含分布式能源、多微网协同等更复杂场景的故障恢复研究。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 gmm-em-clustering 高斯混合模型(GMM 聚类)的 EM 算法实现。 高斯混合模型简介 高斯混合模型(GMM, Gaussian Mixture Model)是多个高斯模型的线性叠加,高斯混合模型的概率分布可以表示如下: $$P(x)=\sum{k=1}^K \alphak \phi (x; \muk, \Sigmak)$$ 其中,K 表示模型的个数,αk 是第 k 个模型的系数,表示出现该模型的概率,φ(x; μk, Σk) 是第 k 个高斯模型的概率分布。 这里讨论的是多个随机变量的情况,即多元高斯分布,因此高斯分布中的参数不再是方差 σk,而是协方差矩阵 Σk 。 我们的目标是给定一堆没有标签的样本和模型个数 K,以此求得混合模型的参数,然后就可以用这个模型来对样本进行聚类。 GMM 的 EM 算法 EM 算法是通过不断迭代来求得最佳参数的。 在执行该算法之前,需要先给出一个初始化的模型参数。 我们让每个模型的 μ 为随机值,Σ 为单位矩阵,α 为 1⁄K,即每个模型初始时都是等概率出现的。 EM 算法可以分为 E 步和 M 步。 E 步 直观理解就是我们已经知道了样本 $xi$,那么它是由哪个模型产生的呢? 我们这里求的就是:样本 $xi$ 来自于第 k 个模型的概率,我们把这个概率称为模型 k 对样本 $xi$ 的"责任",也叫"响应度",记作 $\gamma{ik}$,计算公式如下: $$\gamma{ik} = \frac {\alphak \phi(xi; \muk, \Sigmak)} {\sum{k=1}^K \alphai \phi(xi; \...
内容概要:本文介绍了GitHub上近期备受关注的5个高星JavaScript相关项目和技术实践,涵盖JS新特性、CSS现代样式技术、Vue 3性能优化、浏览器调试技巧以及VSCode实用插件。重点内容包括structuredClone深拷贝、数组新型非突变方法(如toSorted、with、findLast)、惰性函数优化机制;CSS滚动吸附、容器查询与字体自适应、:has():is():where()等新型选择器;Vue 3的v-memo指令用于渲染优化及watch、customRef等响应式特性;Chrome调试中的$0、XHR重放等功能;以及i18n Ally和koroFileHeader等提升开发效率的VSCode插件。; 适合人群:前端开发者,尤其是熟悉JavaScript、CSS及Vue框架,希望提升开发效率与代码性能的中级研发人员;; 使用场景及目标:①掌握JavaScript最新内置方法以提升代码简洁性与性能;②利用现代CSS特性实现更灵活的布局与样式控制;③在Vue项目中通过v-memo等手段优化渲染性能;④借助开发工具提升调试与国际化开发效率;; 阅读建议:此资源融合语言新特性、框架优化与工具链实践,建议结合实际项目逐步尝试各项功能,重点关注兼容性说明并验证应用场景,以充分发挥新技术优势。 https://download.csdn.net/download/2601_95955032/92855128 24直播网:jzlzgy.com 24直播网:kaixijiudianjiaju.com 24直播网:m.jiaxingyaxin.com 24直播网:m.hbbsjxzz.com 24直播网:m.tgk-china.com

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧