- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 9 von 9

Thema: memory löschen mit c

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332

    memory löschen mit c

    Hallo Zusammen,

    die folgende Routine soll mir einen Kartenbereich das Bit 0 löschen, andere Bits sollen stehen bleiben.
    Code:
    void    Navigation::ResetWalkWay(void)
    {
    unsigned char             *pointer;                                                        // Daten pointer
    unsigned long            offset;
    
        if(m_mappointer != NULL )                        // Besteht noch eine Karte im Speicher
            {
            pointer = m_mappointer;
            for(offset=0;offset  < MAX_COORDIANTE;offset++);
                {
                *pointer &= 0xfe;
                pointer++;
                }
            }
    }
    Verwende ich diese Zeile, wird der Speicher korrekt gelöscht.

    Code:
            pointer = m_mappointer;
            memset(pointer,0,
                    MAPSIZE_XY * MAPSIZE_XY);    // Karte wieder zuruecksetzen
    Ich will aber nicht komplett löschen, sondern nur das bit 0.

    Ich bekomme die "Krise"...

    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Wo ist das Problem? Die obere Funktion sollte korrekt arbeiten.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Laut meiner Datenübertragung arbeitet diese Funktion aber nicht so, wie sie sollte.
    Das Bit0 bleibt anstehen. Ich werde das heute abend nochmals prüfen.

    In meinem Programm lasse ich zyklisch den Status der Karte auf einem PC anzeigen.
    Hier wird der Status ständig neu angezeigt. Füge ich die Löschfunktion ein (menset), wird
    der Bildschirm auch korrekt dargestellt.

    Bis jetzt bin ich davon ausgegangen, das ein Fehler in den oberen Zeilen sein muss.

    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Was mir auffällt: Du verwendest in deiner Funktion ein anderes Limit als beim Aufruf von memset. Außerdem könntest du anstelle des Pointer-Increments einen Array-Zugriff machen (pointer[offset] &= ...), ich rechne aber fast damit, dass der Compiler beide Varianten gleich übersetzt.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hi,

    die Definition kommt aber auf das selbe raus.

    Code:
    #define        MAPSIZE_XY                                                300
    #define        MAPSIZE_XY_MM                                        10000
    #define         MAX_COORDIANTE                                    90000
    #define         MAP_FACTOR                                                33                // 1 Grid = 33  mm
    Der Code
    Code:
                *(pointer[offset]) &= 0xfe;
    gibt diesen Fehler ?!

    ./source/nav.cpp:229: error: invalid type argument of `unary *'

    Diese Zeile ist hingegen o.k.
    Code:
                *(pointer + offset) &= 0xfe;
    Leider ist der Effekt immer noch vorhanden. Bei einer neuberechnung eines neuen Zielpunkt wird der zu überwachende Korridor zwar neu berechnet und auch eingezeichnet. Nur wird der alte nicht gelöscht. Siehe Bild.

    Ich will den Speicher nicht löschen, da hier auch bereits gefunden Objekte dann gelöscht werden würde.

    Gruss R.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken kSCADA3.jpg  
    Geändert von Ritchie (29.08.2012 um 22:18 Uhr)
    Kaum macht man es richtig, schon funktioniert's ...

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hi,

    hier noch etwas seltsameres

    Code:
    void    Navigation::ResetWalkWay(void)
    {
    unsigned char             *pointer;                                                        // Daten pointer
    long            offset;
    
        if(m_mappointer != NULL )                        // Besteht noch eine Karte im Speicher
            {
            pointer = m_mappointer;
    
            printf("Hallo 1\n");
    
    
            for(offset=0;  offset  < 90000;  offset++);
                {
                printf("Hallo 2\n");
                *(pointer + offset) &= 0xfe;
    //            pointer++;
                }
            }
    }
    Hat diese Ausgabe:
    Hallo 1
    Hallo 2
    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

Ähnliche Themen

  1. Memory Lock Bits
    Von dj5am im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 09.11.2011, 18:31
  2. 1 kanal memory baustein
    Von hasee im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.03.2008, 22:07
  3. External Memory Controller
    Von someone80 im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 17.12.2007, 11:10
  4. Memory dump und ändern
    Von for_ro im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 11.11.2007, 12:07
  5. Memory Erweiterung für µC
    Von Mobius im Forum Eigene fertige Schaltungen und Bauanleitungen
    Antworten: 2
    Letzter Beitrag: 16.08.2005, 17:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress