freebus.org

Open Bus System
Aktuelle Zeit: 15. Juni 2015 14:49

Alle Zeiten sind UTC + 2 Stunden




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objektwerte auslesen mit neuer lib
BeitragVerfasst: 7. Mai 2013 18:34 
Offline
Expert Boarder
Expert Boarder

Registriert: 16. Juni 2008 20:11
Beiträge: 90
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


Nach oben
 Profil  
 
BeitragVerfasst: 8. Mai 2013 18:12 
Offline
Expert Boarder
Expert Boarder

Registriert: 18. Juli 2007 10:38
Beiträge: 112
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


Nach oben
 Profil  
 
BeitragVerfasst: 9. Mai 2013 10:58 
Offline
Expert Boarder
Expert Boarder

Registriert: 16. Juni 2008 20:11
Beiträge: 90
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 :oops: .
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


Nach oben
 Profil  
 
BeitragVerfasst: 9. Mai 2013 11:34 
Offline
Expert Boarder
Expert Boarder

Registriert: 18. Juli 2007 10:38
Beiträge: 112
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 :oops: .
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


Nach oben
 Profil  
 
BeitragVerfasst: 9. Mai 2013 12:21 
Offline
Expert Boarder
Expert Boarder

Registriert: 16. Juni 2008 20:11
Beiträge: 90
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


Nach oben
 Profil  
 
BeitragVerfasst: 9. Mai 2013 12:28 
Offline
Expert Boarder
Expert Boarder

Registriert: 18. Juli 2007 10:38
Beiträge: 112
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


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 2 Stunden


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de