Перейти к содержанию
    

ищу исходники функции printf/sprintf

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть исходники 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 в приложенном файле

frmwri.rar

Изменено пользователем KRS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...