This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: [avr-gcc-list] source code of crtm48.o
- From: Erik Christiansen <erik at dd dot nec dot com dot au>
- To: Massimiliano Cialdi <cialdi at firenze dot net>
- Cc: avr-gcc list <avr-gcc-list at avr1 dot org>,gcc help <gcc-help at gcc dot gnu dot org>
- Date: Fri, 23 Jul 2004 14:33:05 +1000
- Subject: Re: [avr-gcc-list] source code of crtm48.o
- References: <20040722115304.00000c18.cialdi@firenze.net>
On Thu, Jul 22, 2004 at 11:53:04AM +0200, Massimiliano Cialdi wrote:
> I need to change vector table and entry point. Where can I find source
> code of crtm48.o (or other crtmxx.o)?
> How can I change vectors?
Massimiliano,
Your question has interesting ramifications. The avr-libc doco states
"In the AVR-GCC environment, the vector table is predefined to point to
interrupt routines with predetermined names."
In C then, it should simply be a matter of supplying suitably named
ISRs. (See avr-libc doco) If your dilemma arises from the use of one or
more assembler ISRs, then the same method ought apply. The linker should
find the symbol definition satisfied by your assembler ISR.
How avr-libc avoids unsatisfied externals, resulting from the shotgun
vector table approach, is not immediately clear. I find .e.g. in
/usr/local/avr/avr/include/avr/iom64.h:
#define SIG_INTERRUPT0 _VECTOR(1)
...
#define SIG_SPM_READY _VECTOR(34)
For assembler ISRs, it appears to be " a name like __vector_N should
appear, with N being a small integer number."
A trial build should show a handler for ISRs not "installed", at
"__vector_default", if I've understood the doco correctly. How that
would avoid competing for an interrupt that you wish to handle in
assembler, is not quite clear to me yet, since I haven't tried it.
Incidentally, did you sort out the overlap problem mentioned in the
other post?
HTH,
Erik