Die PIC24-Mikrocontroller haben getrennte Adressbereich für Daten (RAM)
und Code (Flash). Das nennt man Harvard-Architektur.
Es gibt also die Adresse 0x1000 zweimal:
Einmal im RAM, und einmal im Flash.
Beim C30-Compiler (Vorgänger des XC16) war es so, daß ein
ins Flash gelegt wird.
Du mußt also dem PIC24 sagen, daß er den String aus dem Flash holen soll
und nicht aus dem RAM. Dies kann entweder "zu Fuß" mit den
TBLRD-Befehlenmachen oder elegant über PSV ("Program Space Visibility"):
In einem bestimmten RAM-Adressbereich wird ein Teil des
Flash-Adressbereiches eingeblendet. Allerdings ist dies nur ein kleiner
Teil und welcher Teil das ist, wird über ein SpecialFunctionRegister
bestimmt.
I.d.R. kümmert sich der Compiler selbst darum, alle Strings und
Konstanten im Flash so zusammenzulegen, daß man sie komplett in den
PSV-Bereich einblenden kann.
Details findest Du in der Doku vom Compiler.
PS: Das hat nix mit Mogelei zu tun. Bei AVR und 8051 geht ein Zugriff
ins Flash nur über bestimmte Befehle, ein PSV gibt es da nicht.