Hmm schrieb:
> Ahh...ich liebe C++ ...ein wenig das Gehirn quälen :-)
Nur ist das eher C-Stil... In C++ kann man das sauberer so machen:
1 | static constexpr std::uintptr_t ROM_API_BASE_LOC = 0x03000200UL;
|
2 | static ROM_API_T* const ROM_API = *reinterpret_cast<ROM_API_T**> (ROM_API_BASE_LOC);
|
Alex G. schrieb:
> Andererseits gabs Gelegenheiten wo Makros auch in Java ganz nützlich
> wären, nur man sollte es nicht wie hier übertreiben.
Da Makros ja nur simple Textersetzung sind und man damit viel falsch
machen kann, haben Java (und die meisten anderen Sprachen) das nicht,
dafür aber andere Mechanismen zur Abstraktion.
foobar schrieb:
> Ernsthaft? Einfacher geht es doch gar nicht. Wie würdest du denn den
> Zugriff auf eine Struktur machen, dessen Adresse in 0x3000200 steht?
Eine Alternative wäre:
1 | #ifdef __cplusplus
|
2 | extern "C"
|
3 | #else
|
4 | extern
|
5 | #endif
|
6 | ROM_API_T* const ROM_API;
|
und im Linker-Script (hier: GNU LD Syntax):