Forum: Mikrocontroller und Digitale Elektronik romabel class


von Hans (Gast)


Lesenswert?

Hallo Leute,
ich versuche grade eine crc8 class zu schreiben. Ich wollte die crc8 
Tabelle im ROM behalten. Sie soll nicht in den RAM geladen werden.
Hab nach Romable clasen geschaut und die zwei Anleitungen dazu gefunden
http://www.open-std.org/jtc1/sc22/open/n3646.pdf
http://www.eetindia.co.in/ARTICLES/1998FEB/PDF/EEIOL_1998FEB02_EMS_TA.pdf
Habs jetzt selber versucht umzusetzen leider krieg ich es nicht hin. :(
Ich steh grade auf dem Schlauch…
1
class crc8
2
{
3
    public:
4
        crc8();
5
    private:
6
        class tabelle{
7
            public:
8
            uint8_t table[2]; // fuer Test auf 2 gesetzt
9
        };
10
        const static tabelle tab1;
11
};
12
13
const crc8::tabelle crc8::tab1[2] = {1,2};
14
15
int main()
16
{
17
    crc8 klasse1;
18
19
    volatile int count;
20
    while ( 1 )
21
    {
22
        count++;
23
    }
24
}
Könnt ihr mir erklären wie man innerhalb einer klasse sowas macht?

von Stefan (Gast)


Lesenswert?

Schau mal hier:

http://aristeia.com/TalkNotes/C++_Embedded_Deutsch.pdf


ab Folie 125, da ist das gut erklärt.

Gruß, Stefan

von Hans (Gast)


Lesenswert?

Danke.
Hab es eben durchgelesen und eine Unklarheit bleibt.

Wieso funktioniert das Bsp. auf Folie 133
1
class WidgetWrapper {
2
struct Widget { int x, y; } // POD
3
static const Widget w; // ROMbar
4
};
5
const WidgetWrapper::Widget
6
WidgetWrapper::w = { 0, 0 }; // i.d.R. wird gerommt

Wenn die Regeln aus Filoe 126 besagen:
C++ Klassen/Structs/Unions sind POD-Typen, wenn ihnen folgendes fehlt:
...
->Protected oder private, nicht-statische Datenelemente
...

Das struct Widget ist aber private. o_0

von Karl H. (kbuchegg)


Lesenswert?

Hans schrieb:

> Das struct Widget ist aber private. o_0

Das entscheidende ist 'static' oder 'nicht static'.

Mit private, protected oder public regelst du ja nur, wie die 
Datenmember von ausserhalb der Klasse gesehen werden bzw. ob sie 
zugreifbar sind oder nicht. Darauf, wo die Daten gehalten werden, RAM 
oder ROM hat das nicht wirklich Einfluss. Alles was diese Attribute tun 
ist, dass der Compiler bei einem Zugriff auf diesen Member in seinen 
Tabellen nachsieht: darf der das überhaupt?

von Hans (Gast)


Lesenswert?

So dies erfüht doch jetzt alle an Anforderungen an Romable Objekts.

Somit wird int x, y, tab[2]; nur im rom behalten.
1
class test
2
{
3
        class WidgetWrapper
4
        {
5
            public:
6
                struct Widget
7
                {
8
                        int x, y, tab[2];
9
                };   // POD
10
                static const Widget w;   // ROMbar
11
        };
12
        static const WidgetWrapper hallo;
13
    public:
14
15
        int get( bool a )
16
        {
17
            if ( a )
18
                return WidgetWrapper::w.tab[0];
19
            return WidgetWrapper::w.tab[1];
20
        }
21
};
22
23
const test::WidgetWrapper::Widget test::WidgetWrapper::w =
24
{ 9, 7,
25
{ 2, 4 } };   // i.d.R. wird gerommt
26
27
int main()
28
{
29
    uint8_t text[] = "hallo", crc;
30
    test a;
31
    int dd = a.get( 1 );
32
33
    volatile int count;
34
    while ( 1 )
35
    {
36
        count++;
37
    }
38
}

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.