Fix xmega initialization procedure.
authorlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 13 Oct 2011 16:43:13 +0000 (16:43 +0000)
committerlottaviano <lottaviano@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 13 Oct 2011 16:43:13 +0000 (16:43 +0000)
commit350223735c1c49b541d69f283fb71782ce374eea
treef086ff5d9b24710b70a1c8f87c27bb2b3edd7bde
parentd4f59ea32c3c2cfee85cc35e2b0c9523dcb0b8de
Fix xmega initialization procedure.

When compiled and linked the method __init() in the init_xmega.c file is
generated as the code for the reset vector (vector 0). As there is also
a return instruction generated, it will return from vector 0 and then
execute vector 1, which is not implemented, so the reset vector is
called..... So the other code does not get executed at all.

Assigning the __init() method to other sections does not work either.
The same problem persists.

I implemented a solution which is two-fold:

1) I use the attribute "constructor" as according to the gcc
domumentation
(http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html) it should
do exactly what we want: "The constructor attribute causes the function
to be called automatically before execution enters main ()"

2) This alone did not solve the issue. I had to rename the methode to
make it not get called by the reset vector so I renamed the methode to
init_xmega.

Signed-off-by: Onno <developer@gorgoz.org>
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@5161 38d2e660-2303-0410-9eaa-f027e97ec537
bertos/cpu/avr/hw/init_xmega.c