Forum: Compiler & IDEs HEX File für STC12C5A60S2 kompilieren


von BorstyBo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
das hier ist also mein erstes Anliegen an euch.

Ich habe mir bei Banggood diesen 8x8x8- LED-Würfel bestellt 
(http://www.banggood.com/8x8x8-LED-Cube-3D-Light-Square-Blue-LED-Electronic-DIY-Kit-p-1055438.html) 
und würde nun gerne das C-Programm ändern und es erneut als HEX-Datei 
auf diesen übertragen.

Welche Software bzw. welchen Compiler könnt ihr mir da empfehlen?
Die Anforderung an diese Software ist, dass sie kostenlos aus einem 
C-Programm (2364 Zeilen) eine HEX-Datei für den STC-Mikrocontroller 
erstellen kann.
Das Übertragen stellt für mich kein Problem dar, eine kurze Anleitung 
zum Compilieren wäre jedoch nicht verkehrt (falls mehrere Schritte 
notwendig sind, bzw. die Software nicht nur dafür geschrieben wurde, aus 
einer C-Datei eine HEX-Datei zu erzeugen).
Da dies auch eine einmalige Sache ist, möchte ich mich nicht großartig 
in dieses sehr komplexe Themengebiet einarbeiten müssen.
Ich arbeite gerne mit, das ist keine Frage, möchte also nicht, dass ihr 
jetzt alles für mich macht, aber behaltet das bitte im Hinterkopf

Hauptsächlich geht es darum, dass ich alle LED's einmal einzeln 
ansteuern möchte, da etwas nicht so funktioniert, wie es sollte.

Ich wäre euch für die Hilfe sehr dankbar, da ich allmählich etwas 
verzweifle!
(Besagte C-Datei befindet sich im Anhang)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hier solltest Du ein paar Hinweise finden können:

Beitrag "STC12C5A60S2 (a.k.a 80C51) programieren mit mySmartUSB light"

von BorstyBo (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Hier solltest Du ein paar Hinweise finden können:
>
> Beitrag "STC12C5A60S2 (a.k.a 80C51) programieren mit mySmartUSB light"

Besten Dank, aber das hatte ich schon so ziemlich als erstes probiert 
und hier stößt man am die Grenze der sehr großen C-Datei, weswegen ich 
die Anzahl der Zeilen bewusst erwähnt habe.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Zeilenzahl ist bei C-Programmen nahezu komplett ohne Aussagekraft, 
entscheidend ist die erzeugte Codegröße.

2300 Zeilen ist übrigens nicht "sehr groß". Das ist groß genug, um 
ziemlich unübersichtlich sein zu können, aber es gibt ganz erheblich 
größere C-Projekte (die dann aus mehreren Dateien bestehen, was bei 
Deinem Problem aber auch nicht hilft).


Dann wirst Du Dir einen anderen C-Compiler für 8051 suchen müssen. 
Probier' mal den SDCC.

: Bearbeitet durch User
von BorstyBo (Gast)


Lesenswert?

Ist mir schon klar, dass es auf die Codegröße ankommt, wenn ich zehn 
Blatt Papier habe und auf jedem Blatt steht nur ein Wort, dann ist es 
noch lange kein Referat.
Aber anhand der Zeilenangabe, kann man sich orientieren. Das wollte ich 
damit bezwecken.
Mit dem SDCC Compiler komme ich leider trotz Zuhilfenahme des SDCC 
Compiler User Guides überhaupt nicht weiter.

Es blitzt nur kurz eine Eingabeauffoderungsbox auf und das war es dann.

Die Bedienungsanleitung:
http://sdcc.sourceforge.net/doc/sdccman.pdf

Kapitel 3 "Using SDCC" bzw. 3.2 "Compiling" ist scheinbar ehr etwas für 
Programmierer oder zumindest Fortgeschrittene und somit überhaupt nichts 
für mich. Ich möchte wie gesagt nur Kompilieren Datei.c -> Datei.hex 
nicht mehr und nicht weniger. Daher möchte ich mich nicht in das, wie 
ich ja weiß, sehr komplexe Themengebiet einarbeiten, da es für mich eine 
einmalige Sache ist.

von Steffen H. (Firma: www.shotech.de) (mc_sho) Benutzerseite


Angehängte Dateien:

Lesenswert?

ich habe mal das source file für dich übersetzt. Ich hoffe, das es auch 
funktioniert.

von BorstyBo (Gast)


Lesenswert?

Steffen H. schrieb:
> ich habe mal das source file für dich übersetzt. Ich hoffe, das es
> auch
> funktioniert.

Hast du dir die Frage durchgelesen? ^^

Das ist ja wirklich nett von dir und wirklich löblich, aber leider nicht 
das, was ich meinte. Die fertige C-Datei und kompilierte HEX-Datei habe 
ich bereits.

Mir geht es darum den Quelltext abzuändern und erneut zu kompilieren, 
sodass ich alles mögliche testen kann.

Trotzdem danke ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

BorstyBo schrieb:
> Es blitzt nur kurz eine Eingabeauffoderungsbox auf und das war es dann.

Du solltest lernen, wie man mit Kommandozeilenprogrammen umgeht. Die 
ruft man nicht auf, indem man im Windows-Explorer draufklickt.

von BorstyBo (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
>
> Du solltest lernen, wie man mit Kommandozeilenprogrammen umgeht. Die
> ruft man nicht auf, indem man im Windows-Explorer draufklickt.

... Aber wie es richtig geht möchtest du mir auch nicht sagen wie?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist ein Kommandozeilencompiler. Der wird ... aus der Kommandozeile 
heraus aufgerufen. Wie das geht steht in der Dokumentation.

Und die hast Du ja sogar schon selbst gefunden.

Was ist an dem hier so unverständlich?
1
3.2.1 Single Source File Projects
2
3
For single source file 8051 projects the process is very simple. Compile your programs with the following command
4
5
"sdcc sourcefile.c". 
6
7
This will compile, assemble and link your source file. Output files are as follows:
8
9
• sourcefile.asm - Assembler source file created by the compiler
10
• sourcefile.lst - Assembler listing file created by the Assembler
11
• sourcefile.rst - Assembler listing file updated with linkedit information, 
12
                   created by linkage editor
13
• sourcefile.sym - symbol listing for the sourcefile, created by the assembler
14
• sourcefile.rel - Object file created by the assembler, input to Linkage editor
15
• sourcefile.map - The memory map for the load module, created by the Linker
16
• sourcefile.mem - A file with a summary of the memory usage
17
• sourcefile.ihx - The load module in Intel hex format (you can select the Motorola 
18
                   S19 format with --out-fmt-s19. If you need another format you might 
19
                   want to use objdump or srecord - see also section 3.2.2). 
20
                   Both formats are documented in the documentation of srecord
21
• sourcefile.adb - An intermediate file containing debug information needed to create 
22
                   the .cdb file (with --debug)
23
• sourcefile.cdb - An optional file (with --debug) containing debug information. 
24
                   The format is documented in cdbfileformat.pdf
25
• sourcefile.omf - An optional AOMF or AOMF51 file containing debug information 
26
                   (generated with option--debug). The (Intel) absolute object module 
27
                   format is a subformat of the OMF51 format and is commonly
28
                   used by third party tools (debuggers, simulators, emulators).
29
• sourcefile.dump* - Dump file to debug the compiler it self (generated with option --dumpall) 
30
                 (see section 3.3.11 and section 9.1 ”Anatomy of the compiler”).

Das Ding erzeugt zwar diverse Dateien, aber dabei ist auch Deine 
gewünschte Hex-Datei, nur daß sie *.ihx statt *.hex genannt wird.

Ist das wirklich so schwer?

von BorstyBo (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist ein Kommandozeilencompiler. Der wird ... aus der
> Kommandozeile
> heraus aufgerufen. Wie das geht steht in der Dokumentation.
>
[...]
> Das Ding erzeugt zwar diverse Dateien, aber dabei ist auch Deine
> gewünschte Hex-Datei, nur daß sie *.ihx statt *.hex genannt wird.
>
> Ist das wirklich so schwer?

Ja es ist tatsächlich so schwer, da ich keinerlei Erfahrung damit habe, 
habe ich aber bereits erwähnt. Jetzt suche ich mal im Internet, wie man 
das in einer Kommandozeile öffnet, da mir die Bedienungsanleitung, wie 
ich ebenfalls bereits erwähnte, nicht viel weiterhilft. Außerdem tut es 
ja hier auch niemand.

Angenommen ich habe es irgendwie geschafft eine ".ihx"-Datei erzeugt, 
kann ich diese doch nicht eintfach in ".hex" umbenennen oder?

von Stephan H. (stephan-)


Lesenswert?

doch, warum nicht ? So es eine HEX ist.
Ich denke ihx steht für intel hex datei

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

BorstyBo schrieb:
> Außerdem tut es ja hier auch niemand.

Es tut mir ja leid für Dich, aber ... das sind so grundlegende Dinge 
in der Bedienung eines Computers, daß es schwerfällt, sich in jemanden 
hineinzuversetzen, der damit Probleme hat.

Vielleicht ist das Problem ja auch nur eines der verwendeten Namen.

Sagt Dir "Eingabeaufforderung" etwas? Oder "DOS-Fenster"?

von Sebastian K. (borstybo)


Lesenswert?

Rufus Τ. F. schrieb:
> BorstyBo schrieb:
>> Außerdem tut es ja hier auch niemand.
>
> Es tut mir ja leid für Dich, aber ... das sind so grundlegende Dinge
> in der Bedienung eines Computers, daß es schwerfällt, sich in jemanden
> hineinzuversetzen, der damit Probleme hat.
>
> Vielleicht ist das Problem ja auch nur eines der verwendeten Namen.
>
> Sagt Dir "Eingabeaufforderung" etwas? Oder "DOS-Fenster"?

Dann versuche es bitte, die Eingabeaufforderung ist mir bekannt.
Ich habe die Software "SDCC" im Standardinstallationsverzeichnis 
installiert, wie öffne ich es also nun und wie kompiliere ich die Datei?

Wenn ich das richtige gesehen habe kompiliere ich die Datei dann mittels
1
sdcc sourcefile.ihx
Aber wo muss ich dann die zu kompilierende Datei plazieren, dass er 
weiß, welche Datei er nehmen soll? Da fehlt ja noch etwas, oder nicht?

Ich bin mir immernoch nicht sicher, ob ".ihx"-Dateien und ".hex"-Dateien 
nicht nur das Gleiche, sondern auch dasselbe sind, ich die Datei also 
einfach umbenennen kann.
Das lässt sich aber hinterher herausfinden, wenn es dann soweit ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sebastian K. schrieb:
> Wenn ich das richtige gesehen habe

Nein.

Angenommen, Dein Sourcefile heißt "tollesprogramm.c", dann rufst Du das 
Ding so auf:

sdcc tollesprogramm.c

und erhältst, wenn alles klappt, diverse Dateien, dabei auch

tollesprogramm.ihx

von guest (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Angenommen, Dein Sourcefile heißt "tollesprogramm.c", dann rufst Du das
> Ding so auf:
>
> sdcc tollesprogramm.c

Du hättest vielleicht dazu schreiben sollen, daß er vorher noch in das 
Verzeichnis wechseln sollte, in dem "tollesprogramm.c" zu finden ist. 
Und falls er nicht weis wie das geht, er in der "Eingabeaufforderung" 
einfach mal 'help' eintippen sollte :)

von Sebastian K. (borstybo)


Lesenswert?

Rufus Τ. F. schrieb:
> Sebastian K. schrieb:
>> Wenn ich das richtige gesehen habe
>
> Nein.
>
> Angenommen, Dein Sourcefile heißt "tollesprogramm.c", dann rufst Du das
> Ding so auf:
>
> sdcc tollesprogramm.c
>
> und erhältst, wenn alles klappt, diverse Dateien, dabei auch
>
> tollesprogramm.ihx

Besten Dank bisher!
Fehlt nur noch die Frage am Anfang...Wie benutze ich SDCC?

Ich öffne ja nicht einfach ein Fenster der Eingabeaufforderung und tippe 
dort
1
sdcc tollesprogramm.c
ein. Ich muss ja irgendwie in das Programm SDCC kommen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sebastian K. schrieb:
> Ich öffne ja nicht einfach ein Fenster der Eingabeaufforderung und tippe
> dort

Doch. Genau darum geht es.

Du musst nur für zwei Dinge sorgen, damit das funktioniert:

Das Verzeichnis, in dem sdcc.exe liegt, muss im Pfad enthalten sein
(Das ist die Umgebungsvariable PATH), und Du musst in Deinem 
Eingabeaufforderungsfenster das Verzeichnis als aktuelles Verzeichnis 
wählen, in dem Deine Quelltextdatei liegt.

Ob ersteres der Fall ist, findest Du heraus, indem Du im 
Eingabeaufforderungsfenster einfach "sdcc" eingibtst.

Wird das hier ausgegeben
1
Der Befehl "sdcc" ist entweder falsch geschrieben oder
2
konnte nicht gefunden werden.

so ist die Umgebungsvariable PATH nicht korrekt gesetzt.

Wenn Du sdcc mit einem Installationsprogramm installiert hast, sollte 
das aber nicht der Fall sein.

Das Kommandozeilenfenster gibt Dir das aktuelle Verzeichnis als 
Bestandteil des sogenannten "Prompt" aus:
1
c:\Users\Borstybo>

Angenommen, Dein Programm liegt unter

c:\Users\Borstybo\Dokumente\Tolles C-Programm\

so musst Du folgendes eingeben, um dieses Verzeichnis zum aktuellen 
Verzeichnis zu machen:
1
cd "c:\Users\Borstybo\Dokumente\Tolles C-Programm\"

Achte auf die Anführungszeichen! Die sind wichtig, wenn im 
Verzeichnisnamen irgendwo ein Leerzeichen auftaucht.

Mit "dir" kannst Du Dir dann eine Liste der Dateien anzeigen lassen - 
tollesprogramm.c sollte jetzt dabei sein.


Und jetzt kannst Du sdcc auf die beschriebene Art und Weise aufrufen.

So macht man so etwas. Seit Anbeginn der PC-Zeit, seit der Urzeit von 
DOS ist das so, und --mal von syntaktischen Details abgesehen-- unter 
Linux ist das nicht anders.

von guest (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das Verzeichnis, in dem sdcc.exe liegt, muss im Pfad enthalten sein
> (Das ist die Umgebungsvariable PATH),

Macht wohl der Installer vom SDCC schon von allein.

Rufus Τ. F. schrieb:
> Ob ersteres der Fall ist, findest Du heraus, indem Du im
> Eingabeaufforderungsfenster einfach "sdcc" eingibtst.

Und das steht sogar direkt bei den Installationshinweisen mit dabei:
1
You can test the install by opening a DOS box and entering:
2
     sdcc -v
3
4
This should return sdcc's version number.

von BorstyBo (Gast)


Lesenswert?

guest schrieb:
> Rufus Τ. F. schrieb:
>> Das Verzeichnis, in dem sdcc.exe liegt, muss im Pfad enthalten sein
>> (Das ist die Umgebungsvariable PATH),
>
> Macht wohl der Installer vom SDCC schon von allein.
>
> Rufus Τ. F. schrieb:
>> Ob ersteres der Fall ist, findest Du heraus, indem Du im
>> Eingabeaufforderungsfenster einfach "sdcc" eingibtst.
>
> Und das steht sogar direkt bei den Installationshinweisen mit dabei:You
> can test the install by opening a DOS box and entering:
>      sdcc -v
>
> This should return sdcc's version number.

Ist ja gut, ich muss doch erstmal versuchen mich mit der 
Eingabeaufforderung zurecht zu finden. Weiß halt nicht wie man diese 
Funktionen nutzt. Kenn halt nur grafische Oberflächen, doppelklick auf 
eine ".exe" und gut ist.
Habs jetzt einigermaßen verstanden.

von BorstyBo (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Sebastian K. schrieb:
>> Ich öffne ja nicht einfach ein Fenster der Eingabeaufforderung und tippe
>> dort
>
> Doch. Genau darum geht es.
>
> Du musst nur für zwei Dinge sorgen, damit das funktioniert:
>
> Das Verzeichnis, in dem sdcc.exe liegt, muss im Pfad enthalten sein
> (Das ist die Umgebungsvariable PATH), und Du musst in Deinem
> Eingabeaufforderungsfenster das Verzeichnis als aktuelles Verzeichnis
> wählen, in dem Deine Quelltextdatei liegt.
>
[...]

Wow, das ist eine super Anleitung, sehr ausführlich und klar!! Die hat 
mir wirklich sehr weitergeholfen! Danke dafür! Freut mich, dass du es 
geschafft hast, dich in einen Konsolen-Anfänger wie mich hinein zu 
versetzen :)

Ein kleines Problem hab ich jetzt leider noch...
Ich bekomme die Meldung
"fatal error: REG52.H: No such file or directory".
Wo erwartet der SDCC diese Header-Datei? Ich habe sie zum C-Programm 
gelegt, aber da ignoriert er sie, also muss sie vermutlich irgendwo in 
das Installationsverzeichnis vom SDCC, aber wohin genau?

von guest (Gast)


Lesenswert?

BorstyBo schrieb:
> "fatal error: REG52.H: No such file or directory".

Dann schreib mal noch ein '-I.' mit in die Kommandozeile, also sowas in 
der Art:
1
sdcc -I. tollesprogramm.c

Was es sonst noch so an Parametern gibt steht in der sdccman.pdf
Z.B. auch:
1
sdcc --print-search-dirs
Das sagt Dir wo der sdcc überall sucht.

von guest (Gast)


Lesenswert?

BorstyBo schrieb:
> "fatal error: REG52.H: No such file or directory".

Achso, Alternative zu dem '-I.' wäre die erste Zeile in dem c File zu 
ändern
von
1
#include <REG52.H>
nach
1
#include "REG52.H"

Anscheinend stammt REG52.H vom Keil Compiler. Beim sdcc heist der wohl 
8052.h.
Also dann wohl doch eher so:
1
#include <8052.h>

von BorstyBo (Gast)


Lesenswert?

Bei
1
sdcc -I. 888.c

erhalte ich die Fehlermeldung:

888.c:2:22: fatal error: intrins.h: No such file or directory
compilation terminated.
./REG52.H:13: syntax error: token -> 'P0' ; column 6

1
sdcc --print-search-dirs

bringt die Meldung:

programs:
C:\Program Files\SDCC\bin

datadir:
C:\Program Files\SDCC\bin\..

includedir:
C:\Program Files\SDCC\bin\..\include\mcs51
C:\Program Files\SDCC\bin\..\include

libdir:
C:\Program Files\SDCC\bin\..\lib\small

Eigenartigerweise meckert er bei
1
sdcc -I. 888.c
 nicht über die fehlende "REG52.H" sondern über die Syntax. Keil 
uVision5 akzeptiert diese Header-Datei, ein Syntax-Fehler ist also somit 
vermutlich auszuschließen. Ist es egal in welches der oben genannten 
Verzeichnisse ich die "REG52.H" schiebe?

von BorstyBo (Gast)


Lesenswert?

guest schrieb:
> BorstyBo schrieb:
>> "fatal error: REG52.H: No such file or directory".
>
> Achso, Alternative zu dem '-I.' wäre die erste Zeile in dem c File zu
> ändern
> von#include <REG52.H>
> nach#include "REG52.H"
>
> Anscheinend stammt REG52.H vom Keil Compiler. Beim sdcc heist der wohl
> 8052.h.
> Also dann wohl doch eher so:#include <8052.h>

Okay hab beide Dateien (REG52.H und intrins.h) in das lokale Verzeichnis 
von der zu kompilierenden Datei geschoben und den Quelltext geändert.
1
#include "REG52.H"
2
#include "intrins.h"

Jetzt scheint er die beiden Dateien auch zu finden, jedoch bekomme ich 
noch die Fehlermeldung:

REG52.H:13: syntax error: token -> 'P0' ; column 6
sdcpp.exe: fatal error: when writing output to : Invalid argument

Das überfordert mich jetzt ein wenig, ich habe überhaupt keine Ahnung, 
wie ich die Datei ändern soll, damit es funktioniert.

In der Datei steht anfangs:
1
#ifndef __REG52_H__
2
#define __REG52_H__
3
4
/*  BYTE Registers  */
5
sfr P0    = 0x80;
6
sfr P1    = 0x90;
7
sfr P2    = 0xA0;
8
sfr P3    = 0xB0;
9
sfr PSW   = 0xD0;
10
sfr ACC   = 0xE0;
11
sfr B     = 0xF0;
12
sfr SP    = 0x81;
13
sfr DPL   = 0x82;
14
sfr DPH   = 0x83;
15
sfr PCON  = 0x87;
16
sfr TCON  = 0x88;
17
sfr TMOD  = 0x89;
18
sfr TL0   = 0x8A;
19
sfr TL1   = 0x8B;
20
sfr TH0   = 0x8C;
21
sfr TH1   = 0x8D;
22
sfr IE    = 0xA8;
23
sfr IP    = 0xB8;
24
sfr SCON  = 0x98;
25
sfr SBUF  = 0x99;
26
[...]

Abgesehen davon, dass in Zeile 6 nichts von P0 steht, sondern es sich um 
die Zeile 5 handelt (die Zählweise ist ja auch egal), habe ich keine 
Ahnung, was daran nun falsch ist, wenn Keil das so akzeptiert.
Von sowas wie Byte-Registern kenne ich mich nun gar nicht aus, aber 0x80 
kann ja eigentlich nur eine Adresse sein.

von guest (Gast)


Lesenswert?

BorstyBo schrieb:
> Abgesehen davon, dass in Zeile 6 nichts von P0 steht, ...

Der meckert ja auch die Zeile 13 an und da steht schon was von P0.
Ich sag ja, der Header stammt vom Keil Compiler. Und der hat 
offensichtlich eine andere Syntax wie der SDCC.
Z.B. benutzt Keil in der angemeckerte Zeile 13:
1
sfr P0    = 0x80;
während das beim SDCC so aussieht:
1
__sfr __at (0x80) P0   ;

Du kannst versuchen in der 888.c die Zeilen:
1
#include "REG52.H"
2
#include "intrins.h"
durch:
1
#include <8052.h>
zu ersetzen.
Wenn Du Glück hast reicht das, wenn nicht mußt Du halt noch mehr ändern.

von BorstyBo (Gast)


Lesenswert?

guest schrieb:
> Du kannst versuchen in der 888.c die Zeilen:#include "REG52.H"
> #include "intrins.h"
> durch:#include <8052.h>
> zu ersetzen.
> Wenn Du Glück hast reicht das, wenn nicht mußt Du halt noch mehr ändern.

Leider habe ich kein Glück...

888.c:14: syntax error: token -> 'table_cha' ; column 28
sdcpp.exe: fatal error: when writing output to : Invalid argument

Ich glaube ab hier wird es wohl sehr aufwändig oder?

von guest (Gast)


Lesenswert?

BorstyBo schrieb:
> 888.c:14: syntax error: token -> 'table_cha' ; column 28

Keil: "uchar code ..."
SDCC: "__code unsigned char ..."

Must Du dich halt durchhangeln.
Ein paar Hinweise stehen in sdccman.pdf Kapitel 6.1
Das mit "__code" steht in Kapitel 3.5.1 (3.5.1.5 um genau zu sein).
Von Infineon gibt es eine App-Note mit ein paar weiteren Hinweisen dazu:
http://www.infineon.com/dgdl/AP0806510_XC800_Migration_Keil_2_SDCC.pdf?fileId=db3a304314dca389011517efc5860d61
Ansonsten googeln, bingen, yahooen, ...

von BorstyBo (Gast)


Lesenswert?

guest schrieb:
> BorstyBo schrieb:
>> 888.c:14: syntax error: token -> 'table_cha' ; column 28
>
> Keil: "uchar code ..."
> SDCC: "__code unsigned char ..."
>
> Must Du dich halt durchhangeln.
> Ein paar Hinweise stehen in sdccman.pdf Kapitel 6.1
> Das mit "__code" steht in Kapitel 3.5.1 (3.5.1.5 um genau zu sein).
> Von Infineon gibt es eine App-Note mit ein paar weiteren Hinweisen dazu:
> http://www.infineon.com/dgdl/AP0806510_XC800_Migra...
> Ansonsten googeln, bingen, yahooen, ...

Das klingt nicht so super...
Muss ich wohl oder übel durch ^^

Dennoch bis hierhin besten Dank für deine Hilfe!!

von guest (Gast)


Angehängte Dateien:

Lesenswert?

guest schrieb:
> Keil: "uchar code ..."
> SDCC: "__code unsigned char ..."

Das 'uchar' wära auch beim SDCC ok. Hatte das "#define uchar unsigned 
char" in Zeile 3 übersehen. Die Reihenfolge ist auch egal. Fehlen also 
nur die Unterstriche "uchar __code ...", kommt im Code 7 mal vor. Dann 
noch an einer Stelle 'interrup 4' -> '__interupt (4)', bei der 
Initalisierung zweier mehrdimensionaler Arrays will sdcc noch ein paar 
mehr geschweifte Klammern sehen und schon hat man zumindest mal die 
Syntaxfehler weg.
Bleiben aber noch ein ganzer Schwung Warnungen.
Und ein Linker Error:
1
?ASlink-Error-Could not get 144 consecutive bytes in internal RAM for area DSEG.

Da komm ich dann nicht mehr weiter.

Anbei mal der geänderte Code und hier noch ein Link zu einer 
Alternative:
https://github.com/tomazas/ledcube8x8x8

von BorstyBo (Gast)


Lesenswert?

guest schrieb:
> guest schrieb:
>> Keil: "uchar code ..."
>> SDCC: "__code unsigned char ..."
>
> Das 'uchar' wära auch beim SDCC ok. Hatte das "#define uchar unsigned
> char" in Zeile 3 übersehen. Die Reihenfolge ist auch egal. Fehlen also
> nur die Unterstriche "uchar __code ...", kommt im Code 7 mal vor. Dann
> noch an einer Stelle 'interrup 4' -> '__interupt (4)', bei der
> Initalisierung zweier mehrdimensionaler Arrays will sdcc noch ein paar
> mehr geschweifte Klammern sehen und schon hat man zumindest mal die
> Syntaxfehler weg.
> Bleiben aber noch ein ganzer Schwung Warnungen.
> Und ein Linker Error:?ASlink-Error-Could not get 144 consecutive bytes
> in internal RAM for area DSEG.
>
> Da komm ich dann nicht mehr weiter.
>
> Anbei mal der geänderte Code und hier noch ein Link zu einer
> Alternative:
> https://github.com/tomazas/ledcube8x8x8

Wow ich versteh nur Bahnhof mit der Initalisierung zweier 
mehrdimensionaler Arrays... aber wenn du das sagst... :D
Die Software bewirkt bei mir im übrigen überhaupt nichts, weder 
"3D8S_alpha.exe" noch "3D8_Win.exe". Ich verbinde mich über den 
richtigen COM-Port und ich habs auch schon mit der vorher überspielten 
"A3d8Test_M328.hex" probiert aber der Würfel zeigt keinerlei Reaktion.
Eine Ahnung, woran das liegen könnte?
Ich benutze ein normales USB-TTL Kabel (PL2303HX).

von Steffen H. (Firma: www.shotech.de) (mc_sho) Benutzerseite


Angehängte Dateien:

Lesenswert?

im Anhang das Projekt mit dem entsprechenden "LED_Wuerfel.bat". Sollte 
der SDCC Compiler bei Dir richtig installiert sein, dann bekommst Du 
nach der Ausführung von der "LED_Wuerfel.bat" Dein 888_v1.hex.

Wird der STC12C5A60S2 nicht mit dem STC_ISP_V.... programmiert ?
http://www.buydisplay.com/download/software/STC-ISP-V4.86-NOT-SETUP-ENGLISH.zip

von BorstyBo (Gast)


Lesenswert?

Steffen H. schrieb:
> im Anhang das Projekt mit dem entsprechenden "LED_Wuerfel.bat".
> Sollte der SDCC Compiler bei Dir richtig installiert sein, dann bekommst Du
> nach der Ausführung von der "LED_Wuerfel.bat" Dein 888_v1.hex.

Hey, das funktioniert ja richtig gut ^^ Vielen dank!!

> Wird der STC12C5A60S2 nicht mit dem STC_ISP_V.... programmiert ?
> http://www.buydisplay.com/download/software/STC-IS...

Programmiert wird er damit, das ist richtig und das funktioniert auch 
aber normalerweise sollte man mit der Software "3D8S_alpha.exe" bzw. 
"3D8_Win.exe" probeweise die LED's ein und ausschalten können (quasi 
live durch anklicken) und neue Muster und Animationen erstellen bzw. 
diese auch abspielen.

Bei mir tut sich da aber leider überhaupt nichts :-/
Programmieren kann ich den Würfel, dh. der richtige COM-Port ist 
eingestellt und die Verbindung ist defitiv da und RX und TX sind korrekt 
angeschlossen. Weiß einfach nicht woran das liegen kann.

von guest (Gast)


Lesenswert?

BorstyBo schrieb:
> Die Software bewirkt bei mir im übrigen überhaupt nichts, weder
> "3D8S_alpha.exe" noch "3D8_Win.exe".

Die dürften nur mit der Alternativfirmware v2 funktionieren:
https://github.com/tomazas/ledcube8x8x8/tree/master/firmware/v2

Die 'originale' hat keine serialle Anbindung (zumindest hab ich keine 
gesehen).

von BorstyBo (Gast)


Angehängte Dateien:

Lesenswert?

guest schrieb:
> BorstyBo schrieb:
>> Die Software bewirkt bei mir im übrigen überhaupt nichts, weder
>> "3D8S_alpha.exe" noch "3D8_Win.exe".
>
> Die dürften nur mit der Alternativfirmware v2 funktionieren:
> https://github.com/tomazas/ledcube8x8x8/tree/maste...
>
> Die 'originale' hat keine serialle Anbindung (zumindest hab ich keine
> gesehen).

Okay, jetzt reagiert mein Würfel zwar und stoppt das aktuelle Programm, 
wenn ich mich über die COM-Schnittstelle und der 3D8S-Software verbinde, 
allerdings leuchten willkürliche LED's auf, das ist sehr komisch.
Ich vermute mal einen verdrahtungsfehler.
Ich habe auf allen Ebenen die Kathoden verbunden und diese geht dann auf 
die Pins C1-C8. Die Unterste Ebene liegt an C1, die zweite von untern an 
C2 etc. Die Anoden wurden senkrecht mit der jeweiligen LED darunter 
verbunden und gehen auf eines der vielen X-Y-Pins.
Bilder dazu hab ich hier nochmal sicherheitshalber hochgeladen...sieht 
jemand einen Fehler?

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
Noch kein Account? Hier anmelden.