PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim kompilieren:



jagdfalke
16.11.2005, 14:02
Hi,
ich habe eine Zeit lang keine große Lust gehabt mich in die C-Programmierung meines AVR einzuarbeiten. Jetzt hab ich sie wieder und hab gerade die ganzen Packages unter Suse Linux 10.0 installiert, die man so braucht, also gcc-core, avr-libc, uisp, binutils. Dann wollte ich das Testprogramm das man auf http://www.tldp.org/linuxfocus/English/November2004/article352.shtml findet kompilieren, die Fehlermeldung lautete:



linux:/home/mathias/Desktop # make
avr-gcc -g -mmcu=atmega8 -Wall -Wstrict-prototypes -Os -mcall-prologues -Os -c avrm8ledtest.c
avrm8ledtest.c:27: error: syntax error before 'void'
avrm8ledtest.c:34: warning: type defaults to 'int' in declaration of 'outer1'
avrm8ledtest.c:34: warning: data definition has no type or storage class
avrm8ledtest.c:36: error: syntax error before 'while'
avrm8ledtest.c:78: error: syntax error before numeric constant
avrm8ledtest.c:78: warning: type defaults to 'int' in declaration of 'delay_ms'
avrm8ledtest.c:78: warning: function declaration isn't a prototype
avrm8ledtest.c:78: warning: data definition has no type or storage class
avrm8ledtest.c:80: error: syntax error before 'volatile'
avrm8ledtest.c:81: error: syntax error before numeric constant
avrm8ledtest.c:81: warning: type defaults to 'int' in declaration of 'delay_ms'
avrm8ledtest.c:81: warning: function declaration isn't a prototype
avrm8ledtest.c:81: warning: data definition has no type or storage class
make: *** [avrm8ledtest.o] Fehler 1


Ich poste auch mal das Makefile und den Code, weiß nicht ob das hilft aber schaden kanns ja nicht:

Make:

# makefile, written by guido socher
MCU=atmega8
CC=avr-gcc
OBJCOPY=avr-objcopy
# optimize for size:
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues
#-------------------
all: avrm8ledtest.hex
#-------------------
help:
@echo "Usage: make all|load|load_pre|rdfuses|wrfuse1mhz|wrfuse4mhz|wr fusecrystal"
@echo "Warning: you will not be able to undo wrfusecrystal unless you connect an"
@echo " external crystal! uC is dead after wrfusecrystal if you do not"
@echo " have an external crystal."
#-------------------
avrm8ledtest.hex : avrm8ledtest.out
$(OBJCOPY) -R .eeprom -O ihex avrm8ledtest.out avrm8ledtest.hex
avrm8ledtest.out : avrm8ledtest.o
$(CC) $(CFLAGS) -o avrm8ledtest.out -Wl,-Map,avrm8ledtest.map avrm8ledtest.o
avrm8ledtest.o : avrm8ledtest.c
$(CC) $(CFLAGS) -Os -c avrm8ledtest.c
#------------------
load: avrm8ledtest.hex
./prg_load_uc avrm8ledtest.hex
# here is a pre-compiled version in case you have trouble with
# your development environment
load_pre: avrm8ledtest_pre.hex
./prg_load_uc avrm8ledtest.hex
#
loaduisp: avrm8ledtest.hex
./prg_load_uc -u avrm8ledtest.hex
# here is a pre-compiled version in case you have trouble with
# your development environment
load_preuisp: avrm8ledtest_pre.hex
./prg_load_uc -u avrm8ledtest.hex
#-------------------
# fuse byte settings:
# Atmel AVR ATmega8
# Fuse Low Byte = 0xe1 (1MHz internal), 0xe3 (4MHz internal), 0xe4 (8MHz internal)
# Fuse High Byte = 0xd9
# Factory default is 0xe1 for low byte and 0xd9 for high byte
# Check this with make rdfuses
rdfuses:
./prg_fusebit_uc -r
# use internal RC oscillator 1 Mhz
wrfuse1mhz:
./prg_fusebit_uc -w 1
# use internal RC oscillator 4 Mhz
wrfuse4mhz:
./prg_fusebit_uc -w 4
# use external 3-8 Mhz crystal
# Warning: you can not reset this to intenal unless you connect a crystal!!
wrfusecrystal:
@echo "Warning: The external crystal setting can not be changed back without a working crystal"
@echo " You have 3 seconds to abort this with crtl-c"
@sleep 3
./prg_fusebit_uc -w 0
#-------------------
clean:
rm -f *.o *.map *.out *t.hex
#-------------------



