Frage

Auf meinem 8-Bit Freescale HCS08 Micro, wenn ich eine Bibliotheksfunktion nenne, die Werte an Zeiger zurückgibt, bestehe ich sie und ich möchte sie nicht wirklich, ich habe einen Null hineingeworfen, z. B.

UART_SendBlock((char *)txstr, strlen(txstr), NULL);

Die Art des letzten Arguments ist uint16_t * Und gibt die Anzahl der tatsächlich gesendeten Zeichen zurück, ein Wert, den mir egal ist.

Ich hatte jedoch Probleme mit dem Port A auf meinem Mikro, das jedes Mal, wenn diese Funktion aufgerufen wurde, versteckt wurde, und das Debuggen zeigte mich auf dieses Argument, das die Dinge vermasselt. Die Konfigurationsregister von Port A live unter den Adressen 0x0000 und 0x0001, wo es sich NULL (AKA (void *)0) Punkte. ich dachte NULL War irgendwie Magie, wo es eigentlich nichts tun würde, aber es scheint nicht so.

Meine Problemumgehung fühlt sich wirklich Hack an:

#define MNUL (void *)(&mynull)
uint32_t mynull;

Gibt es eine bessere Lösung? Ich habe versucht, MNUL an einem nicht verwendeten Speichersegment auf meinem Prozessor zu definieren, aber das verursacht einen sofortigen Rücksetzen.

War es hilfreich?

Lösung

Wenn die Dokumentation für uart_sendblock nicht besagt, dass ein Nullzeiger in Ordnung ist, erhalten Sie wahrscheinlich undefiniertes Verhalten, wenn Sie dies tun - und in diesem Fall scheint die Funktion nur an die Adresse zu sein, die Sie übergeben, Adresse 0 - die unter "undefiniert" gehen würde Verhalten".

Nennen Sie es einfach mit einem Parameter, es gibt keinen Grund, "klug" zu sein.

uint16_t unused_16;
UART_SendBlock((char *)txstr, strlen(txstr), &unused_16);

Wenn Sie Ressourcen eingeschränkt sind, machen Sie unused_16 ein globaler und wiederverwenden es an anderen Orten

Andere Tipps

Die Funktion versucht, einen Wert in die letzte Argumentation zu schreiben. Sie geben NULL (0x0000) über, sodass das Ergebnis an den Speicherort 0x0000 oder Ihren Port A geschrieben wird. Normal Null, aber es scheint, dass diese Funktion dieser Konvention nicht folgt. Sie müssen eine Variable für die Funktion zuweisen, um ihr Ergebnis zu schreiben, auch wenn Sie sie nicht verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top