2016-06-14 14 views
3

Verwenden von Keil C51 auf einem 8051-Target. Ich habe eine Reihe von Funktionen, die einen Zeiger auf eine Struktur nehmen. Die Struktur wird nur in pdata oder idata leben. Aufgrund der Größenbeschränkungen und der Speicherzuordnungsmagie kann ich nicht alle Strukturen auf den gleichen Speicherplatz zusammenfassen.Wie wird ein Zeiger auf pdata oder idata ohne generischen Zeiger verwiesen?

Wenn ich meine Funktionen mit einem generischen Zeiger deklariere, wächst Code-Größe erheblich. Als Test habe ich diese Funktionen mit einem Zeiger auf eine Struktur in pdata deklariert. Wenn ich dies tue, kehrt meine Code-Größe zu normal zurück, aber natürlich erhalte ich Mspace-Warnungen und ich werde immer auf den falschen Speicherplatz zeigen, wenn ich eine Struktur von Idata auf die Funktion referenziere.

Angenommen, die Prämisse meines Ansatzes ist fundiert, wie können diese Funktionen Zeiger auf pdata oder idata ohne Code-Größenexplosion zulassen?

Vorausgesetzt, dass ich das alles falsch mache, übersehe ich eine traditionellere Lösung für dieses Problem?

+0

Veröffentlichen Sie eine [MCVE] (http://stackoverflow.com/help/mcve). und schaut euch [den Mann] an (http://www.keil.com/support/man/docs/c51/c51_le_memespecificptrs.htm) – LPs

Antwort

0

Es klingt, als ob Sie generische Zeiger benötigen.

Vielleicht sollten Sie das Problem der Codegröße aus einer anderen Richtung angreifen. Welche Compiler-/Linker-Optimierungseinstellungen verwenden Sie?