<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
  <title></title>
</head>
<body dir="ltr" bgcolor="#ffffff" text="#000000">
Erez D wrote:
<blockquote
 cite="mid:AANLkTi=ZktmMK-CGy3c4pL_WRSpvWntg+EfJmnPctvVQ@mail.gmail.com"
 type="cite">
  <div dir="ltr"><br>
  <br>
  <div class="gmail_quote">
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div dir="ltr" bgcolor="#ffffff" text="#000000"><br>
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.)<br>
    </div>
  </blockquote>
  <div>correct <br>
  </div>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div dir="ltr" bgcolor="#ffffff" text="#000000"><br>
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. </div>
  </blockquote>
  <div>nope<br>
  <br>
i compile with:<br>
avr32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -mpart=uc3l064
-ffunction-sections -masm-addr-pseudos -oDebug\main.o main.cpp<br>
avr32-g++ -O0 -g3 -Wall -c -fmessage-length=0 -mpart=uc3l064
-ffunction-sections -masm-addr-pseudos -oDebug\uart.o uart.cpp<br>
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 <br>
  <br>
  <br>
  </div>
  <div><br>
I saw on the internet that i should modify the crt0.S file to call my
initialization function<br>
however i can not find the crt0.S file it uses. probably already
compiled. <br>
  </div>
  </div>
  </div>
</blockquote>
s/probably/definitely/<br>
<br>
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'.<br>
<br>
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.<br>
<br>
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.<br>
<br>
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?<br>
<br>
Shachar<br>
<pre class="moz-signature" cols="72">-- 
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
<a class="moz-txt-link-freetext" href="http://www.lingnu.com">http://www.lingnu.com</a>
</pre>
</body>
</html>