Programmübersetzung

Gast #1238403
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
Gast
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
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
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
> 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.
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
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
@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
@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
Persönliche Seite
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;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.