Code:

/*********************************************
* vim: set sw=8 ts=8 si :
* Author: Guido Socher, Copyright: GPL
* This program is to test the led connected to
* PC5.
* See http://linuxfocus.org/English/November2004/
* for details.
* Chip type : ATMEGA8
* Clock frequency : Internal clock 1 Mhz (factory default)
*********************************************/
#include <avr/io.h>

//#define OLD 1

#ifdef OLD
/* compatibilty macros for old style */
#ifndef cbi
*#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))*
#endif

#ifndef sbi
*#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))*
#endif

#endif /*OLD*/

*void delay_ms(unsigned short ms)*
/* delay for a minimum of <ms> */
/* with a 1Mhz clock, the resolution is 1 ms */
{
// Note: this function is faulty, see avrm8ledtest-0.2.tar.gz for
// updated code.
unsigned short outer1, outer2;
outer1 = 50;

while (outer1) {
outer2 = 1000;
while (outer2) {
while ( ms ) ms--;
outer2--;
}
outer1--;
}
}

#ifdef OLD
// old style now depricated:
*void main(void)*
{
// enable PC5 as output
sbi(DDRC,PC5);
while (1) {
// led on, pin=0
cbi(PORTC,PC5);
delay_ms(500);
// set output to 5V, LED off
sbi(PORTC,PC5);
delay_ms(500);
}
}

#else

/* new style */
*void main(void)*
{
/* INITIALIZE */
/* enable PC5 as output */
DDRC|= _BV(PC5);


/* BLINK, BLINK ... */

/* PC5 is 5 (see file include/avr/iom8.h) and _BV(PC5) is 00100000 */
while (1) {
/* led on, pin=0 */
PORTC &= ~_BV(PC5);
delay_ms(500);
/* set output to 5V, LED off */
PORTC|= _BV(PC5);
delay_ms(500);
}
}

#endif /*OLD*/



Das Problem ist eben auch, dass ich weder den Code verstehe, noch weiß was die Sache mit dem Makefile soll. Also Ahnung von Programmieren hab ich schon allerdings nur in Java :D (hilft mir ja hier nicht weiter schätz ich mal)

Ich hoff ihr könnt mir helfen.

mfg
jagdfalke

linux_80
16.11.2005, 14:32
Hallo,
also mir würden diese Sternchen am Anfang und am ende erstmal auffallen,
probiers mal ohne in den jeweiligen Zeilen die er anmeckert.

er schreibt ja so schön:
syntax error before 'void'
dann schau mal vor das void

jagdfalke
16.11.2005, 16:22
Ok, das hätten wir schon mal, danke. Ich hab den Code mal im Archive runtergeladen und da waren diese * von vornherein ncht.

Mit dem Befehl "make load" sollte ja das Programm rübergeschoben werden. Der output von make load ist;

./prg_load_uc avrm8ledtest.hex
+ avrdude -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex
./prg_load_uc: line 35: avrdude: command not found
+ set +x


Was mich etwas iritiert ist, dass immer von avrdude gesprochen wird (2x). Ich habe aber nie avrdude installiert. Gehts wohl nicht ohne?

Kann mir jemand nen Link geben, wo ich Schritt für Schritt avr-c lerne?

mfg
jagdfalke

kater
16.11.2005, 16:48
Mit irgenwas muss das Programm ja uebertragen werden und da ist avrdude ganz gut fuer geeignet. Das wirst du wohl oder uebel installieren muessen. uisp kannst du auch nehmen aber das unterstuetzt meines Wissens nicht die neuesten AVRs.

Arbeite dich da mal durch: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

jagdfalke
16.11.2005, 17:05
Ok, also wir kommen der Sache schon näher :)
Mittlerweile sieht das ganze so aus:

