打印
[ZLG-ARM]

通讯死机

[复制链接]
8559|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CJQ_ENJOY|  楼主 | 2011-5-11 11:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
CJQ_ENJOY|  楼主 | 2011-5-11 11:55 | 只看该作者
ARM中的中断如下:
                B           InitReset           ; 0x00 复位句柄

undefvec:
                B           undefvec            ; 0x04 未定义指令
swivec:
                B           swivec              ; 0x08 软件中断
pabtvec:
                B           pabtvec             ; 0x0C 预取中止
dabtvec:
                B           dabtvec             ;; 0x10 数据中止
rsvdvec:
                B           rsvdvec             ; 0x14 保留
irqvec:
                B           IRQ_Handler_Entry   ; 0x18 IRQ

fiqvec:                ; 0x1c FIQ
;----------------------------------------------------------------------------------

其中:未定义指令/软件中断/预取中止/数据中止/保留,都为死循环。
问题是:
1,正常工作时,会进入这些中断吗?
2,若会进入这些中断,如何处理?

我用AT91SAM7A3做了一系统,用群脉冲4KV打,有时打一个小时没问题,但同样的一块板,有时打几秒就死。
我在怀疑这些中断,但由于群脉冲打时,仿真器和电脑都会死机,故仿真器连不上。
模糊中......



   
2008-04-02,22:50:08   资料  邮件  回复  引用回复   ↑↑   ↓↓           编辑  删除      

【1楼】 yangsen
积分:1405
派别:
等级:------
来自:
你的程序中只要不产生这些异常就不应该进入到这些中断服务中。你可以先判断是那种异常然后在这些中断里加入处理代码,比如如果异常进入未定义中断就把某个板上的指示灯点亮或熄灭来判断干扰造成的是那种异常,然后在相应的异常中在做处理  
   
2008-04-03,08:41:42   资料  邮件  回复  引用回复   ↑↑   ↓↓           编辑  删除      

【2楼】 sourceForge 不恥上問
积分:271
派别:
等级:------
来自:開源世界
1,正常工作时,会进入这些中断吗?--> 有可能, 程序都有bug的, 例如錯誤的指針.  
2,若会进入这些中断,如何处理? ---> 就象一般的arm處理中斷一樣編程處理  
   
2008-04-03,09:15:24   资料  邮件  回复  引用回复   ↑↑   ↓↓           编辑  删除      

【3楼】 hzpyl
积分:434
派别:
等级:------
来自:杭州
问题是:用群脉冲4KV打时,估计会发生。干扰小,不会发生。

问题是,会出现更严重的问题吗?
例如:未定义指令中断,我在程序中肯定没有用未定义指令,若发生了未定义指令中断,假如我退出中断继续执行,会出现更严重的问题吗?如:冲掉RAM等。
如果会出现更严重的问题,我想还不如死循环,等待看门狗复位。

使用特权

评论回复
板凳
CJQ_ENJOY|  楼主 | 2011-5-11 11:56 | 只看该作者
偶用的CPU是ARM7   LPC2119,   偶用uCOS-II写东东,但是用ADS1.2的AXD通过JTAG调试时却老是出现取数据中止,请问这该如何解决?   多谢了!(   很急,请详细说明!超级感谢.   )



对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:8  

goodluckyxl

(Leo)

等 级:
3
#1楼 得分:20回复于:2006-02-08 12:05:48那看看你的片子访问的外部ram配置了没有
没有配置可能会出错


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:wince可以使用两个不连续内存吗???

kmajian

(阿剑)

等 级:

#2楼 得分:0回复于:2006-02-08 12:59:29没有接外部RAM,   用的是片内的16KRAM和128KFLASH


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:pb5.0通过串口回应EBOOT发送的bootme问题  

goodluckyxl

(Leo)

等 级:
3
#3楼 得分:20回复于:2006-02-08 13:18:31什么error报   
贴出来看看呢   看看我有没有碰到过


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:电压跳动导致电池读数变动的问题

kmajian

(阿剑)

等 级:

#4楼 得分:0回复于:2006-02-08 14:10:30也不是error,   就是程序在执行的时候,到某段代码时突然跳到了初始化代码的取数据中止那行汇编去了,之后就再也不动了.   如下:

;未定义指令
Undefined
                B               Undefined

;软中断
SoftwareInterrupt
                B               SoftwareInterrupt

;取指令中止
PrefetchAbort
                B               PrefetchAbort

;取数据中止
DataAbort
                B               DataAbort

;快速中断
FIQ_Handler
                STMFD       SP!,   {R0-R3,   LR}
                BL             FIQ_Exception
                LDMFD       SP!,   {R0-R3,   LR}
                SUBS         PC,     LR,     #4



对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:MMU地址映射问题

goodluckyxl

(Leo)

等 级:
3
#5楼 得分:30回复于:2006-02-08 14:47:09LDR   STR   SWAP   LDM   STM
好象是这五条指令引起data   abort
主要原因我认为你是使用指针访问了异常地址
导致数据终止   你查查呢   



对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:关于WinCE中的paging pool

kmajian

(阿剑)

等 级:

