gcc q
Ori Idan
ori at helicontech.co.il
Mon Aug 23 17:04:51 IDT 2010
avr-gcc linker, links a file named crtsXXXX.o before main, this file calls
the main function in your program.
You need the sources for avr-libc to get the sources for these files.
The actual file depends on the target used (determined by the option -mmcu=)
These files are written in AVR assembly which I assume you know.
--
Ori Idan
2010/8/23 Shachar Shemesh <shachar at shemesh.biz>
> Erez D wrote:
>
>
>
>
>> Okay. I'm going to assume that you are writing code that is meant to run
>> directly on the hardware, no external OS. Also, I'm assuming you have a
>> means to actually load that code into the CPU's address space (nor flash,
>> loader, etc.)
>>
> correct
>
>>
>> If those assumptions are true, and you are working with a GNU toolchain
>> (or derivative), then you, most likely, have a linker control file (also
>> known as a "linker script"). If you are not sure, search for an invocation
>> of the linker phase with the -T or --script options.
>>
> nope
>
> i compile with:
> avr32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -mpart=uc3l064
> -ffunction-sections -masm-addr-pseudos -oDebug\main.o main.cpp
> avr32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -mpart=uc3l064
> -ffunction-sections -masm-addr-pseudos -oDebug\uart.o uart.cpp
> avr32-g++ -mpart=uc3l064 -Wl,--gc-sections -Wl,--direct-data
> --rodata-writable -Wl,-Map,Debug\main.map -oDebug\proj3.elf Debug\main.o
> Debug\uart.o
>
>
>
> I saw on the internet that i should modify the crt0.S file to call my
> initialization function
> however i can not find the crt0.S file it uses. probably already compiled.
>
> s/probably/definitely/
>
> You have two options. The more "correct" way is to, indeed, change the C
> RunTime file. The file is probably available in object form, and you can
> detect which one by checking what is the command line that avr-g++ passes to
> avr-ld when it calls it. I am almost positive that there is a command line
> to see that, but I usually find it easier to use 'strace -f -e execve'.
>
> Then again, if, for whatever reason, you do not wish to tear apart the
> internal libraries used, you can also go by my original proposed route. The
> implicit linker script can be extracted by running avr-ld --verbose. You can
> copy it out into a file, and modify it from there.
>
> Personally, which way I'd go depends on how frequent this change you need
> to do is. If you are working on a custom hw platform, where you are expected
> to compile many programs for that platform, and that platform alone, I might
> prefer getting the sources to crt and making the change there. If you have
> several AVR platforms using the same toolchain, but only some of them need
> these registers, then I'd go the linker script path, as they do not require
> you to change the toolchain's files.
>
> Might I ask why you cannot init these hardware registers as the first thing
> that your actual program does? Does the startup code not run without this
> init?
>
>
> Shachar
>
> --
> Shachar Shemesh
> Lingnu Open Source Consulting Ltd.http://www.lingnu.com
>
>
> _______________________________________________
> Linux-il mailing list
> Linux-il at cs.huji.ac.il
> http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.cs.huji.ac.il/pipermail/linux-il/attachments/20100823/ddeef2a7/attachment.html>
More information about the Linux-il
mailing list