Microcontroller Frust...

Mal Bascom ausprobieren. Ist zwar Basic, aber für simpel Sachen, wohl so gut wie ohne Einarbeitung zu machen.

Läuft mit AVR und Du kannst immer noch auf GCC umsteigen.

Gruß Stephen

Reply to
Stephen Illenseer
Loading thread data ...

Doch theoretisch schon. Ich vertrau dem Linker vom alten KSC aber nicht...

Gruß:

Christian

Reply to
Christian Hoffmann

Hast Du die beiden unter

formatting link
schon ausprobiert?

IMHO gibt es irgendwo eine Turbopascal- ähnliche Entwicklungsumgebung füri die 8051er, suche mal danach, wenn sie nicht schon bei einem der Links auf der angegebenen Seite dabei ist.

C ist Pascal nicht sooo unähnlich, das man damit nicht klarkommen könnte und einen 8051 will man sowieso nicht verwenden...

Gruß,

Holm

--
L&P::Kommunikation GbR          Holm Tiffe  * Administration, Development
FreibergNet.de Internet Systems                     phone +49 3731 419010
Bereich Server & Technik                             fax +49 3731 4196026 
D-09599 Freiberg * Nonnengasse 31a              http://www.freibergnet.de
Reply to
Holm Tiffe

[...]

[...]

Fuer neuentwicklungen sollte man f2c oder ueberhaupt Fortran nie nehmen, es ist halt nur eine Alternative um alten Kram uebersetzen zu koennen, g77 produziert (oder tat das damals zumindest) undebugbare COMMON-Bloecke.

Fortran hat genau wie PASCAL den Fehler, das I/O in der Sprache definiert ist und nicht bei Bedarf ueber eine Library dazukommt, und auf einem uC I/O halt ganz was anderes als auf einem PC...

--
Dr. Juergen Hannappel          http://lisa2.physik.uni-bonn.de/~hannappemailto:hannappel@physik.uni-bonn.de  Phone: +49 228 73 2447 FAX ... 7869
Physikalisches Institut der Uni Bonn Nussallee 12, D-53115 Bonn, Germany     
CERN: Phone: +412276 76461 Fax: ..77930 Bat. 892-R-A13 CH-1211 Geneve 23
Reply to
Juergen Hannappel

Hallo Holm,:

Danke für den Link. Sehr schöne Zusammenfassung!

Reply to
Christian Hoffmann

Ich probier es gerade aus. Wahrscheinlich nur ein Anfängerfehler, aber: Schon wieder ein HEX-Problem.

#include

void main(void) { P3_7 = 0; }

produziert sdcc folgendes HEX:

:040000000200383290 :01000B0032C2 :0100130032BA :01001B0032B2 :0100230032AA :01002B0032A2 :0B003800758107120034E582600302AE :02004300002C8F :080045007900E94400601B7A18 :05004D00009000807826 :0C0052000075A000E493F2A308B80002BF :09005E0005A0D9F4DAF275A0FF47 :080067007800E84400600C7908 :0D006F0000900000E4F0A3D8FCD9FAF6D808 :01007C00FD86 :03007D0002002C52 :05002C0012003180FE0E :02003100C2B754 :0100330022AA :03003400758200D2 :0100370022A6 :00000001FF

Mein Brenner schmeißt mich mit der Meldung "Adressfehler bei 070" raus, wenn ich versuche, dieses winzige Programm zu brennen.

Zum Vergleich das selbe in Pascal:

program test;

begin p3.7 := false; end.

produziert KSC pascal 51 folgendes HEX:

:0200000080245A :1B00260012003002002CC2B780FE752223D000D001852281C001C000D2082258 :00000001FF

Und da funktioniert es.

Irgendwelche Tips?

Gruß:

Christian

Reply to
Christian Hoffmann

Hallo Christian!

Es könnte sein, daß Du für den Brenner die Adressen im HEX-File sortieren mußt. Was ich allerdings nicht weiß, ist, wie sich die Checksum verändert, wenn man Zeilen dabei zusammenfäßt.

Gruß Karsten

Christian Hoffmann schrieb:

Reply to
Karsten Busenbender

Sdcc erzeugt keinen durchgehenden Code. Das heißt undefinierte bereiche stehen nicht im Hexfile. Ausserdem sind nicht alle Addressen durchgehend sondern so wie sie gelinkt wurden im hexfile sortiert.

Dein Brenner wird das nicht mögen. Falls dein Brenner auch Bin-files verarbeitet ist bei sdcc ist ein tool dabei das Hexfile in eine Binärdatei wandelt.

Ansonsten kannst du dieses Perl-script verwenden.

