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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.