返回该小组首页 回复主题
stefanieA

stefanieA

小组等级:     E币:203  (E币换礼)

#1楼主:[问题]ucos移植到stm32在内置ram中调试的问题

文章发表于:2008-07-04 09:05

下载的官方的移植包,去掉了probe相关的task,flash和ram配置都能编译通过,使用flash配置的调试,没有问题,led能依次点亮;但是ram配置的调试好像就跑飞了。好像进入了hard fault异常处理:

感觉是这里:

#pragma location = "INTVEC"
__root  const  INTVECT_ELEM  AppVectTbl[] = {
    { .__ptr = __sfe("CSTACK")},        /*  0, SP start value.                                         */
    __program_start,                    /*  1, PC start value.                                         */
    App_NMI_ISR,                        /*  2, NMI                                                     */
    App_Fault_ISR,                      /*  3, Hard Fault                                              */
    App_Spurious_ISR,                   /*  4, Memory Management                                       */
    App_Spurious_ISR,                   /*  5, Bus Fault                                               */
    App_Spurious_ISR,                   /*  6, Usage Fault         

....

static  void  App_Fault_ISR (void) @ "ICODE"
{
    while (1) {
        ;
    }
}

请熟悉的同学帮忙看看,另外,这种跑飞的情况一般怎么分析,定位。

stefanieA

   小组等级:    E币:203  (E币换礼)

#2

文章发表于:2008-07-04 21:06

调试信息截图:

 

stefanieA

   小组等级:    E币:203  (E币换礼)

#3

文章发表于:2008-07-04 21:07

调试信息截图:点击看大图

stefanieA

   小组等级:    E币:203  (E币换礼)

#4

文章发表于:2008-07-04 21:08

调试信息截图:点击看大图

liongt

   小组等级:    E币:862  (E币换礼)

#5

文章发表于:2008-07-05 10:46

帮不了你!

stefanieA

   小组等级:    E币:203  (E币换礼)

#6

文章发表于:2008-07-05 12:15

谢谢liongt关注。
大家对跑飞的问题有常用的定位方法么?

stefanieA

   小组等级:    E币:203  (E币换礼)

#7

文章发表于:2008-07-12 17:07

终于周末有时间玩一下板子了,看到一篇stm32 hard fault的文章,又想起了自己的这个问题(问题症状见前面帖子),于是就有调试了一下,这个过程写在下面,因为刚接触arm的东西,可能表述的有错误的地方。其实没实际应用意义,主要是想让小组的高手指点一下,让和我一样的新手学到些东西:

系统挂起时sp是0x20003C38,在disassembly窗口搜到这个地址,从上至下依次是:r0,r1,r2,r3,r12,lr,pc, pc是0x20001090,在disassembly窗口搜到这个地址,发现是在OSStartHighRdy里最后一指令B       OSStartHang,把这个函数单步调试:

OSStartHighRdy

        LDR     R4, =NVIC_SYSPRI2       ; set the PendSV exception priority
        LDR     R5, =NVIC_PENDSV_PRI
        STR     R5, [R4]

        MOV     R4, #0                  ; set the PSP to 0 for initial context switch call
        MSR     PSP, R4

        LDR     R4, __OS_Running        ; OSRunning = TRUE
        MOV     R5, #1
        STRB    R5, [R4]

        LDR     R4, =NVIC_INT_CTRL      ; trigger the PendSV exception (causes context switch) NVIC_INT_CTRL 代表地址   0xe000ed04 
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4] ;这里设置pendsv,通过disassembly窗口看结果并没有成功,0xe000ed04还是原来的值0000

        CPSIE   I                       ; enable interrupts at processor level
OSStartHang
        B       OSStartHang

通过disassembly窗口 查看:hard fault 寄存器地址是 0xE000ED2C 发现是0x0002,查看资料说是取向量时发生异常;用法 fault寄存器0xE000ED2A是0x0002 ,查看资料说是试图切入arm状态,cortex对这中动作,做fault处理;

有几个疑问:

1)trigger the PendSV exception 那一步不成功,不知道一般是什么原因?

2)最后那个死循环,怎么会造成hard fault呢?在PendSV Handler和Tick ISR Handler里都加了断点也没断到。

 

caizhanliang

   小组等级:    E币:173  (E币换礼)

#8

文章发表于:2008-07-13 08:40

我也没找到原因。

vipxuliang

   小组等级:    E币:181  (E币换礼)

#9

文章发表于:2008-07-13 19:28

我也出现这样的问题。

GENII

   小组等级:    E币:92  (E币换礼)

#10

文章发表于:2008-08-07 10:46

我看其他地方的帖子有这样子写的:

App_Fault_ISR       B       App_Fault_ISR  ; 由于分配给任务的RAM不足,会引起硬件失效

给任务分配多一些RAM空间不知道会不会解决这个问题?

cnxiaoma

   小组等级:    E币:110  (E币换礼)

#11

文章发表于:2008-08-15 22:19

同样的代码在Flash里调试看一下,是否正常?

2【下一页】总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销

所有小组精华文章