ARM9中断中(C语言)如何实现复位功能,而不是返回中断前的状态

作者&投稿:职梁 (若有异议请与网页底部的电邮联系)
单片机进入中断程序后怎么让它直接回到程序一开重新执行,而不是回到中断点继续执行~

上网搜吧,我原来也弄过,是在网上搜的,应该还可以搜到,需要在中断里修改堆栈,具体的忘了。建议用STC等支持软复位的单片机,比自己用特殊方式实现的要安全稳定。

硬件电路上用一个I/O口连接到复位端,然后直接在单片机的中断程序的最后加一个控制该I/O口的电平的指令就好了。或者我百度的其他人的资料:
这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。
在keil C51下面可以这样实现:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ();
}
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。

1,有些ARM处理器有复位寄存器,只要在中断函数里向复位寄存器写规定的数值就会产生复位。
2,有些ARM处理器带看门狗WatchDog,只要在中断函数里启动软件狗,并且进入死循环不喂狗,看门狗会产生复位信号。
3,上述硬件都没有ARM处理器,让硬件工程师加一个软件复位电路,可以用一个GPIO引脚触发复位的。然后在中断函数里改变GPIO引脚状态触发复位。


求按要求用C语言作的一个计算器
if(*(p+d)=='*') B[3][c]='*'; if(*(p+d)=='\/') B[3][c]='\/'; if(*(p+d-1)==')'&&*(p+d-2)==')') { B[0][c]=')'; B[1][c]=')'; } if(*(p+d-1)==')'&&*(p+d-2)!=')') B[1][c]=')'; for(e=d-1;*(p+e)<'0'||*(p+e)>'9';e...

请教DOS高手 在DOS下搜索文件是怎样打命令的呢?
上面的例子中,f i n d命令匹配到了当前目录下的所有普通文件,并在- e x e c选项中使用ls -l 命令将它们列出。 为了在\/ l o g s目录中查找更改时间在5日以前的文件并删除它们,可以用: $ find logs -type f -mtime +5 -exec rm {} \\; 记住,在s h e l l中用任何方式删除文件之前,应当先...

Microsoft(C) Register Server是什么??
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 Dllname was loaded, but ...接着下载解码器,如Real Alternative,安装后就能用WMP播放RM格式的影音文件了。七、让WMP9的播放器出现...regsvr32 "c:\\program files\\common files\\system\\ado\\msado15.dll"regsvr32 mshtmled.dll regsvr32 \/...

如何自学嵌入式?
永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习。 在后续的“裸机开发”中,会让你继续练习...你会知道,中断发生时,每一个寄存器的值都要小心对待; 等等等。 你掌握了ARM+Linux的裸机开发,再回去...这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。 一款芯...

<张国荣演唱会>迅雷下载
rtsp:\/\/www.cash.org.hk:554\/9_b.rmWindows Media format: mms:\/\/www.cash.org.hk\/9.wmv<为你钟情>咖啡室开幕盛况 Opening of wei nin zhong ...http:\/\/www.leslietong.com\/c.htm·跨越97演唱会(上)·跨越97演唱会(中)·跨越97演唱会(下)·2000热情演唱会(上)·2000热情演唱会(下)·张国荣89...

在c语言中根号如何表示,谢啦
在C语言中,可以用sqrt()函数表示根号,参数类型为double类型,使用前需要先引入头文件math.h。以下列代码为例:include<stdio.h> include<math.h> void main(){ double i = 9;printf("%f\\n",sqrt(i));return 0;}

软考中级软件设计师要学会哪种程序设计语言(我只学过C,C++,汇编)
(7) 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中的一种程序设计语言; (8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识; (9) 熟悉掌握软件设计的方法和技术; (10) 掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识; (11) 了解信息化、计算机应用的基础知识; (12) ...

[Linux]编写一个简单的C语言程序,编写Makefile文件。
.c.a $(COMPILE.c) –o $% $< $(AR) $(ARFLAGS) $@ $% $(RM) $% 三 特殊目标 在后缀规则中使用了特殊目标.SUFFIXES,用来指定新增的后缀规则。make还提供了几个特殊目标来设置make的行为,下面为一些特殊的目标:  .IGNORE make在执行命令行时,如果返回的是错误码,make的缺省动作是停止并退出。

C语言程序设计实验报告
1,若程序定义为三行三列的矩阵,并在主函数中键盘赋值。请编写函数juzhen(int a[][3],int n),函数功能是:使矩阵左下角元素中的值乘以.例如:若矩阵中的值为:1 9 7 2 3 8 4 5 6 n=3,则矩阵值变为:1 9 7 6 9 8 12 15 18 注:二维数组下三角元素每行最后元素的列标和该列的...

我下了一个极品飞车9,里面有3个ISO,该如何使用呢?
注:有的碟子里有个crack目录,安装完游戏后请把里面的文件覆盖源文件有的游戏用了starforce加密,如果是用1,2加密,就在虚拟光驱中打开RMPS选项用3加密的话,只有把把物理光驱所在的IDE端口在BIOS中屏蔽或拔电源线.许多会员下载好游戏后遇到了安装问题,现在详细说明如下,免得我老是重复回复同样的内容了:1.一般下载的...

海伦市15665915285: ARM9中断中(C语言)如何实现复位功能,而不是返回中断前的状态 -
圭符仙特: 1,有些ARM处理器有复位寄存器,只要在中断函数里向复位寄存器写规定的数值就会产生复位. 2,有些ARM处理器带看门狗WatchDog,只要在中断函数里启动软件狗,并且进入死循环不喂狗,看门狗会产生复位信号. 3,上述硬件都没有ARM处理器,让硬件工程师加一个软件复位电路,可以用一个GPIO引脚触发复位的.然后在中断函数里改变GPIO引脚状态触发复位.

海伦市15665915285: 单片机如何用C程序复位? -
圭符仙特: 可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址. ((void (code *) (void)) 0x0000) (); 下面的例子将实现软件自复位void reset (void) { ((void (code *) (void)) 0x0000) (); } void main (void) ...

海伦市15665915285: 关于ARM中断的C语言问题 -
圭符仙特: pISR_EINT8_23=(U32)key_handler;这1句是安装中断变量吧,也就是把key_handler函数的地址存入中断向量数组,以便中断产生时调用key_handler函数

海伦市15665915285: ARM中的异常中断是如何实现进入中断程序的,比如如何进入void -- irq Timer1 - ISR( void )定时器中断 -
圭符仙特: arm在发生中断的时候会固定跳到0x18处执行一段code,所以你需要在0x18处放一段你自己的code,而我们通常的做法就是在这个放一个code使其执行0x38处的中断handler,这个handler是我们自己定义的,一般在这个handler里面会有b code_ISR之类的语句,跳转到c语言中的 code_ISR函数,然后在这个函数里面再判断是那种类型的irq,比如说是timer,那么就跳转到Timer1_ISR这个函数里面.就算是执行啦.

海伦市15665915285: 单片机疑问:用c语言怎么实现中断结束后不返回原断点处? -
圭符仙特: 可以根据中断返回的值一层一层地回到需要跳转的地方.比如返回0的话表示函数正常执行结束,返回2的话表示从函数里面跳出来需要跳到其他地方,然后依次类推,稍微修改下程序可以达到问题所需要的效果.

海伦市15665915285: ARM中的异常中断是如何实现进入中断程序的,比如如何进入... -
圭符仙特: ARM中的异常中断是如何实现进入中断程序的,比如如何进入... swi(0x00) void SwiHandle1(int Handle);其实没有函数体,执行这个语句后就自动把Handle的值赋给了R0,接着执行下面的代码.__swi(0x00)是软件中断,0为软中断指令中的24...

海伦市15665915285: 单片机外部中断0,发生中断并执行完中断程序后,怎样返回主函数?用c语言.. -
圭符仙特: 执行完成之后自动返回主函数. 中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序. 中断是单片机实时地处理内部或外部事件的一种内部机制.当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去.

海伦市15665915285: C语言中断怎么调用?? -
圭符仙特: 单片机C语言中断: #includesbit P10=P1^0;//LED void main() { EA = 1; //允许CPU中断 ET0 = 1; //定时器0中断打开 TMOD = 0x1; //设定时器0为模式1,16位模式 TH0=0xB1; TL0=0xDF; //设定时值为20000us(20ms) TR0 = 1; while(1) {} } //定时器0中断外理中键扫描和显示 void KeyAndDis_Time0(void) interrupt 1 using 2 { TH0=0xB1; TL0=0xDF; //设定时值为20000us(20ms) P10=!P10; }

海伦市15665915285: 单片机c语言如何退出中断时不回断点 -
圭符仙特: 晕,你不会这样设计你的程序吧?你不会在中断中停留1S的时间吧? 教你个方法,你的中断应该是设置的20ms吧?即T0的溢出时间设置为20ms,在T0中断程序里设一个计数器,从1自增到50后归0,也就是用设计标记的方法来计时1S,到了1S就执行你要的内容就行了. 中断程序不用你设置退出,执行完了它自己退出的.

海伦市15665915285: 关于ARM9清中断的几个问题 -
圭符仙特: 不是的,手册上那样说是没错的,虽然从数字逻辑上来说是一样,但是有这个操作之后,硬件会有动作的,你可以试试嘛,那个语句之后再查查那个寄存器(用中断或者串口打到电脑,都简单,多试试).intpnd的还是跟上面说的一样,赋0不变,赋1清除,所以用原值赋给自己可以!清中断应该在什么时候,有些外设没有自己清外设的功能,所以得自己清,一般在中断程序执行完之后,不然他会重复进中断的(即刚执行完,假如没清除,那么arm发现还有中断标志,又跑进去了.)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网