PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann mir jemand ein c-programm erklären ... wegen portierung



kolisson
02.08.2009, 11:55
Hallo,

derzeit arbeite ich an meiner platine des Digital-speicher oscilloskopes von u.radig.

das projekt wurde ja von ulrich leider nicht weiterverfolgt. zunächst habe ich das vb2008 rahmenprogramm (erhältlich auf radig webseite "avr dso" mal nach vb6 portiert, da mir vb6 mehr liegt und ich mich nicht umstellen wollte.

im zweiten schritt arbeite ich jetzt an der analogen eingangsstufe und der spannungsversorgung dieser stufe. ziel : reiner betrieb über usb. das heisst die gesamte stromversorgung wird über usb erfolgen damit man unabhängig von externen netzteilen wird.

dieser schritt ist zu etwa 90% erledigt. ich muss nur noch einige störungen beseitigen.

der dritte schritt wären jetzt noch einige änderungen in der avr software.

hier komme ich nun zu meinem eigentlich problem. ich verstehe von den c-sourcen fast kein wort.

allein zeilen wie

" DDRA = 0x00;
DDRC = (1<<RES)|(1<<RUN)|(1<<CLK)|(1<<DIV0)|(1<<DIV1); "

sagen mir zwar, dass da irgenwie die ddr´s zugeordnet werden, aber erschliesst sich nicht wirklich, was da passiert.

da ich die ganze software nun gerne in bascom und inline portieren würde,
bräuchte nun hilfe, von jemand, der c auf anhieb lesen und verstehen kann, damit ich die grundfunktionen erkennen kann.

ich hoffe es gibt nen freiwilligen.

die sourcen gibt es hier:
http://www.ulrichradig.de/home/uploads/File/AVR_DSO/MyScope.zip


gruss klaus

Besserwessi
02.08.2009, 12:54
Das einfachste wird wohl sein sich ein C Tutorial durchzulesen. So cryptisch wie es auf den ersten Blick ist, ist C eigentlich nicht.

Die Ausdrücke wie PORTA |= (1<<PA2) | (1<<PA3)
kommen in C häufiger vor.
|= steht für eine oder Verknüpfung. Also a|= b ist das gleiche wie a = a |b, wobei in C | für ein Bitweises oder steht. Analog gibt es das auch für -,+,*,/,&.

(1<<PA2) steht für eine 1 um "PA2" stelle nach links verschoden, als 2^PA2. Dabei ist PA2 eine vordefinierte Konstante mit dem Wert 2. Entsprechen werden in dem Beispiel oben 2 Bits gesetzt.

In dem code um den es eigentlich geht sind da noch andre Konstanten defniert, passend zu Hardware.

kolisson
02.08.2009, 16:18
hallo besserwessi,
danke mal für die antwort, obwohl die natürlich nicht ganz so perfekt für mich ausgefallen ist. irgendwie dachte ich, ich könnte das mit fremder hilfe lösen, ohne gleich ein C tutorial zu lesen, da ich defakto absolut kein C lernen will.

naja .. wie so oft im leben : "KEINE ARME, KEINE KEKSE" vor allem wenn die kekse hinten-oben auf dem Schrank stehen.

meinst du denn, es wäre evt. möglich, die einzelnen dateien des programmes mit einem texteditor für so zusammenzukopieren, wie sie dann tatsächlich ausgeführt werden ?
also so, dass am ende eine von oben nach unten lesbare quelldatei entsteht .

denn allein dieses dämliche verteilen auf etliche dateien macht mich vollkommen verrückt.
ich weiss doch noch nichteinmal, wo der da anfängt.

gruss klaus

Besserwessi
02.08.2009, 17:39
Das zusammenkopieren ist kein Problem:
Die externen .c Dateien enthalten nur definitionen von Funktionen und ggf variablen. Wo man die Reinkopiert ist eigenlich egal. Nur bei den .h files kann die Reihenfolge wichtig sein, da stehen prototypen, Konstanten und eventuell Variablen dirn. Einfach so wie im main.c.
Also etwa in der Reihenfolge:
config.h
usart.h
cmd.h
usart.c
cmd.c
Main.c

Dabei wird man den Teil usart.c und usart.h wohl ganz durch die BASCOM internen funktionen ersetzen und kaum so 1:1 übertragen.

Das Verteilen auf mehrere Dateien hat mich auch am Anfang etwas gestört. Vor allem wird zum Teil ja noch mal in den Dateien die man mit include einbindet noch mal was eingebunden.

Die Ausführung des Programms fängt mit main an. Da steht aber auch schon ein Kommentar.
Immerhin ist das Programm nicht besonders lang und so wie es aussieht auch in keiner weise Zeitkritisch.