| freebus.org http://freebus.org/phpBB3/ |
|
| Objektwerte auslesen mit neuer lib http://freebus.org/phpBB3/viewtopic.php?f=25&t=2107 |
Seite 1 von 1 |
| Autor: | uwe223 [ 7. Mai 2013 18:34 ] |
| Betreff des Beitrags: | Objektwerte auslesen mit neuer lib |
Hallo AVR-Experten, ich hab da mal wieder ein Problem. Ich versuche gerade die Dimmer Applikation an die neue lib anzupassen, kann aber die Objektwerte irgendwie nicht auslesen. Den Code hab ich teilw. vom 8out übernommen, hier mal das entscheidende Stück: Code: void app_loop() { app_dat.channel ^= (1<<0); /* Switch ch=0 <> ch=1 */ /* Helligkeitswert (Obj. 4+5) bearbeiten */ if (TestObject(app_dat.channel + 4)){ // reset object status flag SetRAMFlags(app_dat.channel + 4, 0); // get value of object (0=off, 1=on) uint8_t val = userram[app_dat.channel + 4 + 4]; SetDimmValue (val, app_dat.channel); } } Beim schreiben eines Helligkeitswertes auf die Obj. 4+5 ist "val" jedoch immer 0. Beim 8out steht der Wert ja in userram[objektnummer + 4]. Ist der Offset von 4 immer fest? Oder hab ich wo anders nen Fehler? Gruß Uwe |
|
| Autor: | do13 [ 8. Mai 2013 18:12 ] |
| Betreff des Beitrags: | Re: Objektwerte auslesen mit neuer lib |
uwe223 hat geschrieben: Hallo AVR-Experten, Beim schreiben eines Helligkeitswertes auf die Obj. 4+5 ist "val" jedoch immer 0. Beim 8out steht der Wert ja in userram[objektnummer + 4]. Ist der Offset von 4 immer fest? Oder hab ich wo anders nen Fehler? Uwe Hallo Uwe, Nein, der Offset von 4 ist nicht fest. Der Offset wird per ETS in die Konfiguration der Kommunikationsobjekte eingetragen und ist dann entweder konstant für das jeweilige Applikationsprogramm oder auch noch von der Parametrisierung abhängig. Das ist eigentlich der Offset wo im (emulierten) Speicher der Inhalt des Kommunikationsobjektes abgelegt wird. Für den Zugriff musst Du entweder die Speicherstelle aus der Konfiguration auslesen oder Du benutzt gleich die TestAndCopyObject Funktion. Viele Grüße Dirk |
|
| Autor: | uwe223 [ 9. Mai 2013 10:58 ] |
| Betreff des Beitrags: | Re: Objektwerte auslesen mit neuer lib |
Hallo Dirk, Zitat: Für den Zugriff musst Du entweder die Speicherstelle aus der Konfiguration auslesen Kannst du mir noch einen Tipp geben an welcher Stelle die Information gespeichert ist, ich komme da nicht drauf. Zitat: oder Du benutzt gleich die TestAndCopyObject Funktion Das hört sich ja auch sehr interessant an, die Funktion kann ich aber auch nicht finden Sollte die nicht hier mit auftauchen(Auszug aus der fb_lib.h): Code: /************************************************************************* * LIB FUNCTION PROTOTYPES **************************************************************************/ PROT_EXT void SetAndTransmitObject(uint8_t objectNr, void* src, uint8_t len); PROT_EXT void SetAndTransmitBit(uint8_t objectNr, uint8_t value); PROT_EXT uint8_t TestObject(uint8_t objectNr); PROT_EXT void SetRAMFlags(uint8_t objectNr, uint8_t flags); FBAPP_EXT uint8_t restartApplication(void); Danke & Gruß Uwe |
|
| Autor: | do13 [ 9. Mai 2013 11:34 ] |
| Betreff des Beitrags: | Re: Objektwerte auslesen mit neuer lib |
uwe223 hat geschrieben: Kannst du mir noch einen Tipp geben an welcher Stelle die Information gespeichert ist, ich komme da nicht drauf. Klar. Kennst du http://www.auto.tuwien.ac.at/~mkoegler/eib/doc/bcu1help.pdf ? Bin mir jetzt nicht sicher ob ich dir das Dokument schon einmal genannt habe. Unter CommsTabPtr (Seite 49) findest du den Aufbau der Com Objekte. Im Object-Descriptor steht die Adresse wo die Daten im RAM liegen. Die Debug Variante der Lib gibt zum Start nähere Infos zu den Objekten aus: Beispiel: Code: ... COMM:14 O00F9FP54T00L00 O01FDFP55T00L00 O02F97P56T00L00 O03F97P57T00L00 O04F93P58T00L00 O05F93P59T00L00 ..... Dabei gilt folgender Aufbau: OaaFbbPxxTyyLzz aa: Obj Nummer bb: Flags xx: Pointer <----- das suchst du yy: Type zz: Länge der Daten Zitat: Das hört sich ja auch sehr interessant an, die Funktion kann ich aber auch nicht finden Sollte die nicht hier mit auftauchen(Auszug aus der fb_lib.h): Ahhh. Stimmt. Keine Ahnung warum die fehlt. Habe ich gerade hinzugefügt. Macht intern folgendes: Code: / uint8_t TestAndCopyObject (uint8_t objectNr, void* dst, uint8_t len) { if (getupdateramflag(objectNr)) { /* copy data */ CopyfromObj(dst, len , objectNr); /* clear flag */ setramflag(objectNr, 0); return TRUE; } else { return FALSE; } } Viele Grüße Dirk |
|
| Autor: | uwe223 [ 9. Mai 2013 12:21 ] |
| Betreff des Beitrags: | Re: Objektwerte auslesen mit neuer lib |
Ich hab mal die Funktion benutzt, klappt super!!! Zitat: Macht intern folgendes: Mit dieser Information ist es wirklich simpel. Danke auch für den Link, das Problem ist aber das Meiste muss man gar nicht Wissen wenn man die lib benutzt. Und was ich nicht selber ausprobiere hab ich spätestens Übermorgen wieder vergessen Also Danke & Gruß Uwe |
|
| Autor: | do13 [ 9. Mai 2013 12:28 ] |
| Betreff des Beitrags: | Re: Objektwerte auslesen mit neuer lib |
uwe223 hat geschrieben: Ich hab mal die Funktion benutzt, klappt super!!! Mit dieser Information ist es wirklich simpel. Danke für die Rückmeldung, so war es auch gedacht. Zitat: Danke auch für den Link, das Problem ist aber das Meiste muss man gar nicht Wissen wenn man die lib benutzt. Das ist richtig, aber hilft ein Verständnis von dem ganzen zu bekommen. Viele Grüße Dirk |
|
| Seite 1 von 1 | Alle Zeiten sind UTC + 2 Stunden |
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |
|