Strange bug on EP9302-based custom board
Fabien CASAS
fcasas at altenso.fr
Thu Dec 15 16:02:21 UTC 2005
Ok, I've restored a version of my BSP with which the ticker test works,
and then I've added, one by one, my board specific drivers.
All worked fine !
Then I wanted to lower the tick value (I'm not using the
CONFIGURE_MICROSECONDS_PER_TICKS for now). The ticker test works fine
when I set the tick value to 50ms. But when I set the tick to 10ms, the
ticker test crashes with an Undefined exception.
I may think that this is the cause of the problem I explained first, as
I was configured with a tick at 5ms.
Do you think that this crash is due to my clock ISR, which takes too
long (it does nothing special, though) ?
My EP9302 is running at 40MHz, and I need a tick at about 10µs, which is
okay regarding the counter I'm using.
Fab
Fabien CASAS a écrit :
> (Thanks for replying so quickly !)
>
>
> Well, the ticker test doesn't run with that BSP (undefined exception
> once again), even when I remove my board-specific drivers.
> When I follow Jay's instructions on the ticker application, I find a
> Link Register equal to 0x00498AE0, which is completely out of my text
> section ( 0x00050000 to 0x0007d05f ). This explains the Undefined
> exception, as there should be nothing but uninitialized RAM at this
> address ^^.
>
> The call to rtems_task_wake_after is done in the read and write
> functions of my driver, not in the initialization function and not
> from an ISR. I don't think the problem comes from using that
> particular function, as the application crashes before I can do any
> read or write operation on my driver.
>
> I'll try and find an old version of my BSP with which the ticker test
> worked (yes it had worked ;)), and trace the changes.
>
> For now, I've restored a previous version of my BSP, with which my
> (multithreaded-)application works. But the ticker test desperately
> goes into Undefined exception in the middle of the first "puts".
>
>
> Thanks,
> Fab
>
>
>
>
>
>
> Joel Sherrill <joel at OARcorp.com> a écrit :
>
>> Jay Monkman wrote:
>>
>>> Fabien CASAS wrote:
>>>
>>>> Hi all !
>>>>
>>>> I'm porting RTEMS to an EP9302(ARM9)-based custom board, starting from
>>>> ARM ports, and I'm stuck on a strange bug.
>>>> I've got a base port that provides a console, a clock driver and some
>>>> board-specific drivers. This base port seems to run fine, except for
>>>> some improvements to be done.
>>>> BUT : when I add a call to a function (e.g. a call to
>>>> rtems_task_wake_after), or when I just add a local variable into a
>>>> function of one of my drivers, the whole executive crashes, before the
>>>> function is called.
>>>
>>>
>>>
>>>
>>> Without this driver, does the ticker test run correctly?
>>
>>
>>
>> Always a good question to get answered. :)
>>
>> Where are you calling wake after from? It should NEVER be called
>> from an ISR as it is a blocking call.
>>
>> It cannot be called before tasking is started. That means it cannot
>> be called in driver initialization that occurs before the Init task
>> runs.
>>
>>>> - or it hangs at the Undefined exception vector with a link register
>>>> pointing to the IRQ exception vector.
>>>
>>>
>>>
>>>
>>> This is the execption whose handler lives at address 0x00000004? You
>>> need to
>>> find out what instruction is causing that.
>>>
>>> Set a breakpoint at bsp_pretasking_hook() or some other function
>>> that gets
>>> called early on.
>>>
>>> Start you application. When you hit the breakpoint, set a new
>>> breakpoint at
>>> 0x0000004.
>>>
>>> Continue execution.
>>>
>>> When you hit the breakpoint at 0x0000004, the Link Register will
>>> have the
>>> address of 2 instructions past the one that caused you to get the
>>> exception.
>>>
>>>
>>>
>>> If you are using software breakpoints, you have to stop execution
>>> before a
>>> breakpoint on the execption vectors gets hit. Very early in startup,
>>> the
>>> addresses of the exception handlers are copied to the exception
>>> vectors,
>>> overwriting any software breakpoint you've set. When you stop and
>>> restart GDB,
>>> the breakpoint gets re-inserted.
>>
>>
>>
>>
>
>
>
>
More information about the users
mailing list