www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C - Pointer - IAR


Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

irgendwie stehe ich gerade etwas auf dem schlauch.....
möchte gerne auf eine adresse abprüfen aber bekomme es nicht hin...
unsigned char APPFLASH *address;

....


do
{
    __watchdog_reset();
    address++;
    if(address == *0x08)
    {......


Vielen Dank schon mal

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if(address == *0x08)


Lass mal den Stern weg und caste den Wert nach (void *)

    if (address == (void *) 0x08)


Ich nehme zumindest an, daß Du überprüfen möchtest, ob "address" den 
Wert 8 enthält.

Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ganze ist für die programmierung des eeprom und ich möchte das beim 
durchlauf gewisse register nicht überschrieben werden. möchte also 
überprüfen ob die adrresse = 8 ist.

Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider hat es nicht funktioniert

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"es hat nicht funktioniert" ist nicht wirklich aussagekräftig.

Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldige, :-)

ich kann leider nciht sehr viel mehr dazu sagen, da ich keine 
möglichkeit zum debuggen habe.

villeicht nochmals ein wenig ausführlicherer programmausschnit:

unsigned char APPFLASH *address;

....


do
{
  __watchdog_reset();
  address++;
  if(address == (void *) 0x08)
  {
  //nichts tun (Speicherplatz der Seriennummer)
  }
  else
  {
  spmEEWriteByte((unsigned long)address & 0xffff, *p++);
  }
}
while....


Das ist ein bootloader mit welchem ich unter anderem das eeprom 
"flashe", nur an gewissen stellen sollen eben die informationen nicht 
überschrieben werden, weil dort presets gespeichert sind.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>spmEEWriteByte((unsigned long)address & 0xffff, *p++);

adress ist doch gar kein Pointer, oder die Funktion ist auch 
unfunktionsfähig.
Du musst dich schon entscheiden, ob du einen Pointer oder eine Variable 
benutzen willst.

>(unsigned long)address & 0xffff
                          ^^^^^^ kannst du dir sparen.

Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache ich das so, bekomme ich den folgenden Fehler

if(address == 0x08)



Error[Pe042]: operand types are incompatible ("unsigned char __flash *" 
and "int") C:\.....\loader.c 302

Autor: Heschdy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niemand eine Idee?

Vielen Vielen Dank schon mal im vorraus... :-)

Autor: Ralf H. (heschdy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe den fehler gefunden....


muss so heißen:
if((unsigned long)address == 0x08)

Vielen Dank....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.