-------ihex2bin.pl------ #!/usr/bin/perl --

open(FH,"$ARGV[0].ihx")||die "Quelldatei"; open(FO,">$ARGV[0].bin")||die "open Target"; binmode FO; $offset=-1;

while( !eof(FH)){ $line=; if($offset

Reply to
Gernot Fink

und was soll das Programm machen wenn P3_7 auf 0 gesetzt ist und main beendet wird wo gehts dann weiter ein OS hast du ja nicht. Auch wenn ich von Sdcc nicht gerade viel halte. Für Probleme mit dem Hex Code soltest du mal den Hersteller des Programmers verantwortlich machen. Auf dein Pascal will jetzt gar nicht erst eingehen.

Thomas

Reply to
Thomas Zepf

Hi Thomas,

es soll nix machen. Es ist nur der allererste Test eines Anfängers, der noch nie in seinem Leben ein C-Programm für einen Microcontroller geschrieben hat.

Das Hex-Problem ist Dank dem Tip von Gernot inzwischen erkannt. Mein Brenner mag es wirklich nicht, wenn die Adressen ungeordnet sind...

Gruß:

Christian

Reply to
Christian Hoffmann

Thomas Zepf schrieb:

Hallo Thomas!

Diese Programm ist mindestens so intelligent wie das obligatorische "Hello World". Mit dem einzigen Unterschied, daß es nicht sonderlich viel Sinn macht, an einem 8-bit-uC einen Bildschirm anzuschliessen. Der Pin bleibt auch nach Programmende auf Low und es passiert sonst weiter nichts. Zumindestens kann man auf diese Weise eine LED aufleuchten lassen und sehen, ob das Programmieren, Kompilieren und Linken funktioniert. Ist doch auch schon was, oder? Wahrscheinlich hast Du auch mal mit Pacal oder Basic angefangen und Dein erstes C-Proggi war wohl auch nicht viel groesser ...

Spaeter kommt dann Windows Server 2003 ... wegen dem fehlenden OS ... :-)

Gruß Karsten

Reply to
Karsten Busenbender

du hast nicht verstanden was ich meine: ein microconroller programm sieht so aus void main (void) { P3_7=0; while(1) // diese Endlosschleife ist wichtig ; } sonst gehts aus main raus und da ist dann nichts mehr. Ich habe auch nicht den Sinn des Programms gemeint, solche Progs schreibe ich auch wenn ich die Installation des Compilers prüfe. Ich programmiere auch heute noch fast aussschlieslich in Pascal (auf dem PC) Allerdings würde ich Pascal nie auf einem 8 Bit Microcontroller verwenden. Speziell KSC kannst du da vergessen.

Reply to
Thomas Zepf

"Thomas Zepf" schrieb:

Nein, das ist kein C-Programm. ;-)

int main(void); int main(int, char **);

sind die beiden gültigen Prototypen.

OK, für ein Controller-Programm könnte man auch auf die Anforderung eines `hosted environment' verzichten und ein `standalone environment' beanspruchen, dann hat man aber keinen Anspruch mehr auf Bibliotheksfunktionen und schaltet zwangsweise auch alle Optimierungen ab, die der Compiler bezüglich Bibliotheksfunktionen machen darf.

In einem hosted environment darf der Compiler bspw. in

#include

for (int i = 0; i < strlen("foo"); i++) ...

den strlen-Aufruf komplett eliminieren und durch die Konstante 3 ersetzen, bei standalone darf er das nicht mehr, sondern muss die Funktion strlen (noch dazu in jedem Schleifendurchlauf) aufrufen.

int main(void) { init(); for (;;) { ... } return 0; }

ist kompatibel, funktioniert genauso gut, und ein ordentlicher Compiler entfernt den überflüssigen return-Wert.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

Ich mag immer noch kein C. Aber ich habe ein wenig gelernt und das Pascal-Programm 1:1 übersetzt. SDCC bekommt es sogar mit byteweiser Multiplikation (8bit * 8 bit = 16bit) hin, ganz ohne Bitschubsen.

Es funktioniert :-))) Endlich!

Um die HEX-Dateien von SDCC passend für meinen Brenner zu bekommen kann man WinHex benutzen von X-Ways Software. Oder ein Pascal-Programm schreiben...

Warum es mit KSC partout nicht funktionieren laufen wollte wird wohl für immer ein Rätsel bleiben...

Für Eure Hilfe und Angebote noch einmal vielen herzlichen Dank!

Ich geh jetzt zurück zu meinen Röhren...

Gruß:

Christian

Reply to
Christian Hoffmann

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.