This is the mail archive of the
mailing list for the newlib project.
Re: ARM CM3 printf() problem
- From: Freddie Chopin <freddie_chopin at op dot pl>
- To: newlib at sourceware dot org
- Date: Thu, 04 Apr 2013 09:39:29 +0200
- Subject: Re: ARM CM3 printf() problem
- References: <CAMBZiN3ENEi4Q7ScHWV1K4eJWQBwnDmN__cMWB4hwnqyd3_wHg at mail dot gmail dot com>
General advice regarding printf():
1. Make sure that your stack is double-word aligned - that is 8-bytes
2. Make sure you have A LOT of stack, printf can use up to 1kB of stack
- really! If you don't plan to use floating point you can cut that down
by using integer-only version iprintf().
Your problem is caused by wrong linking - notice that the problematic
instruction is "blx <even-address>", so it tries to switch to ARM mode,
which does not exist for Cortex-M3. First of all you need to use gcc (or
g++) for linking, not ld directly - this way it's easier to deal with
multilib. Second thing is that you need to have proper multilibs,
compiled for cortex-m3 in thumb mode...