[ECOS] arm7 lpc2xxx abort data exception

Alergent alergent@interia.pl
Tue Jan 29 04:31:00 GMT 2008


Hi,

I have LPC2290 and had very similar problem at the very beginning.

The problem was caused by part of the code in
/packages/hal/arm/arch/current/src/vectors.S and my configuration settings.

There is a ".global __exception_handles" part where in case 
CYGSEM_HAL_ROM_RESET_USES_JUMP is defined short jump (b reset_vector) is 
used.

In my case it was defined and I had a short jump... Because CPU starts 
with interrupt vectors remapped to address 0 and the rest is residing 
somewhere in memory (address depends on boot configuration) long jump 
(ldr pc,.reset_vetor) is required.

Check whether CYGSEM_HAL_ROM_RESET_USES_JUMP is defined and undefine it. 
Hopefully this will help.

Greetings
Tomasz
> Hi,
>
> Could it be that you need to do some memory remapping to get the
> exception vectors at the right address (they have to be located at
> address 0)? I have no idea if the LPC requires this, so just a quick
> thought.
>
> I had a similar issue trying to run a RAM image on the Atmel ARM7
> (AT91SAM7SE)  based cpu, in my case the problem was caused because the
> SRAM-Flash remap code that wasn't in the RAM image startup sequence.
>
> Tom
>
> On Jan 25, 2008 11:06 PM, Sergei Gavrikov <sergei.gavrikov@gmail.com> wrote:
>   
>> On Fri, Jan 25, 2008 at 01:55:06PM -0800, Jean-David Vuillemain wrote:
>>     
>>> Yes i use a mixture of tool in fact...
>>>
>>> "Can you undo for GCC-3.2.1 and rebuild new CVS eCos with original tools?"
>>> Could you be more explicit please.
>>>       
>> I wonder, will you get a hang on a startup stage when you'll build eCos
>> with GNU toolchain from public FTP (a.k.a eCosCentric tools)? And what
>> about behaviors of built application for ROM startup? Does that hang
>> too?
>>
>> Sergei
>>
>>
>>     
>>> JD
>>> 2008/1/25, Sergei Gavrikov <sergei.gavrikov@gmail.com>:
>>>       
>>>> On Fri, Jan 25, 2008 at 10:21:39AM -0800, Jean-David Vuillemain wrote:
>>>>         
>>>>> I can run my application with GDB but the breakpoints you point out
>>>>> are not reachable. The program goes straight to the data abort at
>>>>> 0x00000010 after a few instructions.
>>>>> I didn't get any assertion message.
>>>>>           
>>>> I have another question, Is it possible that you use a mixture of tools?
>>>> Is your GNU toolchain a home-cooked stuff? Does the error occur with
>>>> GCC-3.2.1? If you build eCos with a recent tolchain, it could be that
>>>> you did modify CYGBLD_GLOBAL_CFLAGS and your startup become a broken...
>>>> Can you undo for GCC-3.2.1 and rebuild new CVS eCos with original tools?
>>>>
>>>> Sergei
>>>>
>>>>         
>>>>> 2008/1/25, Sergei Gavrikov <sergei.gavrikov@gmail.com>:
>>>>>           
>>>>>> On Thu, Jan 24, 2008 at 03:38:14PM -0800, Jean-David Vuillemain wrote:
>>>>>>             
>>>>>>> hi,
>>>>>>>
>>>>>>> i have been working with ecos for a couple of months now. I had no
>>>>>>> problem at all with a 8 months old repository source files and my own
>>>>>>> port for my target board. After some problem with my working
>>>>>>> environment  and updating the ecos source files, i can't have my old
>>>>>>> work and my new  code running on the board.
>>>>>>>               
>>>>>> Working with lpc2xxx targets I update eCos repository every week.  Did
>>>>>> you try to build eCos with a tracing support? Import 2 lines the below
>>>>>> with ecosconfig and rebuild eCos
>>>>>>
>>>>>> cdl_option CYGPKG_INFRA_DEBUG {user_value 1};
>>>>>> cdl_option CYGDBG_USE_TRACING {user_value 1};
>>>>>>
>>>>>> Can you run your application in GDB as
>>>>>>
>>>>>> b cyg_start
>>>>>> b cyg_assert_fail
>>>>>> c
>>>>>> c
>>>>>>
>>>>>> I wonder, Did you get same assertion?
>>>>>>
>>>>>> ASSERT FAIL: <1>lpc2xxx_misc.c[359]hal_interrupt_configure() Invalid vector
>>>>>>
>>>>>>
>>>>>> Sergei
>>>>>>
>>>>>>             
>>>>>>> It seems that my code always go through the same steps and finishes by
>>>>>>>  an exception abort data.
>>>>>>>
>>>>>>> Here is the code where it fails:
>>>>>>> 0x80020070 <start>:    ldr r0, [pc, #1020]    ; 0x80020474 <.init_flag>
>>>>>>> 0x80020074 <start+4>:  ldr r1, [r0]
>>>>>>> 0x80020078 <start+8>:  cmp r1, #0    ; 0x0
>>>>>>> 0x8002007c <start+12>: bne 0x80020078 <start+8>
>>>>>>> 0x80020080 <start+16>: ldr r1, [pc, #196]    ; 0x8002014c <init_done>
>>>>>>> 0x80020084 <start+20>: str r1, [r0]
>>>>>>> 0x80020088 <start+24>: mov r0, #0    ; 0x0
>>>>>>> 0x8002008c <start+28>: ldr r1, [pc, #988]    ; 0x80020470
>>>>>>> <.__exception_handlers>
>>>>>>> 0x80020090 <start+32>: cmp r7, #19    ; 0x13
>>>>>>> 0x80020094 <start+36>: beq 0x800200a0 <start+48>
>>>>>>> 0x80020098 <start+40>: ldr r2, [r1, #40]
>>>>>>> 0x8002009c <start+44>: str r2, [r0, #40]
>>>>>>> 0x800200a0 <start+48>: ldr r2, [r1, #24]
>>>>>>> 0x800200a4 <start+52>: str r2, [r0, #24]    <-- this line fails on my
>>>>>>> old and new programs
>>>>>>> It ends up in an abort data:
>>>>>>> 0x00000010 swp             r1, r3, [r2]
>>>>>>>
>>>>>>> Someone has a hint to solve this problem??
>>>>>>>
>>>>>>> Thanks in advance.
>>>>>>>
>>>>>>> Jean-David
>>>>>>>
>>>>>>> --
>>>>>>> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
>>>>>>> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
>>>>>>>               
>>>>> --
>>>>> Jean-David Vuillemain
>>>>> jdvuillemain@gmail.com
>>>>>           
>>> --
>>> Jean-David Vuillemain
>>> jdvuillemain@gmail.com
>>>       
>> --
>> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
>> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
>>
>>
>>     
>
>   



----------------------------------------------------------------------
Sprawdz, czy pasujesz do swojego partnera!
http://link.interia.pl/f1ce7


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list