CrasyCat,
I ran into the same problem with printf. I am following all the tricks you listed in this thread but it is still not quite right. Even I use the vprintf in printf.c
After inspecting the assembly listing, the caller pushes the 16-bit address as well as the page number of the string onto the stack (note the page number used to be always zero, but not anymore after I applied the trick). I think this is correct and expected behavior.
But I get garbage output. I noticed that if the string and vprintf() are in the same flash page then it prints correctly. Otherwise I get garbage. This suggests that vprintf() ignores the page number.
I currently do not have LIBDEF_FAR_CONST_STRINGS, LIBDEF_FAR_STRINGS and place MyFarString in non-paged memory (small data, banked function) and it works fine. This method is suggested in this thread:
http://forums.freescale.com/freescale/board/message?board.id=CW816COMM&message.id=240&query.id=22084...You agreed with vectorio that strings must be in non-paged memory for it to work. But in this thread you implied that strings may be in any page (banked data, banked function). Can you clarify that?
If you're sure that string can be anywhere then chances are I made some silly mistakes. What course of action would you recommend, such as experiments to find out what's worng?
Sector