Forum: Mikrocontroller und Digitale Elektronik Programmübersetzung


von Daniel (Gast)


Lesenswert?

Halle alle zusammen !

Ich habe ein Problem !
Undzwar möchte ich gerne den kapazitiven Sensor von Elm Chang nachbauen.

http://elm-chan.org/works/capsens/report_e.html

Das Programm das er geschrieben hat ist leider in C geschrieben.
Ich kann aber nur Bascom :\.
Kann mir jemand helfen das Programm zu "übersetzen" ? Das wäre echt 
super !

Vielen Dank im voraus !

MfG
Daniel

von ich (Gast)


Lesenswert?

Was verstehst du an dem Programm denn nicht?

von Daniel (Gast)


Lesenswert?

hmm...ich kann kein C. :)

also ich verstehe die schleifen nicht, was die header machen sollen und 
überhaupt wie das programm abläuft kann ich aus dem code nicht 
herauslesen.

mfg
Daniel

von Christian R. (supachris)


Lesenswert?

Auch wenn man C nicht kann, sollte man den Algorithmus verstehen können. 
Wenn du das nicht kannst, kannst du es auch in Bascom nicht nachbauen. 
Einfaches dummes übersetzen geht da nicht. Also lerne Algorithmik. Das 
braucht man in jeder Programmiersprache. Wenn du das kannst, kannst du 
auch das C-Programm lesen und selbst auf Bascom portieren. Außerdem ist 
da noch einiges in Assembler dabei. Das ist ganz bestimmt nicht ohne 
Grund.

von Daniel (Gast)


Lesenswert?

ich denke mal das sollte mir sagen das du mir nicht helfen kannst.

wie soll ich ein ähnliches programm schreiben wenn ich z.B. nicht weiß, 
was:
for (;;)
oder
if (c == '\r')
heisst.
operatoren wie ";;" gibt es in bascom nicht.
was hat das bitte mit algorithmik zutun ?

mfg
daniel

von Peter (Gast)


Lesenswert?

ok das
 for (;;)

ist schon etwas speziell ist aber das gleiche wie

while( true )  also eine entlosschleife


Aber was ist an

if (c == '\r')

unklar?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

> for (;;)
Endlosschleife.
> if (c == '\r')
Abfrage, ob die Variable c das ASCII-Zeichen für Wagenrücklauf 
(http://de.wikipedia.org/wiki/Wagenr%C3%BCcklauf) enthält.
> operatoren wie ";;" gibt es in bascom nicht.
; tut in C einfach gar nichts. Eine "leere Anweisung". ;; Tut also erst 
recht nichts.

Lerne C.
C ist die wahrscheinlich am meisten verwendete Programmiersprache der 
Welt.
Wirf einen Blick in die EDV-Abteilung der nächsten Bibliothek, und du 
wirst einige Bücher dazu finden.

von Christian R. (supachris)


Lesenswert?

Ich kann kein Bascom, deswegen kann ich dir nicht helfen. Auch sonst 
wäre das eine ziemlich umfangreiche Aufgabe, vor allem die schnellen 
ASM-Routinen werden wohl in Bascom nicht so laufen.

for(;;) ist eine Endlosschleife. Alles was in den {} steht, wird ewig 
wiederholt.

if(c == '\r') vergleicht den Inhalt der Variable c mit der Konstante \r 
was der Zeilenvorschub in ASCII ist, dient sicher zum Erkennen einer 
Eingabe...

Das hat mit Algorithmik zu tun, weil du, wenn du dich damit beschäftigen 
würdest, anhand der Struktur des Programmes herausfinden würdest, was es 
macht. Wenn es nicht irgendwelche kranken Programmierer verbrochen 
haben, ist C sehr gut verständlich, das liest man ja quasi direkt. Aber 
du willst ja vermutlich einfach das Programm 1:1 benutzen, ohne zu 
verstehen, was es macht.

von Oliver (Gast)


Angehängte Dateien:

Lesenswert?

for (;;)
ist eine for-Schleife, die niemals aufhört. In dem Fall wird da irgendwo 
ein break die Schleife abbrechen.

Das eine wesentliche Funktionalität des Programms in Assembler 
geschrieben ist, hast du aber bemerkt, oder?

Anssonsten stecken da zwei Programme in einem. So, wie es da steht, wird 
der interaktive Teil mit den uart-Ein-und Ausgaben gar nicht benutzt. 
Ich hab mal alles rausgeworfen, was sowieso nicht kompiliert würde, und 
den Rest oben angehängt. Da musst du jetzt durch :-)

Oliver

von Daniel (Gast)


Lesenswert?

@Christian
ich will es versteh...nein ich muss es sogar verstehen da ich es für 
meine anwendung (lautstärkeregelung durch sensor slider) erweitern muss.

ich lerne in meiner ausbildung c++, aber bis ich soweit bin dauert es ja 
noch ein bisschen ;).
mein projekt wollte ich aber eben nicht erst in ein paar jahren 
abschließen.

ich habe noch eine frage:
mit welchem compiler kann ich µC über windows mit C flashen ?bzw. 
programme schreiben und dann mit avrdude flashen(hex datei erstellen).

mfg
daniel

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Daniel wrote:
> ich habe noch eine frage:
> mit welchem compiler kann ich µC über windows mit C flashen ?bzw.
> programme schreiben und dann mit avrdude flashen(hex datei erstellen).
Mit avr-gcc. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

von tobi (Gast)


Lesenswert?

WinAVRTM contains all the tools for developing on the AVR. This includes 
avr-gcc (compiler), avrdude (programmer), avr-gdb (debugger), and more! 
WinAVR is used all over the world from hobbyists sitting in their damp 
basements, to schools, to commercial projects.

http://winavr.sourceforge.net/

Für eine schneller Übersicht in C:
http://openbook.galileocomputing.de/c_von_a_bis_z/

von Peter (Gast)


Lesenswert?


von Nobody (Gast)


Lesenswert?

@Niklas
> operatoren wie ";;" gibt es in bascom nicht.
; tut in C einfach gar nichts. Eine "leere Anweisung". ;; Tut also erst
recht nichts.

So lapidar würde ich es nicht ausdrücken.

for(PREFIX;VERGLEICH;SUFFIX) {...}

entspricht folgendem:

PREFIX
while(VERGLEICH) {
...
SUFFIX
}

for(;;) {}
bedeutet einfach, dass es kein PREFIX, keinen VERGLEICH und keinen 
SUFFIX gibt; entspricht also: while(1) {}

In Bascom also sowas:
1
#endless
2
goto endless

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ja, das weiß ich... Ich hatte jetzt vermutet er hat so ein Konstrukt 
gesehen und sich gewundert, was es bedeutet:
if (blabla) {
 ;;
}
Das kommt ja schonmal vor. Klar, in Bezug auf for bedeutet es was 
anderes. Was ich im übrigen auch geschrieben habe...
Und goto gibt es in C auch, aber das finden alle ganz furchtbar:
endless:
goto endless;

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.