Hallo, ich komme mir schon total doof vor, hab alles mögliche gelesen, aber der code funktioniert nicht: int main(void) { uint8_t i; char ic[]="abcd"; char ic2[]="dcba"; for(i=0;i<4;i++) { if(ic[i] == ic2[i]) { lcd_writechar(97);//schreibt einfach ein a } } } das dämliche: ich bekomme 4 a's :-( ich versuche strings auf's graphik display zu schreiben, dort kommt nur müll an. wie der obige code zeigt passiert ja auch seltsames. irgend was stimmt mit den char arrays nicht. kann mir mal bitte jemand die tomaten von den augen nehmen? danke alex
Hmm. Auf Anhieb sehe ich da nichts. Hast Du den Code neu getippt, oder per Cut&Paste eingefuegt? Falls neu getippt: Ein beliebter Fehler, der das von Dir geschilderte Verhalten erklaeren koennte, waere anstelle von if(ic[i] == ic2[i]) hast Du im Original Code if(ic[i] = ic2[i]) (also eine Zuweisung anstatt einem Vergleich)
Wie sieht denn das avr-objcopy-Kommando aus, mit dem du die iHex-Datei erzeugst? Ich wette, dass du vergessen hast, die Initialisierungsdaten von .data mit zu kopieren...
hallo, jetzt kopiere ich den code mal rein (ich finde aber keine abweichung). ich lasse mal alles andere stehen: int main(void) { uint8_t ivar; uint16_t i; uint16_t j; uint16_t k; char ic[] = "abcd"; char ic2[] = "dcba"; unsigned char my_string[]="123"; //*************** the global init init(); lcd_setadress(0,0); //my_string[40]="Hallo"; //strcpy(my_string, "test"); //lcd_stringr(my_string); //lcd_writechar(97); // if(ic[0]!='a') lcd_writechar(98); //if(ic[0]=='a') lcd_writechar(97); for(i=0;i<4;i++) { if(ic[i] == ic2[i]){ lcd_writechar(97); } } } unten steht mein makefile. die objcopy zeile sieht so aus: ${OBJCOPY} -j .text -O ihex ${OBJDIR}/${PROJNAME}.out \ ${BINDIR}/${BINNAME} also nix von .data. wie müsste denn das aussehen? ich muss aus dem gleichen .out file .text und .data rauskopieren richtig? danke alex # SHELL=/bin/sh COMPILER=avr-gcc ASSEMBLER=avr-as #ASM with cpp ASSEMBLER=avr-gcc MMCU=atmega32 #the asm flags ifeq (${ASSEMBLER},avr-as) AFLAGS=-mmcu=${MMCU} \ -I ${SRCDIR} \ # --gstabs \ # -Os endif ifeq (${ASSEMBLER},avr-gcc) AFLAGS=-mmcu=${MMCU} \ -c \ -x assembler-with-cpp \ -I ${SRCDIR} \ -Os \ # -Wa,-gstabs endif #the compiler flags ifeq (${COMPILER},avr-gcc) FLAGS=-mmcu=${MMCU} \ -Os \ -c \ # -g endif #----------- NO USER-INPUT NEEDED HERE ---------------------------- #the asm command ifeq (${COMPILER},avr-gcc) ASSEMBLE=${ASSEMBLER} ${AFLAGS} endif #the compile command ifeq (${COMPILER},avr-gcc) COMPILE=${COMPILER} ${FLAGS} endif #the link command ifeq (${COMPILER},avr-gcc) LINK=${COMPILER} -mmcu=${MMCU} endif #------------------------------------------------------------------ #____________________ DIRECTORIES __________________ #___________________________ root directory of the SESM distribution ROOTDIR=./ #___________________________ path to the object files BINDIR=${ROOTDIR}bin #___________________________ path to the object files OBJDIR=${ROOTDIR}bin/obj #___________________________ path to the object files SRCDIR=${ROOTDIR}src #_______________________________________________________________________ _ #____________________ ADDITIONAL LIBRARIES __________________ LLIBS= OBJCOPY=avr-objcopy #the objects to compile/link OBJ = main.o \ s1d1565.o \ #the assembler sources ASM= lib_eybasm.o \ #name of the final binary PROJNAME=eyb BINNAME=${PROJNAME}.hex #define the path for the obj files: vpath %.o ${OBJDIR} #_____________________ the targets _______________________ default: shift ${BINDIR}/${BINNAME} #the bin target (depends on all obj) ${BINDIR}/${BINNAME}: ${OBJDIR}/${PROJNAME}.out @echo "---OBJCOPY-----------------------------------------------------------" ${OBJCOPY} -j .text -O ihex ${OBJDIR}/${PROJNAME}.out ${BINDIR}/${BINNAME} @echo "---------------------------------------------------------------------" @echo " " #linker ${OBJDIR}/${PROJNAME}.out: ${ASM} ${OBJ} @echo "---LINKER------------------------------------------------------------" ${LINK} -o ${OBJDIR}/${PROJNAME}.out -W1,-Map,${OBJDIR}/${PROJNAME}.map $(patsubst %.o,${OBJDIR}/%.o,$(OBJ)) $(patsubst %.o,${OBJDIR}/%.o,$(ASM)) ${LLIBS} @echo "---------------------------------------------------------------------" @echo " " #the object targets (% means all) (depend on the source code) #this compiles the *.c --> *.o (only those in OBJ-list) ${OBJ}: %.o: ${SRCDIR}/%.c @echo "---COMPILER----------------------------------------------------------" ${COMPILE} -o ${OBJDIR}/$@ ${SRCDIR}/$*.c @echo "---------------------------------------------------------------------" @echo " " #the asm targets (% means all) (depend on the source code) #this compiles the *.S --> *.o (only those in ASM-list) ${ASM}: %.o: ${SRCDIR}/%.S @echo "---ASSEMBLER---------------------------------------------------------" ${ASSEMBLE} -o ${OBJDIR}/$@ ${SRCDIR}/$*.S @echo "---------------------------------------------------------------------" @echo " " flash: ${BINDIR}/${BINNAME} @echo "---FLASH-------------------------------------------------------------" #avrdude -P /dev/ttyUSB0 -c stk500v2 -p m32 -U flash:w:${BINDIR}/${BINNAME} avrdude -V -P /dev/ttyUSB0 -c stk500v2 -p m32 -U flash:w:${BINDIR}/${BINNAME} @echo "---------------------------------------------------------------------" @echo " " new: shift clean default clean: @echo "---CLEAN-------------------------------------------------------------" rm -rf ${OBJDIR}/*.o rm -rf ${BINDIR}/${BINNAME} rm -rf ${SRCDIR}/*~ @echo "---------------------------------------------------------------------" @echo " " shift: @echo " " @echo " " @echo " " @echo " " terminal: @echo "---TERMINAL------------------------------------------------------------ -" @echo "use 'r xfuse'" avrdude -P /dev/ttyUSB0 -c stk500v2 -p m32 -t @echo "---------------------------------------------------------------------" @echo 'use the following command to flash the fuse' @echo 'avrdude -P /dev/ttyUSB0 -c stk500v2 -p m32 -U xfuse:w:0xii:m ' @echo " "
lesen bildet :-) aus man avr-objcopy: -j sectionname --only-section=sectionname Copy only the named section from the input file to the output file. This option may be given more than once. Note that using this option inappro- priately may make the output file unusable. besonders das letzte wort ;-) wie bin ich drauf gekommen nur nen teil zu kopieren? weiss ich gar nicht mehr. gibts nen teil den ich NICHT brauche? gruß alex
Eigentlich genügt -j .text -j .data. Damit hättest du allerdings private ROM-Sections nicht dabei, z. B. falls du ein .bootloader benutzen willst. Eine andere sinnvolle Variante ist -R .eeprom, also alle loaded sections außer der EEPROM-Section übernehmen.
ok, nachdem ich nen fehler in den display routinen gefunden hatte, funktioniert's nun wirklich so wie's soll. ich hatte die routinen glaub ich hier aus dem vorum (s1d1565) die richtige version ist: void lcd_stringr (unsigned char *s) //Display String from RAM {unsigned char i; while (*s){ for (i=0; i<6; i++){ lcd_writebyte(pgm_read_byte(&Font[*s][i])); } s++; } } vorher war das s++ im writebyte aufruf mit drin, was natürlich nur mist produziert. danke alex
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.