Programmübersetzung

Gast #1238403
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
#1238500
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.
Gast #1238511
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
Persönliche Seite #1238522
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.
#1238528
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.
Gast #1238530
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
Angehängte Dateien:
Gast #1238539
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
Gast #1239056
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren