I valori assunti dai puntatori sono corretti...ho notato però delle stranezze (supponiamo che la stringa in questione fosse "123"):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
.
.
.
ucDebugLen = strlen(pucOutStr); // ucDebugLen assume correttamente il valore 3
sprintf(sDebug,"stringa %s lunga %d", pucOutStr, ucDebugLen); // in memoria viene visualizzato, dalla locazione puntata da sDebug in poi "stringa 123 lunga 3"
iParValue=atoi((char *)pucOutStr); // iParValue assume il valore 23!!!!!!!!!!!!!
iDebug=atoi("0123"); // iDebug assume il valore 23!!!!!!!!!!!!!!
iDebug1=atoi("123"); // iDebug1 assume il valore 23!!!!!!!!!!!!!!!
iDebug2=atoi("234"); // iDebug2 assume il valore 234


vi viene in mente qualcosa? L'ambiente di sviluppo è il Keil uVision; non viene effettuata alcuna ottimizzazione in fase di compilazione; il micro su cui gira questo fw è un ARM7 Luminary (LM3S3739)