Forum: Mikrocontroller und Digitale Elektronik Datensammlung, wie gemacht?


von Joey T. (j0sef)


Lesenswert?

Moin Forum,

ich habe malwieder ein Problem bzw. eine Idee, aber wie man diese 
umsetzt ist noch fraglich für mich.

Schon mal vorab, ich arbeite weiterhin mit dem TriCore TC1797, Tasking 
VX toolset 3.1, DAvE und einem Lauterbach Debugger unter Trace32.

Folgende Anforderung:

Ich habe eine Hauptfunktion, welche ich aufrufen möchte, wenn ich Daten 
vom Bus erfassen möchte und diese dann in einer Rückgabevariable wieder 
auszugeben.

In der Hauptfunktion rufe ich nun die entsprechenden Unterfunktionen 
auf, welche mir jeweils 2 Daten-Bytes wieder geben.

Diese Daten-Bytes möchte ich jetzt gerne irgendwie nach außen, also in 
die main bzw. in die globale Variable bekommen.

Hier mal als Pseudo-C-Code dargestellt:
1
/* globale Variable vom Typ X, welche die gelesenen Datenbytes speichert und falls wenn neue Daten gelesenen werden, diese dann drunter/drüber anhängt
2
*/
3
Typ_X Global_Variable;
4
5
void main(void)
6
{
7
//  Aufruf der Hauptfunktion und je nachdem die entsprechende Zuweisung
8
    Global_Variable = Hauptfunktion();
9
      
10
return 0;
11
}
12
13
Rueckgabetyp_X Hauptfunktion()
14
{
15
 2_Datenbytes_1 = Unterfunktion();
16
 2_Datenbytes_2 = Unterfunktion();
17
 2_Datenbytes_3 = Unterfunktion();
18
 2_Datenbytes_4 = Unterfunktion();
19
 2_Datenbytes_5 = Unterfunktion();
20
 2_Datenbytes_6 = Unterfunktion();
21
 2_Datenbytes_7 = Unterfunktion();
22
     .
23
     .
24
     .
25
 2_Datenbytes_24 = Unterfunktion();
26
27
/* bis 24 ist jetzt erst mal nur so als Beispiel. Kann aber durch aus möglich sein, dass es bis zu so einer Anzahl an Variablen kommt
28
*/
29
30
/* Hier jetzt, entweder eine Funktion, welche der globalen Variable diese Datenbytes zuweist oder erst hier eine Lokale Variable, die die ganzen Bytes beinhaltet und dann in der main, entsprechend der globalen einfach überreicht wird
31
*/
32
/* Dies ist dann je nachdem, wie man sich entschieden hat es zu lösen, erforderlich oder nicht.
33
*/
34
return lokale_Variable;
35
}

Ich bedanke mich im Voraus schon mal für konstruktive Kritiken und 
Vorschläge.

Gruß,

Josef
von Joey T. (j0sef)


Lesenswert?

Ich sollte wohl noch hinzufügen, dass diese globale Variable nach jedem 
mal beschreiben, in einen nicht flüchtigen Speicher kommt und jeweils 
danach wieder vom Inhalt gelöscht wird. Wäre dem nicht so, würde das ja 
unmengen an Speichervolumen kosten für die globale.
von Coder (Gast)


Lesenswert?

Ohne genaueres zu kennen:

a) du sprichst von einem nicht flüchtigen Speicher. Was für einer ist 
das? z.B Flash EEPROM und Art-Verwandte können ein und dieselbe Zelle 
nicht beliebig oft wiederbeschreiben. Bei einem NVRAM ist es etwas 
anderes.

b) mir fehlt der rote Pfaden in der Verwendung deiner Datentypen. 
Unabhängig davon könntest Du auch ein Array als Argument deiner 
Hauptfunktion übergeben. In diesem Array würde ich dann die Daten 
speichern.
von Karl H. (kbuchegg)


Lesenswert?

Joey T. schrieb:

> Ich bedanke mich im Voraus schon mal für konstruktive Kritiken und
> Vorschläge.

So wie du deine ganze Aufgabenstellung beschreibst, kann es eigentlich 
nur einen Vorschlag geben: lies ein C Buch

Kurz gesagt: Für deinen Problemkreis gibt es mehrere 
Lösungsmöglichkeiten. Keine davon ist optimal.
von ich da (Gast)


Lesenswert?

Was nützt es ein C Buch zu lesen?
Man muss den Inhalt auch verstehen können, sonst nützt es nichts.

C ist so ähnlich geschrieben wie wenn eine Katze über die 
Computertastatur gelaufen ist. Aus dem was man dann vorfindet 
irgendwelche Schlüsse ziehen ist eine ähnliche Interpretation wie das 
lesen der Kleckse bei den Psychologen. ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.