Subject:
|
RE: [long] Interrupt programming, buggy code
|
Newsgroups:
|
lugnet.robotics.rcx
|
Date:
|
Tue, 2 Mar 2004 18:30:05 GMT
|
Reply-To:
|
<rhempel@bmts.com^nospam^>
|
Viewed:
|
3418 times
|
| |
| |
Much better and more accurate answer from Mark - who knows
a lot more about GCC that I do :-)
I should stick to commenting on assembly language stuff.
Ralph
> When you declare your ISR as an interrupt_handler, GCC terminates the function
> with an "rte" instead of an "rts". The ROM code that dispatches the interrupt
> to your function is already doing the rte so your function should not. Here's
> the ROM dispatch code:
>
> 04cc: mov.w r6,@-e7
> 04ce: mov.w @0xfda2:16,r6
> 04d2: jsr @r6
> 04d4: mov.w @r7+,r6
> 04d6: rte
>
> Instead, you could remove the interrupt_handler attribute and preserve the
> scratch registers like so:
<snippage>
|
|
Message is in Reply To:
| | Re: [long] Interrupt programming, buggy code
|
| Hi Benjamin, When you declare your ISR as an interrupt_handler, GCC terminates the function with an "rte" instead of an "rts". The ROM code that dispatches the interrupt to your function is already doing the rte so your function should not. Here's (...) (21 years ago, 2-Mar-04, to lugnet.robotics.rcx)
|
7 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|