linux:/home/mathias/avr programm/avrm8ledtest-0.3 # make load
./prg_load_uc avrm8ledtest.hex
+ avrdude -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.


avrdude done. Thank you.

+ set +x


Sieht recht gut aus, abgesehen davon, dass der Controller nicht antwortet. Strom ist angeschlossen, JSP-Dongle am parport0. Kann es was mit dem PrinterSpooler von Linux zu tun haben? Wenn ja, wie schalte ich den aus?

mfg
jagdfalke

kater
16.11.2005, 17:37
JSP-Dongle sagt mir leider mal garnichts. Vllt musst du das Device noch mit -P angeben. Schau auch ob du die noetigen Berechtigungen auf parport0 hast.
Ich glaub nicht, dass da ein Spoller dazwischenfunkt. SUSE hat sicher irgendein Tool womit man das Teil probehalber einfach beenden kann.

jagdfalke
16.11.2005, 17:52
Es muss natürlich ISP heißen, nicht JSP. (Das Kabel mit dem man den Controller mit dem PC verbindet.

Ich hab mal den Aufruf von avrdude mit einem -F versehen. make load schaut jetzt so aus:


linux:/home/mathias/avr programm/avrm8ledtest-0.3 # make load
./prg_load_uc avrm8ledtest.hex
+ avrdude -F -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0xffffff
avrdude: Yikes! Invalid device signature.
avrdude: erasing chip
avrdude: AVR device not responding
avrdude: reading input file "avrm8ledtest.hex"
avrdude: input file avrm8ledtest.hex auto detected as Intel Hex
avrdude: writing flash (204 bytes):

Writing | ################################################## | 100% 0.11s

avrdude: 204 bytes of flash written
avrdude: verifying flash memory against avrm8ledtest.hex:
avrdude: load data flash data from input file avrm8ledtest.hex:
avrdude: input file avrm8ledtest.hex auto detected as Intel Hex
avrdude: input file avrm8ledtest.hex contains 204 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.08s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x0c != 0xff
avrdude: verification error; content mismatch

avrdude: safemode: Fuses OK

avrdude done. Thank you.

+ set +x



Das F bewirkt ja, dass er nicht drauf achtet ob der Controller antwortet oder nicht. Ist das Programm jetzt drauf?

kater
16.11.2005, 18:43
Na ueberleg mal, wenn er den mega8 vorher nicht gefunden hat bzw er nicht antwortet, dann haste das Programm ins Nirvana geschrieben.

Uberpruef mal die Verkabelung. MISO MOSI vertauscht und so.

jagdfalke
16.11.2005, 18:52
Man kann sich ja leider nicht immer darauf verlassen, was einem der PC erzählt. Denn das Writing sieht ja aus also obs geklappt hätte.
Die Verkabelung kann kaum falsch sein: richtig am Controller angeschlossen ist es und am PC kann man eh nix falsch machen.

jagdfalke
17.11.2005, 18:14
Weiß keiner Rat?

Hier nochmal die Files (dürften jetzt etwas anders sein):

.c-File

/*********************************************
* vim: set sw=8 ts=8 si :
* Author: Guido Socher, Copyright: GPL
* This program is to test the led connected to
* PC5.
* See http://linuxfocus.org/English/November2004/
* for details.
* Chip type : ATMEGA8
* Clock frequency : Internal clock 1 Mhz (factory default)
*********************************************/
#include <avr/io.h>
#include <inttypes.h>

//#define OLD 1

#ifdef OLD
/* compatibilty macros for old style */
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#endif /*OLD*/

void delay_ms(unsigned short ms)
/* delay for a minimum of <ms> */
/* with a 1Mhz clock, the resolution is 1 ms */
{
uint8_t inner,inner1;

while (ms) {
inner = 100;
while (inner) {
inner--;
inner1 = 70;
while (inner1) {
inner1--;
}
}
ms--;
}
}

#ifdef OLD
// old style now depricated:
void main(void)
{
// enable PC5 as output
sbi(DDRC,PC5);
while (1) {
// led on, pin=0
cbi(PORTC,PC5);
delay_ms(500);
// set output to 5V, LED off
sbi(PORTC,PC5);
delay_ms(500);
}
}

#else

/* new style */
void main(void)
{
/* INITIALIZE */
/* enable PC5 as output */
DDRC|= _BV(PC5);


/* BLINK, BLINK ... */

/* PC5 is 5 (see file include/avr/iom8.h) and _BV(PC5) is 00100000 */
while (1) {
/* led on, pin=0 */
PORTC &= ~_BV(PC5);
delay_ms(500);
/* set output to 5V, LED off */
PORTC|= _BV(PC5);
delay_ms(500);
}
}

#endif /*OLD*/


MakeFile:

# makefile, written by guido socher
MCU=atmega32
CC=avr-gcc
OBJCOPY=avr-objcopy
# optimize for size:
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues
#-------------------
all: avrm8ledtest.hex
#-------------------
help:
@echo "Usage: make all|load|load_pre|rdfuses|wrfuse1mhz|wrfuse4mhz|wr fusecrystal"
@echo "Warning: you will not be able to undo wrfusecrystal unless you connect an"
@echo " external crystal! uC is dead after wrfusecrystal if you do not"
@echo " have an external crystal."
#-------------------
avrm8ledtest.hex : avrm8ledtest.out
$(OBJCOPY) -R .eeprom -O ihex avrm8ledtest.out avrm8ledtest.hex
avrm8ledtest.out : avrm8ledtest.o
$(CC) $(CFLAGS) -o avrm8ledtest.out -Wl,-Map,avrm8ledtest.map avrm8ledtest.o
avrm8ledtest.o : avrm8ledtest.c
$(CC) $(CFLAGS) -Os -c avrm8ledtest.c
#------------------
load: avrm8ledtest.hex
./prg_load_uc avrm8ledtest.hex
# here is a pre-compiled version in case you have trouble with
# your development environment
load_pre: avrm8ledtest_pre.hex
./prg_load_uc avrm8ledtest.hex
#
loaduisp: avrm8ledtest.hex
./prg_load_uc -u avrm8ledtest.hex
# here is a pre-compiled version in case you have trouble with
# your development environment
load_preuisp: avrm8ledtest_pre.hex
./prg_load_uc -u avrm8ledtest.hex
#-------------------
# fuse byte settings:
# Atmel AVR ATmega8
# Fuse Low Byte = 0xe1 (1MHz internal), 0xe3 (4MHz internal), 0xe4 (8MHz internal)
# Fuse High Byte = 0xd9
# Factory default is 0xe1 for low byte and 0xd9 for high byte
# Check this with make rdfuses
rdfuses:
./prg_fusebit_uc -r
# use internal RC oscillator 1 Mhz
wrfuse1mhz:
./prg_fusebit_uc -w 1
# use internal RC oscillator 4 Mhz
wrfuse4mhz:
./prg_fusebit_uc -w 4
# use external 3-8 Mhz crystal
# Warning: you can not reset this to intenal unless you connect a crystal!!
wrfusecrystal:
@echo "Warning: The external crystal setting can not be changed back without a working crystal"
@echo " You have 3 seconds to abort this with crtl-c"
@sleep 3
./prg_fusebit_uc -w 0
#-------------------
clean:
rm -f *.o *.map *.out *t.hex
#-------------------


prg_load_uc

#!/bin/sh
prg="adude"
if [ "$1" = "-u" ]; then
shift;
prg="uisp"
fi
if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
echo "prg_load_uc -- load a .hex file into a atmega8 microcontroller"
echo ""
echo "Usage: prg_load_uc [-hu] File.hex"
echo ""
echo "OPTIONS: -h this help"
echo " -u use uisp instead of avrdude"
echo " avrdude can automatically detect dapa or avrusb500."
echo " uisp can only be used with the parallel port dapa."
echo ""
echo "This script can be easily adapted to different programmer types"
exit 0
fi
pfile="$1"

if [ "$prg" = "uisp" ]; then
set -x
uisp -dlpt=/dev/parport0 --erase -dprog=dapa
uisp -dlpt=/dev/parport0 --upload if="$pfile" -dprog=dapa -v=3 --hash=32 --verify
set +x
fi
if [ "$prg" = "adude" ]; then
if grep "Vendor=0403 ProdID=6001" /proc/bus/usb/devices > /dev/null ; then
set -x
avrdude -F -p m8 -c avrusb500 -e -U flash:w:"$pfile"
set +x
else
set -x
avrdude -F -p m8 -c dapa -e -U flash:w:"$pfile"
set +x
fi
fi

SprinterSB
17.11.2005, 22:31
-- ist deine Hardware richtig aufgebaut? (ISP, Spannung, Widerstände)
-- passt die Hardare zu den Optionen von avrdude? (Progger, µC)
-- wird der richtige Port verwendet?
-- ist der Port auf bidirektional? (BIOS-Setup)

izaseba
17.11.2005, 22:54
Hallo,
was ist das für ein Programmer "dapa" ?
War der bei avrdude von Suse dabei, oder hast Du den selber konfiguriert?

schaumal in /etc/avrdude.conf
wie der definiert ist, und ob die Pinbezeichnung in der conf wirklich auch stimmt.
Den Parameter -F kannst Du vergessen, wenn es ohne nicht geht, dann stimmt da was nicht.

Gruß Sebastian

jagdfalke
19.11.2005, 09:55
Mein avrdude.conf befindet sich in /usr/local/etc/, ist leider zu groß um es zu posten (Begrenzung auf 20000 zeichen)

Ich check da garnix in der Datei. Meine Hardware ist das RNB-FRA 1.1 mit Atmega32. Unter Windows hat es einwandfrei funktioniert, jedenfalls mit Bascom. Als Programmer musste man da glaub ich STK500 oder sowas ähnliches angeben. Das Verbindungskabel ist auch von robotichardware.de gekauft. Kann also nix falsch sein an der Hardware.

avrdude konfiguriert??? wtf? Ich habs einfach installiert so wie ich das package bekommen hab und Ende. Hab da nix verstellt in den conf-Files.

izaseba
19.11.2005, 10:29
stk500 ??
stk500 hat einen programmer, der an der seriellen Schnittstelle hängt, und ich meine Du hat einen, der am Parallelport hängt, oder hab ich mich da verlesen? 8-[

Wenn Du also am Parport hängst, ist die config sehr einfach, Beispiel:



#
# PROGRAMMER DEFINITIONS
#

programmer
id = "einfach";
type = par;
reset = 16;
sck = 1;
mosi = 2;
miso = 11;
;

Das ist ein ausschnitt aus meiner avrdude.conf, die definition habe ich mir selber erstellt, was sagt sie aus ?
id - bezeichnung, das ist der parameter der später an -c übergeben wird
type -> par naja, Parallelport
und danach die Pins an den die signale hängen, also bei mir z.B am Pin 16 hängt reset, am 1 sck usw.

Such mal in deiner avrdude.conf nach der sektion
#
# PROGRAMMER DEFINITIONS
#

und schau welche id mit deiner Verdrahtung übereinstimmt, wenn es keine gibt, erstelle sie selber nach dem Muster von mir.
angesprochen wird das ganz einfach so:


avrdude -patmega32 -ceinfach.





Mein avrdude.conf befindet sich in /usr/local/etc/

Naja, Suse schmeißt immer alles durcheinander.

Gruß Sebastian

jagdfalke
20.11.2005, 15:29
Also ich bin jetzt schon mal so weit, dass er auf den Befehl

avrdude -p atmega32 -c stk200 avrm8ledtest.hex
hin das hier ausgibt:


avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502

avrdude: safemode: Fuses OK

avrdude done. Thank you.



Was muss ich jetzt machen, dass er das .hex-File rüberschmeißt ???
mfg
jagdfalke

izaseba
20.11.2005, 16:08
schön, also ein Par programmer mit stk200 Verdrahtung.


Was muss ich jetzt machen, dass er das .hex-File rüberschmeißt ???

Schonmal was von manpages bei Linux gehört ?
ein -h Parameter bewirkt auch wunder...
also bevor Du weiter fragst tipe in die Konsole


man avrdude

oder auchmal


avrdude -h


ein Tip, das kannst Du sogar bei fast allen Tools, oder Konsolenbefehlen machen :-b

Aber, damit das mal schneller geht hier was für den Anfang:



avrdude -patmega32 -cstk200 -U flash:w:deinprogrammalshexdatei.hex


Schreibt eine *.hex Datei in den Flash



avrdude -patmega32 -cstk200 -U eeprom:w:deineeprominhalt.eep


Schreibt was in den eeprom

fusebits werden mit fusel oder fuseh oder nur fuse, oder garnicht, je nach AVR angesprochen.

Was gibt es noch? naja anstatt *:w:* kann man noch *:r:* bzw *:v:* eintippen, der Parameter -t ist auch ganz gut...

Man kann den quatsch natürlich auch komplett in Makefile übernehmen, oder in einen kleinen script, um sich das viele rumgetippe zu sparen.

Ich hoffe, daß ich helfen konnte

Gruß Sebastian

jagdfalke
20.11.2005, 17:52
Danke für die Hilfe, eine Frage beleibt jetzt noch: Was ist der Unterschied zwischen Eeprom und Flash?

SprinterSB
20.11.2005, 18:00
Danke für die Hilfe, eine Frage beleibt jetzt noch: Was ist der Unterschied zwischen Eeprom und Flash?

Prinzipell vom Aufbau her oder aus Anwendersicht beim AVR?

izaseba
20.11.2005, 18:06
klappt es jetzt?
Ich hoffe doch.

wie soll ich jetzt Deine Frage beantworten :-k

also im flash wird Dein Programm abgelegt, naja auch irgendwelche Daten,Texte usw.
Das Problem ist, man kann zu Laufzeit nicht reinschreiben, es wird nur einmal beschrieben und zwar beim Programmieren. Zu Laufzeit ist Flash Readonly.
Willst Du z.B. irgendwelche Meßdaten, irgendwelche Werte zu Laufzeit dauerhaft speichern, verändern, kannst Du das nur im EEprom machen.
Ich habe z.B. bei meinem Akkuloader alle Akkudaten im EEprom gespeichert.
So kann ich nach jeder Ladung den Wert für Anzahl der Ladungen um 1 erhöhen, somit weiß ich immer, wie oft ich mein Akku geladen habe.

soviel dazu, vielleicht gibt es hier noch jemanden, der mehr dazu sagen kann, bzw. meine Aussage kippt.

Gruß Sebastian

jagdfalke
20.11.2005, 19:30
Achso, das Flash ist praktisch wie ein RAM im PC. Das Programm ist im RAM und läuft, Das Eeprom ist mehr wie die Festplatte. Ich weiß, an manchen Stellen hinkt der Vergleich aber ich denke ich habs kapiert.

Ich denke mal, dass es jetzt klappt. Der Output zeigt, dass er ließt und löscht und schreibt und ließt und vergleicht, oder so ähnlich.
Ich kann leider nicht herausfinden ob das Programm wirklich ausgeführt wird, da ich noch keinerlei skills in der Programmierung in C habe. (Ich hatte genauso wenig Ahnung in Bascom :D) Ich muss wohl erstmal ganz von vorne anfangen.
Wenn jemand noch nen Tip hat, wo ich anfangen soll, immer raus damt !

mfg
jagdfalke

izaseba
20.11.2005, 19:43
Naja, das stimmt nicht so ganz, was Du da geschrieben hast.
Hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) ist
ein Tutorial für avr-gcc , ich denke, damit hast Du erstmal genug zu tun.

Viel Spaß dabei

Gruß Sebastian

linux_80
20.11.2005, 19:44
Also RAM so wie Du jetzt geschrieben hast eher nicht, denn RAM hat der AVR auch noch, in dem diverse Variablen gehalten werden.
Im Flash ist nur das Programm, und wird von dort auch beim ausführen gelesen.
Wenn man zB. Texte(Strings) verwendet hat, werden diese mit ins Flash gepackt, aber beim Programmstart ins RAM kopiert, macht der Compiler dann automatisch.