#6楼 得分:0回复于:2006-02-08 16:53:17不好意思,我顺带着问一下,是不是指针错误等会发生这种情况.   怎么现在是初始化的时候就会发生取数据中止的情况,但是我从新调入后又能过去了.   而且在程序的许多地方也会出现这种情况.   请问,这和别的东西或者设置有没有关系?   和AXD有没有关系呢?   我真的很是郁闷,   怎么写了半天考虑了全面的程序,也不是很大,怎么一调试就会常出现这种情况!   奇怪之极.


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP  

goodluckyxl

(Leo)

等 级:
3
#7楼 得分:30回复于:2006-02-08 17:09:55是不是指针错误等会发生这种情况.   ?
//你看下反汇编代码   使用指针进行数据访问还是会使用到上面几个指令
//所以就有这种情况和axd没有关系。
//跑飞了倒也有可能一般是指令error


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP  

kmajian

(阿剑)

等 级:

#8楼 得分:0回复于:2006-02-08 17:13:38那该怎样避免呢?   现在常常会出现这种情况,那又该如何改错呢,我看了代码,除了uCOS-II本身的代码外,其他的都没有发现什么问题的.

使用特权

评论回复
地板
CJQ_ENJOY|  楼主 | 2011-5-11 11:57 | 只看该作者
使用SmartARM2200开发板,配套使用的ARM芯片是LPC2220,使用的JTAG是EasyJTAG-H。



情况描述:

1. 使用ADS1.2软件,用周立功的 ARM EXecutable Image for lpc2200模板建立了一个项目,照着周立功配套教程上做第一个GPIO口的试验,自己没有修改任何程序。在“DebugInExram”模式下编译通过,0个错误。main.c函数也是和书上一模一样。



2. 进入AXD调试的时候,就会出现上面“取数据终止”的错误。
跟踪了一下PC寄存器的值,PC寄存器的值每执行一条语句,他的值就会增加4,
从0x80000000变化到0x80000010,再往下执行就变化到0x80000014,同时AXD弹出一个“取数据异常”出错的对话框。


3. EasyJTAG-H能够对SmartARM2200板上的Flash芯片进行擦除。

4.SmartARM2200的跳线如下:

  1)JP1: ISP短接了。(ISP跳开的效果也一样是报错)

  2)JP10:   选择了从Bank0--RAM ,Bank1--Flash。

  3)JP9: 选择了OUTSIDE

  4)JP7: 全部跳开,没短接。

5.  进入AXD调试的时候,执行Startup.s文件中的出错相关程序如下:

***********************************************

