Потому что оригинал требует много памяти в data_group. Пробуешь вызывать printf/sprintf из особо глубокого вложения - сразу segment overflow. Еще бы этот - сегмент забит под завязку, осталься один свободный байт. Процессор DS80C400 - для тех кто понимает

.
есть, например, в составе библиотек avrlib/armlib.
http://hubbard.engr.scu.edu/embedded/
Есть исходники IAR библиотеки
Код
/* - PRINTF.C -
The ANSI "printf" function.
$Name: Tyrone3b Tyrone3 Tyrone2 Tyrone1b Tyrone1 V3_34O V3_34N Spiff7 V3_34M V3_34L V3_34K V3_34J V3_34I V3_34H V3_34G $
Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/
#include "stdarg.h"
#include "stdio.h"
#include "icclbutl.h"
static void put_one_char(char c, void *dummy)
{
putchar (c);
(void)dummy; /* Warning on this line OK (Optimized Away) */
}
int printf(const char *format, ...) /* Our main entry */
{
va_list ap;
int nr_of_chars;
va_start(ap, format); /* Variable argument begin */
nr_of_chars = _formatted_write(format, put_one_char, (void *) 0, ap);
va_end(ap); /* Variable argument end */
return nr_of_chars; /* According to ANSI */
}
исходник _formatted_write в приложенном файле
Вот еще вариант упрощенный без библиотек
Regbist
Feb 28 2006, 17:34
что делаешь на этом процессоре ? если не секрет конечно
Esli eto ko me, to eto absolutno rabochiy isxodnik perepaxaniy s IAR'vskoy libi (?) (kotoriy ya ispol'zoval na chipax AVR 8515, i mega103), project ~1998-1999 goda, uprosheniy po prichine ne xvatki mesta, a chto eto bilo:
Uchet po 24 liniyam potrebleniya electroinergii s podstancii (krupnogo zavoda),
logalos' kazhdie 3 minuti v flash (AT49DBxxx), s RS232 mozhno bilo v luboe vremya poluchit' informaciyu za poslediy god (tarifi v raznoe vremya dlya predpriyatiy raznie, eto nuzhno dlya togo chtobi mozhno bilo bi planirovat' kogda chego puskat'), i v tozhe vremya posmotret' na LCD chego da kak , on eshe reaktivnuyu energiyu mog regulirovat' chtobi obrratno otdavat' , chtobi lishnix kilovat ne nashitali i tak dalee, vsego ne upomnish' proexali ...
Исходник функций на ассемблере можно найти при установке компилятора С (Borland, Watcom и т.д.) для платформы PC. Только необходимо вырать пункт: установить исходники. А дальше выкидывай лишнее и модифицируй под свой процессор.
Я в свое время перестал пользоваться sprintf-ом. Вместо этого написал свои функции IntToStr, UintToStr, LongToStr, UlongToStr, FloatToStr, скомпилил их в библиотеку и цепляю ко всем своим проектам. Они просто преобразуют соотв. число в строку в xdata, вывод в UART делаю через прерывания. Выигрыш по скорости/памяти - в разы. Тем более, что программа со sprintf иногда необъяснимо подглючивала. Компиляторы- Keil51, Keil166
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.