Hallo Sebastian,
Du schreibst bei Linux ist GCC dabei. Wie kann man den denn zum testen verwenden? Das ist doch der Compiler oder?
Ich werwende WinAVR und GCC unter Windows auch und wenn man damit auch testen kann wäre das super.
Druckbare Version
Hallo Sebastian,
Du schreibst bei Linux ist GCC dabei. Wie kann man den denn zum testen verwenden? Das ist doch der Compiler oder?
Ich werwende WinAVR und GCC unter Windows auch und wenn man damit auch testen kann wäre das super.
Hallo Henry,
Ob winavr auch den gcc (ohne avr) enthält kann ich Dir leider nicht sagen, meine Frau lässt mich nicht an ihren Win PC dran, aber falls das nicht gehen sollte gibt es noch andere Lösungen (sehe oben)
Ich teste meine Routinen in ganz normalen PC Programmen, das geht ganz gut, man muß aber ein paar Tricks benutzen, gerade habe ich Deine bcd Routine ausprobiert, und einen Fehler entdeckt ](*,)
und hier das PC- Programm:
Das Programm erwartet 2 Argumente in einer binären Form, die den Zustand Deiner Ports darstellen z.B. wenn alle Pins am Schalter auf high stehen <programname> 11100000 00000001Code:#include <stdio.h>
#include <string.h>
int bcd (int portd,int portb){
int var1 = portd & ((1<<5)|(1<<6)|(1<<7));
var1 >>=5;
if (portb & (1<<0))
var1 |= (1<<3);
return var1;
}
int bit2char (char *string) {
int i,result=0;
for (i=strlen(string)-1;i>=0;i--) {
if (*string++ == '1')
result |=(1<<i);
}
return result;
}
int main (int argc,char *argv[]) {
int a,b;
if (argc < 3) {
printf("Du musst zwei Parameter übergeben\n");
return 1;
}
printf ("Ergebnis %d\n",bcd(bit2char(argv[1]),bit2char(argv[2])));
return 0;
}
die bit2char Funktion wandelt nur die zwei Argumente aus char Arrays in int werte um, damit wird dann die bcd Funktion gefüttert und liefert den BCD Wert zurück, der ausgegeben wird...
Naja der Fehler lag bei
es muß heißenCode:if (PINB & (1<<PB0))
var1 |=(1<<4);
Wohl ein Bit zu weit geschoben...Code:if (PINB & (1<<PB0))
var1 |=(1<<3);
Und kompliziert ?
So lernt man C am einfachsten
Gruß Sebastian
P.S Ich habe das Programm oben nochmal geändert
Hallo Sebastian,
hast Recht, der Compiler heißt avr-gcc. Du testest Deine Programme also indem Du sie als PC-Programm compilierst und dann laufen lässt.
Danke für die Fehlerkorrektur, hätte ich erst gemerkt ween ich ab der achten Schalterstellung Probleme gehabt hätte.
Nö, wenn ich es so sehe dann macht das alles Sinn für mich. Ich werde zwar so schnell kein Programm aus dem Kopf zusammencoden können, aber mit meinen Aufzeichnungen als Hilfe wird der Wissensstand immer besser.Zitat:
Zitat von izaseba
Ist nur immer etwas ungewohnt, da ich am PC (als weiteres Hobby) Programme in Delphi (also Pascall) schreibe.
Naja, ich habe die Erfahrung gemacht, wenn man eine Sprache kann, kann man sich ziemlich schnell in eine andere reindenken.Zitat:
Ist nur immer etwas ungewohnt, da ich am PC (als weiteres Hobby) Programme in Delphi (also Pascall) schreibe.
Mit Pascal hatte ich bis jetzt nichts gemacht, ich fing auf C64 mit Basic an, dann auf Amiga mit C später PC C++, Java, PHP die sind fast alle gleich, bis auf die Objekt Orientierung, da bin ich etwas zu blöd dafür :mrgreen:
Mit der Bitschubserei muß Dir für die Zukunft nur merken
a = 1<<4 ergibt 00010000
das heißt man fängt bei 0 an
a = 1<<0 ergibt 0000001
wenn man aber die ganze Zahl schiebt fängt man bei 1 an
a = 1 ; //00000001
a <<=1; ergibt 00000010
usw.
deswegen
if (PINB & (1<<PB0))
var1 |=(1<<4);
hätte 000x0000 hier ben Bit gesetzt
naja, viel Spaß noch
Sebastian
Das war ein guter Hinweis. Ich denke das mit der schieberei habe ich jetzt denke ich begriffen. Kommt gleich in meine Sammlung nützlicher infos zur µC programmiererei ;)
Gute Nacht dann erst einmal und danke für die ausdauernde Hilfe. (Wir werden sicherlich noch einmal das Vergnügen haben hier im Forum ;) )
*** Fast (nicht ganz) OFFTOPIC ***
*** Fast (nicht ganz) OFFTOPIC ENDE***
Zitat:
Zitat von izaseba
SELBST ZENSIERT
Naja das Basic, als Programmiersprache ist nicht der alleinige Grund warukm ich mit BASCOM arbeite,
mit C wäre ich damals auch zufrieden gewesen,
wenn ich eine Anleitung gefunden hätte wie man das "Zeuch" richtig compiliert (damals zu viele unvollständige und z.T. widersprüchliche Anleitungen).
Jetzt ist es eben so, und ich bin zufrieden damit.
Ich will keinesfalls jemanden von Bascom überzeugen ***Jeohva, Jehova schrei***.
Hoffentlich entseht jetzt nich so ein Krieg wie mit Windows/Linux.
SELBST ZENSIERT
Das hoffe ich auch, aber ich verstehe nicht so ganz, warum Du hier in gcc Forum hausieren gehen muß, lass die Leute antun, jedem das seine :-)Zitat:
Hoffentlich entseht jetzt nich so ein Krieg wie mit Windows/Linux.
Gegen Deine 6 Argumente hab ich nur das zu bieten
Vielleicht kannst Du den Artikel ergänzen ?
Und bitte versuche das Ergebnis nicht schönzureden, Zitat
vor allem dieses brav hört sich so an, als ob es ein Vorteil wäre ;-)Zitat:
Remark: Das reine Register-rechnen (GCC) macht Bascom nicht. Er arbeitet immer im SRAM , brav mit Load & Store. (PicNick)
Ach so, Deine Lösung hat immernoch einen Fehler :wink:
Gruß Sebastian
OOOPS,
Sorry...
habe garnich realsiert, dass das heir ein C-Forum ist,
Jetzt erst da Du es ansprichst.
Ich habe einfach auf die Frage hin gepostet und nicht auf das Forum geachet.
Ich war wo so voller Tatendrang...
Nochmal Entschuldigung
Ich wollte hier nicht Wildern.
ENTSCHULDIGUNG ENTSCHULDIGUNG ENTSCHULDIGUNG
Soll ich meine Beiträge wieder löschen?
Eigentlich OT, aber weil ich grad' vorbeikomme
"Brav" sollte da nicht implizieren, daß C "schlimm" sei.Zitat:
Zitat von izabesa
Ich wollte das Gespräch aber nicht unterbrechen
Hallo PicNick,
sorry, es war auch nicht gegen Dich gerichtet, ich find es gut, daß Du bei diesem Vergleich mitgemacht hast, mir ist es auch im Endeffekt egal, womit man seine Programme schreibt, nur objektiv soll man dabei bleiben und keinen Kreuzzug führen.
Für mich ist dieses Thema abgeschlossen.
Gruß Sebastian