romabel class

Gast #3989174
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?
Gast #3989280
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
#3989296
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?
Gast #3990176
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren