Hiho,
bestimmt kann mir jemand hier sagen was der folgende Code macht Ist ein Auszug aus der get_adc function im MS2 Extra Code.
Versuche grad mich bisschen reinzuarbeiten in die Programmierung
__asm__ __volatile__ (
"ldd %1\n"
"subd %2\n"
"ldy %3\n"
"emul\n"
"ldx #1023\n"
"ediv\n"
"tfr y,d\n"
"addd %2\n"
: "=d"(outpc.map)
: "m"(flash4.mapmax),
"m"(flash4.map0),
"m"(ATD0DR0)
: "y", "x");
auf was genau bezieht sich %1 %2 usw. Die Instructions hab ich nachgeschaut aber blicks trotzdem nich. Bin auch nicht gerade der assembler-Gott
Hoffe ihr könnt mir helfen! Danke schonmal !
Grüße
Code Erklärung
Re: Code Erklärung
Dachte MS2 wäre in C++?!
Fiat Uno Racing, K16, UMC1, Gslender 3.2.1, LC-1, 355cc, Bluetooth
Re: Code Erklärung
Also zumindest is der Teil bei mir in assembler eingebunden.
Hab doch nicht etwa den komplett falschen Code runtergeladen
Hab doch nicht etwa den komplett falschen Code runtergeladen
Re: Code Erklärung
Nein, hast du nicht. Der Code ist teils in C, teils in Assembler. Alle wo der Compiler entweder Mist macht oder es zeitkritisch ist, wie die Interrupt-Handler, ist in ASM geschrieben. C++ kommt nirgends zum Einsatz, das hat im kleinen Embeddedbereich nix verloren und kommt erst auf groesseren Kisten a la ARM zum Einsatz die dann auch ein OS fahren.
Zum Code:
Hier wird der MAP-Wert berechnet. Der ADC liefert nur einen Wert von 0-1024 entsprechend 0-5V. Gemaess den Einstellungen in Megatune (Map0 und MapMax fuer die Druckwerte bei 0 und 5V) wird dann hier der aktuelle MAP-Wert (*10) errechnet.
ldd %1 -> lade flash4.mapmax in Register D
subd %2 -> subtrahiere flash4.map0 von Register D
ldy %3 -> lade den Wert vom AD-Wandler Channel 0 nach Register Y
emul -> multipliziere (y*d nehme ich mal an, Ergebnis in einen von beiden)
ldx #1023 -> lade den Wert 1023 in Register X
ediv -> teile (den Wert aus der vorherigen Multiplikation durch 1023)
tfr y,d -> aehm... transfer glaube, also y nach d kopieren
addd %2 -> addiere flash4.map0 auf Register D
: "=d"(outpc.map) -> am Ende des Blocks kopiere Register D noch outpc.map
: "m"(flash4.mapmax),"m"(flash4.map0)","m"(ATD0DR0) -> Deine %1-%3, "m" sagt das hier auf Speicher verwiesen wird
: "y", "x" -> benutzte Register, die der Compiler ggf. vor der Routine sichern muss da sie von dir ueberkritzelt werden
Zum Code:
Hier wird der MAP-Wert berechnet. Der ADC liefert nur einen Wert von 0-1024 entsprechend 0-5V. Gemaess den Einstellungen in Megatune (Map0 und MapMax fuer die Druckwerte bei 0 und 5V) wird dann hier der aktuelle MAP-Wert (*10) errechnet.
ldd %1 -> lade flash4.mapmax in Register D
subd %2 -> subtrahiere flash4.map0 von Register D
ldy %3 -> lade den Wert vom AD-Wandler Channel 0 nach Register Y
emul -> multipliziere (y*d nehme ich mal an, Ergebnis in einen von beiden)
ldx #1023 -> lade den Wert 1023 in Register X
ediv -> teile (den Wert aus der vorherigen Multiplikation durch 1023)
tfr y,d -> aehm... transfer glaube, also y nach d kopieren
addd %2 -> addiere flash4.map0 auf Register D
: "=d"(outpc.map) -> am Ende des Blocks kopiere Register D noch outpc.map
: "m"(flash4.mapmax),"m"(flash4.map0)","m"(ATD0DR0) -> Deine %1-%3, "m" sagt das hier auf Speicher verwiesen wird
: "y", "x" -> benutzte Register, die der Compiler ggf. vor der Routine sichern muss da sie von dir ueberkritzelt werden
Re: Code Erklärung
Muchas Gracias und vielen Dank sag ich mal, nun kanns weiter gehen
Re: Code Erklärung
So hab grad bisschen Schwierigkeiten mit dem wheel decoder.
Gibt es jemanden hier der sich gut mit dem MS2Extra Code auskennt und mir evtl. per pn ein paar Fragen speziell zum Wheel decoder beantworten kann?
Würde z.B. gerne wissen wie das mit der time prediction für den Zündzeitpunkt genau funktioniert.
Gibt es jemanden hier der sich gut mit dem MS2Extra Code auskennt und mir evtl. per pn ein paar Fragen speziell zum Wheel decoder beantworten kann?
Würde z.B. gerne wissen wie das mit der time prediction für den Zündzeitpunkt genau funktioniert.
- Münchhausen
- Beiträge: 312
- Registriert: Di Jun 23, 2009 10:03 am
- Wohnort: Damsdorf
Re: Code Erklärung
Warum per pn?
Wäre doch schön, wenn hier jeder Interessierte mitlesen könnte.
Gruß
Münchhausen
Wäre doch schön, wenn hier jeder Interessierte mitlesen könnte.
Gruß
Münchhausen
Vielen Dank für die Beachtung aller Sicherheitshinweise.
Fahrzeug: VW Typ3, 2L Typ4(GB), MS2 PCB3 ,Ansaugtrakt(Eigenbau), COPs mit EDIS, LC1 = R.I.P 2012
Mein Dank geht an: Kiesow GmbH Norderstedt.
Fahrzeug: VW Typ3, 2L Typ4(GB), MS2 PCB3 ,Ansaugtrakt(Eigenbau), COPs mit EDIS, LC1 = R.I.P 2012
Mein Dank geht an: Kiesow GmbH Norderstedt.