;中断向量表
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80
        LDR     PC, [PC, #-0xff0]
        LDR     PC, FIQ_Addr

ResetAddr             DCD     ResetInit
UndefinedAddr       DCD     Undefined
SWI_Addr             DCD     SoftwareInterrupt
PrefetchAddr          DCD     PrefetchAbort
DataAbortAddr       DCD     DataAbort
Nouse                   DCD     0
IRQ_Addr            DCD     0
FIQ_Addr            DCD     FIQ_Handler

;未定义指令
Undefined
        B       Undefined

;软中断
SoftwareInterrupt           
        B       SoftwareInterrupt   

;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        B       DataAbort

;快速中断
FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4
*****************************************

执行程序的时候,PC寄存器的值会从0x80000000变化到0x80000010,(执行到  LDR     PC, DataAbortAddr时候),再彺下执行时候,就会报“取数据异常”的错误,同时PC寄存器的值从0x80000010变化为0x80000014, 但是 R14的值从始至终都不改变。


这里不能贴图, 详细图片描述请见www.21ic.com帖子。

https://bbs.21ic.com/club/bbs/lis ... -------%u6C42%u52A9

使用特权

评论回复
5
CJQ_ENJOY|  楼主 | 2011-5-11 11:57 | 只看该作者
也不是error,   就是程序在执行的时候,到某段代码时突然跳到了初始化代码的取数据中止那行汇编去了,之后就再也不动了.   如下:

;未定义指令
Undefined
                B               Undefined

;软中断
SoftwareInterrupt
                B               SoftwareInterrupt

;取指令中止
PrefetchAbort
                B               PrefetchAbort

;取数据中止
DataAbort
                B               DataAbort

;快速中断
FIQ_Handler
                STMFD       SP!,   {R0-R3,   LR}
                BL             FIQ_Exception
                LDMFD       SP!,   {R0-R3,   LR}
                SUBS         PC,     LR,     #4

使用特权

评论回复
6
CJQ_ENJOY|  楼主 | 2011-5-11 11:59 | 只看该作者
不是error,   就是程序在执行的时候,到某段代码时突然跳到了初始化代码的取数据中止那行汇编去了,之后就再也不动了.   如下:

;未定义指令
Undefined
                B               Undefined

;软中断
SoftwareInterrupt
                B               SoftwareInterrupt

;取指令中止
PrefetchAbort
                B               PrefetchAbort

;取数据中止
DataAbort
                B               DataAbort

;快速中断
FIQ_Handler
                STMFD       SP!,   {R0-R3,   LR}
                BL             FIQ_Exception
                LDMFD       SP!,   {R0-R3,   LR}
                SUBS         PC,     LR,     #4

  
  
   
返回列表

使用特权

评论回复
7
CJQ_ENJOY|  楼主 | 2011-5-11 11:59 | 只看该作者

我用DebugInRAM方式调试,不能正常运行
我用单步执行后,发现在BL TargetResetInit的最后一条语句执行以后就跳到
;取数据中止
DataAbort
        B       DataAbort
去了。

ResetInit        
        BL      InitStack          ;初始化堆栈 Initialize the stack
        BL    TargetResetInit      ;Initialize the target board
                ;跳转到c语言入口 Jump to the entry point of C program
        B       __main

请问是什么问题?
我用的lpc2114,模板是Chenmingji 2004/02/02
答 1:
出现数据中止一般都是用户程序的问题,请更新模板:2100模板:
http://www.zlgmcu.com/download/downs.asp?ID=1074
2200模板:
http://www.zlgmcu.com/download/downs.asp?ID=1075
答 2:
我的也是这样不过我的程序是在__main中出现数据中止为什么要更新模板呢?不用模板把你们的启动文件加进工程不行吗?我认为既然在没有进入main函数之前就出现数据中止不应该是用户程序的错误!你们能不能给大家解释一下,不要动不动就说下载个东东了事,要知道被人牵着鼻子走是很不爽的!!
答 3:
问题应该是在堆栈上,查看进入TargetResetInit 的堆栈是否合理
答 4:
经过汇编,从一下地址数据中止的,,程序跳到:一下以后(__main)
__main    [0xe28f8090]   add      r8,pc,#0x90 ; #0x40000164
400000d0    [0xe898000f]   ldmia    r8,{r0-r3}
400000d4    [0xe0800008]   add      r0,r0,r8
400000d8    [0xe0811008]   add      r1,r1,r8
400000dc    [0xe0822008]   add      r2,r2,r8
400000e0    [0xe0833008]   add      r3,r3,r8
400000e4    [0xe240b001]   sub      r11,r0,#1
400000e8    [0xe242c001]   sub      r12,r2,#1
_move_region    [0xe1500001]   cmp      r0,r1
400000f0    [0x0a00000e]   beq      _zero_region
400000f4    [0xe8b00070]   ldmia    r0!,{r4-r6}
400000f8    [0xe1540005]   cmp      r4,r5
400000fc    [0x0afffffa]   beq      _move_region
40000100    [0xe3140001]   tst      r4,#1
40000104    [0x1084400b]   addne    r4,r4,r11
40000108    [0xe3150001]   tst      r5,#1
4000010c    [0x1085500b]   addne    r5,r5,r11
40000110    [0xe3150002]   tst      r5,#2
40000114    [0x10855009]   addne    r5,r5,r9
40000118    [0xe3c55003]   bic      r5,r5,#3
_move_loop    [0xe2566004]   subs     r6,r6,#4
40000120    [0x24947004]   ldrcs    r7,[r4],#4
40000124    [0x24857004]   strcs    r7,[r5],#4
40000128    [0x8afffffb]   bhi      _move_loop

一直在:_move_loop  这里循环,然后我把光标移到下面这句,按F7后跳到数据中止了。

4000012c    [0xeaffffee]   b        _move_region
_zero_region    [0xe1520003]   cmp      r2,r3

请问:_move_loop这一段是什么作用??怎么会出现中止??
答 5:
我把出错信息附上请看看,谢谢深思!我单步调试结果在__main函数中的下面指令处跳到数据中止
_region_table    [0x00002c44]   dcd      0x00002c44  D,..
   4000017c    [0x00002c68]   dcd      0x00002c68  h,..
40000180             [0x00002c68]   dcd      0x00002c68  h,..
40000184             [0x00002c80]   dcd      0x00002c80  .,..
您能告诉我什么原因么?是各处理器模式的堆栈设置不合理么?我的堆栈设置如下:
USR_STACK_LEGTH     EQU         64
SVC_STACK_LEGTH     EQU         64
FIQ_STACK_LEGTH     EQU         64
IRQ_STACK_LEGTH     EQU         64
ABT_STACK_LEGTH     EQU         0
UND_STACK_LEGTH     EQU         0
我用的是2104启动代码是用周立功公司陈明计的config.h,target.c,target.h.vector.s,lpc2106.h,init.s等文件我没有利用周立功公司的模板而是把以上文件直接加入了我的工程中。希望有朋友帮忙看看,谢谢!
答 6:
还有一个堆的初始化呢? heap

使用特权

评论回复
8
CJQ_ENJOY|  楼主 | 2011-5-11 11:59 | 只看该作者
LPC2364时通讯的时候出现死机(取数据中止)和复位状态,怎么回事   Post By:2011-4-17 12:18:00

LPC2364通讯的时候出现死机(取数据中止)和复位状态,怎么回事,用的元件库中;LPC2368的代码程序进行修改的,会有什么上的部队吗,通讯配置了530的长度,通讯时好的,一代结束后,,开了定时器0,1 ,还有时钟,就出现了问题 死机(取数据中止)和复位状态。  



支持(0) 中立(0) 反对(0)   
CJQ_eNJOY 小大  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC  





加好友  发短信





等级:新手上路

帖子:2

积分:81

威望:0

精华:0

注册:2010-1-15 8:08:00
     Post By:2011-4-17 12:20:00

对于您的错误不少和程序及ADS设置有关,因为您提及的错误没有具体到寄存器。

数据终止问题主要来自于:

1、数组(缓存)操作溢出

2、PLL设置不恰当

3、JTAG调试口的并口延长线过长

使用特权

评论回复
9
CJQ_ENJOY|  楼主 | 2011-5-11 12:00 | 只看该作者
rm为什么中断会丢,同时中断多了,会死机?arm如果定时器的间隔设得短一点,中断会丢掉。
同时,如果开ad,timera,timerb,uart1,uart2,spi,eint中断得话,不停得死机,主要是ad中断太多。如果把ad中断里的程序放短一点,系统就稳定多了。
我的中断里面有整数得除法(有一些运算),没有浮点运算。
我是从430里面移植过来得,在430里面跑得很稳定。不料在ARM里面经常死机。如果把ad中断程序写短点,不会死机得。可是,我必须实时处理这些数据.

是不是因为发生了中断嵌套(我的程序里面没有使用),导致死机?

绝对不是看门狗之类得原因。应该是中断得问题。

不知我有否描叙清楚。请大侠帮忙!

分享本文到:              喜欢远行

  
  
发短消息
加为好友
华荣汇FAE1 当前离线

帖子116 精华0 积分342 阅读权限20 在线时间14 小时 注册时间2009-8-5 最后登录2010-11-3  
帖子: 116

积分: 342



专家等级:
  华荣汇FAE1发表于 2010-5-26 10:31 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
2楼: 导致死机的原因可能是进入中断后没有清楚中断标志,导致不停进入中断;
在中断里写很长的处理程序本来就是一种错误的编程方法,可以在中断中
设置标志,然后退出中断在进行相应的处理;总之,就是要把最重要的事情放到
中断中进行处理,其他的可以出来做;如果对实时性要求比较严格,就把系统
跑快点吧。最好不要用中断嵌套~~

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-5-27 18:01 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
3楼: 在中断中有没有开中断?
姚明的铁杆球迷

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-5-27 18:01 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
4楼: 是否基于操作系统?死机的具体情况是什么?
姚明的铁杆球迷

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:37 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
5楼: 关于定时器的中断丢失可以参考相应的勘误手册
我用AD频繁时也死机,最后整了个队列来处理AD,

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:38 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
6楼: 本帖最后由 司徒老鹰 于 2010-6-10 21:46 编辑

AD比较频繁,要做ad过滤,就是去掉四个最大值,四个最小值,求平均。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:39 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
7楼: 在中断中有没有开中断?中断堆栈设置为多少?程序飞哪里?

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:44 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
8楼: PHILIPS ARM开多个中断会丢中断,我发现过多次,不知道原因。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:44 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
9楼: 中断堆栈倒是没有注意。呆会儿看一下。不知程序飞在何处,我不是用仿真。是直接上板调试的。可以肯定的是如果ad中断和timer1里面的程序放短点的话,就不会死机了。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
10楼: 目前所知,对于所有ARM7,有两种情况可能造成丢失中断

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
11楼: 1,中断服务程序执行时间太长,长于两次中断的间隔。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
12楼: 2,没有关总中断(CPSR)的情况下,通过中断控制器或外设关中断。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:46 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
13楼: 对,第2种情况还可能造成程序跑飞。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:47 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
14楼: 程序没有关中断的操作吧

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:47 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
15楼: 想屏蔽eint的中断,把他的PORT sel 改变。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:48 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
16楼: 在keil编译器里面,找找堆栈的地方。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:49 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
17楼: 如果在中断里面“改变PORT sel来屏蔽eint的中断”也算

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:50 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
18楼: 关eint的中断前,要把cpsr关掉

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:50 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
19楼: 但是在中断里面屏蔽eint的中断的,这时候,cpsr应该已经关掉了

使用特权

评论回复
10
CJQ_ENJOY|  楼主 | 2011-5-11 12:00 | 只看该作者
ARM下中止异常的作用

       最近给公司开发了一台全电脑袜机控制系统,由于此系统不同于现在市场上的全电脑,在功能方面比国内开发出的全电脑袜机功能更强大以及更加灵活,各个动作全用指令进行操作,指令丰富,能实现所需要的所有功能。由此可见系统的复杂性,再个系统中以文件的形式存储所需要的数据,可以输入文件删除文件以及新建文件,最终是程序的代码量在编译后达到1M多,导致出现问题难以发现问题的所在处,后来使用了中止异常功能解决在开发遇到的异常问题。

        编译器提供的启动代码指令以及数据中止中断子程序是两条死循环代码,

Soft_Reset      B       Soft_Reset
Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler

       这样虽然也可以找到异常中止处,但这时要找到中止处是比较麻烦的,可以根据当前中止模式中的R14可以在反汇编模式下用SHOW ADDRESS找到中止处,如果我们改动一下,在里面加一条返回指令那么出现异常很快就能返回到异常处,再分析代码找出产生异常的原因解决问题,由此可见这在DEBUG时是非常有用的,也可以在里面写个处理代码是否跳过这条指令。

使用特权

评论回复
11
CJQ_ENJOY|  楼主 | 2011-5-11 12:02 | 只看该作者
建议改造中断处理

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:53 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
22楼: 测试过在每秒钟2万次以上的中断(2106)情况下能够稳定的工作。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:54 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
23楼: 看看是不是电流振荡的问题

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:55 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
24楼: 就是说是不是复位了

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:55 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
25楼: 对,是不是电源被拉低啦

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:56 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
26楼: 楼主有必要留意一下

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-6-10 22:15 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
27楼: 可能是进入中断后没有清楚中断标志
姚明的铁杆球迷

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-6-10 22:16 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
28楼: 楼主查查看
姚明的铁杆球迷

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-19 15:37 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
29楼: 可能是进入中断后没有清楚中断标志
火箭球迷 发表于 2010-6-10 22:15
没清除?可能性不大吧

  
  
发短消息
加为好友
netswitch 当前离线

帖子2 精华0 积分307 阅读权限20 在线时间5 小时 注册时间2001-11-4 最后登录2011-2-11  
帖子: 2

积分: 307



专家等级:
  netswitch发表于 2010-6-21 22:21 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
30楼: 看看是不是在中断函数里有访问错误地址的操作,比如数据越界等

使用特权

评论回复
12
CJQ_ENJOY|  楼主 | 2011-5-11 12:02 | 只看该作者
arm为什么中断会丢,同时中断多了,会死机?arm如果定时器的间隔设得短一点,中断会丢掉。
同时,如果开ad,timera,timerb,uart1,uart2,spi,eint中断得话,不停得死机,主要是ad中断太多。如果把ad中断里的程序放短一点,系统就稳定多了。
我的中断里面有整数得除法(有一些运算),没有浮点运算。
我是从430里面移植过来得,在430里面跑得很稳定。不料在ARM里面经常死机。如果把ad中断程序写短点,不会死机得。可是,我必须实时处理这些数据.

是不是因为发生了中断嵌套(我的程序里面没有使用),导致死机?

绝对不是看门狗之类得原因。应该是中断得问题。

不知我有否描叙清楚。请大侠帮忙!

分享本文到:              喜欢远行

  
  
发短消息
加为好友
华荣汇FAE1 当前离线

帖子116 精华0 积分342 阅读权限20 在线时间14 小时 注册时间2009-8-5 最后登录2010-11-3  
帖子: 116

积分: 342



专家等级:
  华荣汇FAE1发表于 2010-5-26 10:31 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
2楼: 导致死机的原因可能是进入中断后没有清楚中断标志,导致不停进入中断;
在中断里写很长的处理程序本来就是一种错误的编程方法,可以在中断中
设置标志,然后退出中断在进行相应的处理;总之,就是要把最重要的事情放到
中断中进行处理,其他的可以出来做;如果对实时性要求比较严格,就把系统
跑快点吧。最好不要用中断嵌套~~

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-5-27 18:01 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
3楼: 在中断中有没有开中断?
姚明的铁杆球迷

  
  
发短消息
加为好友
火箭球迷 当前离线

帖子1277 精华2 积分3925 阅读权限30 在线时间36 小时 注册时间2009-8-23 最后登录2011-5-7  
帖子: 1277

积分: 3925



专家等级:
  火箭球迷发表于 2010-5-27 18:01 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
4楼: 是否基于操作系统?死机的具体情况是什么?
姚明的铁杆球迷

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:37 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
5楼: 关于定时器的中断丢失可以参考相应的勘误手册
我用AD频繁时也死机,最后整了个队列来处理AD,

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:38 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
6楼: 本帖最后由 司徒老鹰 于 2010-6-10 21:46 编辑

AD比较频繁,要做ad过滤,就是去掉四个最大值,四个最小值,求平均。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:39 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
7楼: 在中断中有没有开中断?中断堆栈设置为多少?程序飞哪里?

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:44 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
8楼: PHILIPS ARM开多个中断会丢中断,我发现过多次,不知道原因。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:44 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
9楼: 中断堆栈倒是没有注意。呆会儿看一下。不知程序飞在何处,我不是用仿真。是直接上板调试的。可以肯定的是如果ad中断和timer1里面的程序放短点的话,就不会死机了。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
10楼: 目前所知,对于所有ARM7,有两种情况可能造成丢失中断

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
11楼: 1,中断服务程序执行时间太长,长于两次中断的间隔。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:45 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
12楼: 2,没有关总中断(CPSR)的情况下,通过中断控制器或外设关中断。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:46 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
13楼: 对,第2种情况还可能造成程序跑飞。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:47 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
14楼: 程序没有关中断的操作吧

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:47 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
15楼: 想屏蔽eint的中断,把他的PORT sel 改变。

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:48 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
16楼: 在keil编译器里面,找找堆栈的地方。

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:49 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
17楼: 如果在中断里面“改变PORT sel来屏蔽eint的中断”也算

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:50 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
18楼: 关eint的中断前,要把cpsr关掉

  
  
发短消息
加为好友
司徒老鹰 当前离线

帖子900 精华0 积分2700 阅读权限30 在线时间8 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 900

积分: 2700



专家等级:
  司徒老鹰发表于 2010-6-10 21:50 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
19楼: 但是在中断里面屏蔽eint的中断的,这时候,cpsr应该已经关掉了

  
  
发短消息
加为好友
zwll 当前离线

帖子903 精华0 积分2709 阅读权限30 在线时间7 小时 注册时间2009-11-21 最后登录2011-5-10  
帖子: 903

积分: 2709



专家等级:
  zwll发表于 2010-6-10 21:51 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
20楼: 好像不支持中断嵌套

使用特权

评论回复
13
CJQ_ENJOY|  楼主 | 2011-5-11 12:03 | 只看该作者
紧急求助啊,我的SD卡插进ARM9运行文件频繁死机
SD卡, 文件, 运行, 求助
我在SD卡上放了一个mplayer,插入ARM9的SD卡槽,然后挂载:mount -t vfat /dev/mmcblk0p1 /tmp
就是把SD卡挂载到了tmp里面

进入tmp运行mplayer,./mplayer *.avi

一开始能运行,可是运行几秒钟以后就死机了,然后就弹出:
BUG: soft lockup - CPU#0 stuck for 61s! [mmcqd:884]
Modules linked in:

Pid: 884, comm: mmcqd
CPU: 0 Not tainted (2.6.28.7 #337)
PC is at do_pio_write+0xc8/0x154
LR is at 0xc39c89c0
pc : [<c020f7e4>] lr : [<c39c89c0>] psr: 20000013
sp : c39cfda4 ip : 00000003 fp : c39cfdbc
r10: c39cfef8 r9 : c39c8800 r8 : c39cff0c
r7 : c39cff64 r6 : c39c89c0 r5 : c5000040 r4 : 00000000
r3 : 000001c4 r2 : c2c7643c r1 : 000001c4 r0 : c39c8000
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: c000717f Table: 32804000 DAC: 00000017
[<c002bd0c>] (show_regs+0x0/0x4c) from [<c006ac50>] (softlockup_tick+0x104/0x14c)
r4:01312c4b
[<c006ab4c>] (softlockup_tick+0x0/0x14c) from [<c0052250>] (run_local_timers+0x1c/0x20)
[<c0052234>] (run_local_timers+0x0/0x20) from [<c0052280>] (update_process_times+0x2c/0x58)
[<c0052254>] (update_process_times+0x0/0x58) from [<c002e59c>] (timer_tick+0xdc/0x100)
r5:00000000 r4:c0394520
[<c002e4c0>] (timer_tick+0x0/0x100) from [<c0033bb0>] (s3c2410_timer_interrupt+0x10/0x18)
r5:00000000 r4:c0366850
[<c0033ba0>] (s3c2410_timer_interrupt+0x0/0x18) from [<c006b30c>] (handle_IRQ_event+0x44/0x80)
[<c006b2c8>] (handle_IRQ_event+0x0/0x80) from [<c006cb3c>] (handle_edge_irq+0x104/0x144)
r7:c39cff64 r6:c0366850 r5:0000001e r4:c0369bd4
[<c006ca38>] (handle_edge_irq+0x0/0x144) from [<c002a064>] (asm_do_IRQ+0x64/0x80)
r6:00000000 r5:c03a0df4 r4:0000001e
[<c002a000>] (asm_do_IRQ+0x0/0x80) from [<c002a9e4>] (__irq_svc+0x24/0xa0)
Exception stack(0xc39cfd5c to 0xc39cfda4)
fd40: c39c8000   
fd60: 000001c4 c2c7643c 000001c4 00000000 c5000040 c39c89c0 c39cff64 c39cff0c   
fd80: c39c8800 c39cfef8 c39cfdbc 00000003 c39cfda4 c39c89c0 c020f7e4 20000013   
fda0: ffffffff   
r6:00004000 r5:f4000000 r4:ffffffff
[<c020f71c>] (do_pio_write+0x0/0x154) from [<c021003c>] (s3cmci_send_request+0x344/0x420)
r5:c39c8800 r4:c39c89c0
[<c020fcf8>] (s3cmci_send_request+0x0/0x420) from [<c02105e4>] (s3cmci_request+0x60/0x68)
[<c0210584>] (s3cmci_request+0x0/0x68) from [<c0208878>] (mmc_wait_for_req+0x10c/0x124)
r6:00000000 r5:c39c8800 r4:c39cfef8
[<c020876c>] (mmc_wait_for_req+0x0/0x124) from [<c020e940>] (mmc_blk_issue_rq+0x12c/0x4e8)
r7:c3985600 r6:c39a90ec r5:c39cfef8 r4:c39a90e4
[<c020e814>] (mmc_blk_issue_rq+0x0/0x4e8) from [<c020f108>] (mmc_queue_thread+0xb8/0xd8)
[<c020f050>] (mmc_queue_thread+0x0/0xd8) from [<c005c2ac>] (kthread+0x54/0x7c)
r8:00000000 r7:00000000 r6:00000000 r5:c020f050 r4:fffffffc
[<c005c258>] (kthread+0x0/0x7c) from [<c004ae14>] (do_exit+0x0/0x6c8)
r5:00000000 r4:00000000

求遇到过类似问题的大侠们给我解决的方法吧,搞了半个月了,真的是崩溃了。

收藏 分享  



  

zhxglide 发短消息
加为好友
zhxglide 当前离线

UID836 帖子13 精华0 积分7 威望0  金钱10  阅读权限10 在线时间5 小时 注册时间2010-3-28 最后登录2010-10-16  
新手上路


2#
发表于 2010-8-18 15:18 | 只看该作者
我用的内核是2.6.28.7,是te2440II的板子


TOP

  

飞凌-fatfish 发短消息
加为好友
飞凌-fatfish (我是一个肥鱼)当前在线

UID182 帖子2813 精华5 积分1526 威望35  金钱710  阅读权限150 在线时间315 小时 注册时间2010-1-6 最后登录2011-5-11  
超级版主


3#
发表于 2010-8-18 16:57 | 只看该作者
如果都拷贝到nand中还会出问题吗?


TOP

  

zhxglide 发短消息
加为好友
zhxglide 当前离线

UID836 帖子13 精华0 积分7 威望0  金钱10  阅读权限10 在线时间5 小时 注册时间2010-3-28 最后登录2010-10-16  
新手上路


4#
发表于 2010-8-18 18:41 | 只看该作者
不会,就是拷贝到SD卡才会出现问题。2.6.12就不会出现此类问题


TOP

  

zhxglide 发短消息
加为好友
zhxglide 当前离线

UID836 帖子13 精华0 积分7 威望0  金钱10  阅读权限10 在线时间5 小时 注册时间2010-3-28 最后登录2010-10-16  
新手上路


5#
发表于 2010-8-18 18:42 | 只看该作者
我们做项目必须要用2.6.28.7这个版本或者更高版本的,不然就直接用2.6.12了


TOP

  

飞凌-fatfish 发短消息
加为好友
飞凌-fatfish (我是一个肥鱼)当前在线

UID182 帖子2813 精华5 积分1526 威望35  金钱710  阅读权限150 在线时间315 小时 注册时间2010-1-6 最后登录2011-5-11  
超级版主


6#
发表于 2010-8-19 08:30 | 只看该作者
可能有点问题。
调试好了,我再来这跟帖。


TOP

  

wanglu111 发短消息
加为好友
wanglu111 当前离线

UID4805 帖子1 精华0 积分1 威望0  金钱10  阅读权限10 在线时间0 小时 注册时间2010-11-26 最后登录2010-11-26  
新手上路


7#
发表于 2010-11-26 16:04 | 只看该作者
我也遇到这种问题了。。。

等,,,


TOP

  

飞凌-fatfish 发短消息
加为好友
飞凌-fatfish (我是一个肥鱼)当前在线

UID182 帖子2813 精华5 积分1526 威望35  金钱710  阅读权限150 在线时间315 小时 注册时间2010-1-6 最后登录2011-5-11  
超级版主


8#
发表于 2010-11-26 17:32 | 只看该作者
drivers/mmc/host/s3cmci.c |    2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/mmc/host/s3cmci.c
+++ b/drivers/mmc/host/s3cmci.c
@@ -329,7 +329,7 @@ static void do_pio_write(struct s3cmci_h

        to_ptr = host->base + host->sdidata;

-        while ((fifo = fifo_free(host))) {
+        while ((fifo = fifo_free(host)) > 3) {
                if (!host->pio_bytes) {
                        res = get_data_buffer(host, &host->pio_bytes,
                                                        &host->pio_ptr);

使用特权

评论回复
14
CJQ_ENJOY|  楼主 | 2011-5-11 12:03 | 只看该作者
ARM7 EINT造成死机  
我用LPC2132,目前使用的中断有UART0/1、Timer0/1、RTC秒钟中断、I2C中断、EINT2,再加入EINT2之前系统稳定,加入后系统运行一会就死机。我程序中使用了部分中断嵌套,无操作系统,定时器0中断处理中读按键值,定时器1中断中处理按键。由于初学ARM,请各位大侠帮帮忙,不胜感激!


--------------------------------------------------------------------------------

关键词:ARM7 EINT2中断 ,造成 死机    提问人:hwsswh  时间:2010-01-27 10:31    
   

  答复  
可能堆栈的问题!

--------------------------------------------------------------------------------

  回答人:sdjntl  时间:2010-01-31 20:05   

  答复  
路过,看看

--------------------------------------------------------------------------------

  回答人:dplion  时间:2010-02-09 15:13

使用特权

评论回复
15
CJQ_ENJOY|  楼主 | 2011-5-11 12:05 | 只看该作者
ARM的伪中断(LPC2138)
0
推荐近来,客户反映,我们的产品,在用串口长时间短间隔的通信以后,遇到死机现象。真是头痛啊,已经查了好长时间,都没有查出原因。后来,实在没有办法,在FIQ中打了点后,死机后,可以从FIQ中,吐数据。发现VICVecIAddr= 默认中断的地址。而默认中断服务程序是一个死循环。所以,一直在这个中断服务程序不出来。但FIQ由于优先级高,还是能不响应的。后来,在默认中断程序中,去掉那个循环了。不知道效果如何,等待确认。

具体什么叫伪中断可以,去NXP的官方网站上,下载相关资料。

我们的产品是要反复的进行串口中断的,两个串口,还定时器1,2,WATCHDOY.


posted @ 2008-7-4 21:26:00 wan_aigo 阅读全文(449) | 回复(1) |反映问题 | 引用通告(7) | 编辑
标签:LPC2138
上一篇:C语言可变参数函数使用总结
下一篇:无符号数和有符号数的比较
2008-9-7 17:16:00
Re:ARM的伪中断(LPC2138)
近来,客户反映,我们的产品,在用串口长时间短间隔的通信以后,遇到死机现象。


叫德国人来解决

使用特权

评论回复
16
lusi| | 2011-5-11 12:48 | 只看该作者
1. 使用ADS1.2软件,用周立功的 ARM EXecutable Image for lpc2200模板建立了一个项目,照着周立功配套教程上做第一个GPIO口的试验,自己没有修改任何程序。在“DebugInExram”模式下编译通过,0个错误。main.c函数也是和书上一模一样。



2. 进入AXD调试的时候,就会出现上面“取数据终止”的错误。
跟踪了一下PC寄存器的值,PC寄存器的值每执行一条语句,他的值就会增加4,
从0x80000000变化到0x80000010,再往下执行就变化到0x80000014,同时AXD弹出一个“取数据异常”出错的对话框。


3. EasyJTAG-H能够对SmartARM2200板上的Flash芯片进行擦除。

4.SmartARM2200的跳线如下:

  1)JP1: ISP短接了。(ISP跳开的效果也一样是报错)

  2)JP10:   选择了从Bank0--RAM ,Bank1--Flash。

  3)JP9: 选择了OUTSIDE

  4)JP7: 全部跳开,没短接。

5.  进入AXD调试的时候,执行Startup.s文件中的出错相关程序如下:

***********************************************

;中断向量表
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80
        LDR     PC, [PC, #-0xff0]
        LDR     PC, FIQ_Addr

ResetAddr             DCD     ResetInit
UndefinedAddr       DCD     Undefined
SWI_Addr             DCD     SoftwareInterrupt
PrefetchAddr          DCD     PrefetchAbort
DataAbortAddr       DCD     DataAbort
Nouse                   DCD     0
IRQ_Addr            DCD     0
FIQ_Addr            DCD     FIQ_Handler

;未定义指令
Undefined
        B       Undefined

;软中断
SoftwareInterrupt           
        B       SoftwareInterrupt   

;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        B       DataAbort

;快速中断
FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4

使用特权

评论回复
17
xlsbz| | 2011-5-11 17:49 | 只看该作者
我瞎说两句
ARM中的中断如下:
                B           InitReset           ; 0x00 复位句柄

undefvec:
                B           undefvec            ; 0x04 未定义指令
swivec:
                B           swivec              ; 0x08 软件中断
pabtvec:
                B           pabtvec             ; 0x0C 预取中止
dabtvec:
                B           dabtvec             ;; 0x10 数据中止
rsvdvec:
                B           rsvdvec             ; 0x14 保留
irqvec:
                B           IRQ_Handler_Entry   ; 0x18 IRQ

fiqvec:                ; 0x1c FIQ



假若是 AT91SAM7A3 就是ARM7TDMI内核的。

首先 若不开FIQ,想中断嵌套必须嵌入汇编。

我觉得没啥必要开FIQ,一般情况下。

软中断 作用一般是 为了 转换工作模式的。比如要实现全部中断关闭和开启时进行的模式转换。

未定义指令就是自己胡乱弄个汇编 进入了未定义的bit

数据中止 有时候指针跑飞了 或者 我也不知道哈哈

有时候指针跑非也会进入取指令终止(这条我不确定)

还有一个叫做虚拟中断 不知道你注意到没有。就是有时候配置啥 结果硬件没有。就是程序编写了 结果板子没这个东西   或者干扰啥的 就会进入虚拟中断。不要紧进入了就有条指令回去就完事。

很久前搞的  忘光光了

仅作参考

使用特权

评论回复
18
xlsbz| | 2011-5-11 17:57 | 只看该作者
我当时仔细读了虚拟中断 就是楼上有人提到的伪中断。感觉手册上的意思是:忘了 哈哈

好像是说明干扰严重或者是程序配置本身有问题或者是为了让你在虚拟中断里面保存数据

。一般情况下我们用不着它。
还有一点即便关了FIQ和普通中断 也有可能进入虚拟中断的。这玩意和硬件好像有关,软件控制不住。
可以在伪中断里面加上AT91C_BASE_AIC->AIC_EOICR = 0; 如果是AT91SAM7A3的话。

使用特权

评论回复
19
xlsbz| | 2011-5-11 17:57 | 只看该作者
我当时仔细读了虚拟中断 就是楼上有人提到的伪中断。感觉手册上的意思是:忘了 哈哈

好像是说明干扰严重或者是程序配置本身有问题或者是为了让你在虚拟中断里面保存数据

。一般情况下我们用不着它。
还有一点即便关了FIQ和普通中断 也有可能进入虚拟中断的。这玩意和硬件好像有关,软件控制不住。
可以在伪中断里面加上AT91C_BASE_AIC->AIC_EOICR = 0; 如果是AT91SAM7A3的话。

使用特权

评论回复
20
linqing171| | 2011-5-11 21:47 | 只看该作者
dataabort里面,把R14发送出来,看看是从哪个指令进入的dataabort,一般是指针飞了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

383

帖子

4

粉丝