Ошибка с sprintf AVR Studio (Microhip Stduio)

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
Надеюсь что АВР студия и студия от микрочипа одно и тоже =) С виду похожа, и поскольку микрочип вроде выкупил авр то должно быть это одно и тоже.
Всем хороше времени суток. В общем возникла проблема использования некоторых функции С++ в студии от Микрочипа. А именно sprintf Код приблизительно такой:
C++:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
int main(void){
    char buffer [50];
    int n, a=5, b=3;
    n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
    while(1){}
}
Ошибки:
PHP:
Severity    Code    Description    Project    File    Line    Column
Error        Test.elf section `.text.avrlibc%22' will not fit in region `text'  
Error        recipe for target 'Test.elf' failed    Test  
Warning        variable 'n' set but not used [-Wunused-but-set-variable]    
Error        ld returned 1 exit status    Test    collect2.exe    0    0
Error        Could not allocate section .text, size = 2 bytes, attributes = code  
Error        Could not allocate section .text.avrlibc, size = 120 bytes, attributes = code    Test    fputc.o    0    0
Error        Could not allocate section .text.avrlibc, size = 20 bytes, attributes = code    Test    itoa_ncheck.o    0    0
Error        Could not allocate section .text.lcd_init, size = 132 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.__vector_13, size = 74 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.sendByte, size = 50 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.SendHalfByte, size = 46 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.millis, size = 30 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.lcd_clear, size = 20 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate section .text.setPos, size = 18 bytes, attributes = code    Test    main.o    0    0
Error        Could not allocate program memory    Test    RUNCOMPILERTASK    0    0
Error        Could not allocate section .text.avrlibc, size = 64 bytes, attributes = code    Test    sprintf.o    0    0
Error        Could not allocate section .text.avrlibc, size = 54 bytes, attributes = code    Test    strnlen_M.o    0    0
Error        Could not allocate section .text.avrlibc, size = 32 bytes, attributes = code    Test    strrev.o    0    0
Error        Could not allocate section .text.avrlibc, size = 50 bytes, attributes = code    Test    utoa_ncheck.o    0    0
Error        Could not allocate section .text.libgcc.prologue, size = 44 bytes, attributes = code    Test    _epilogue.o    0    0
Error        Could not allocate section .text.libgcc.mul, size = 18 bytes, attributes = code    Test    _mulqi3.o    0    0
Error        Could not allocate section .text.libgcc.prologue, size = 46 bytes, attributes = code    Test    _prologue.o    0    0
Вставил как код, может поприятнее читать будет =)

Гуглил вроде нашел что это прикол именно этой студии, и что в других средах такого нету.
Возможно есть какието другие методы по переводу разнообразных величин в массив символов ?
Впринцепе нашел itoa но он только целые числа, а вот с плавающей точкой бореться сея функция
dtostrf
. itoa завелась, а вот dtostrf тоже выдала множество ошибок.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Нету printf в тулчейне. И производных, таких как sprintf тоже.
Можно написать самому через itoa. Или ищите внешние библиотеки
 
  • Лойс +1
Реакции: Evgeniy2020

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
@Evgeniy2020, Зависит от используемого компилятора. В IDE которую ты используешь, видать вырезана эта функция, скорее всего из-за того что она достаточно много памяти жрет.
 
  • Лойс +1
Реакции: Evgeniy2020

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
@Геннадий П, а для числа с плавающей точкой нету ли похожих функции которые упрощены и заточены именно на этот тип?
Что-то типо как itoa(кусочек от комбайна) и sprintf(комбайн для разных типов)
К слову про самому написать, видел реализации на itoa. Но хотелось бы использовать такое решение только после того как узнаю что похожего нету в уже подключенных библеотеках =)
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
@Evgeniy2020, Для плавающей запятой в printf обычно отдельным ключом включается в компиляторе.

Примерно как тут, но это от другой IDE:
1628027997474.png

Ну или написать свое. Например, если отбросить дробную часть и затем взять остаток от деления на 10, то получим первую цифру. Дальше догадаетесь сами как остальные цифры брать.
 
Изменено:
  • Лойс +1
Реакции: Evgeniy2020

bort707

★★★★★★✩
21 Сен 2020
3,066
914
для числа с плавающей точкой нету ли похожих функции которые упрощены и заточены именно на этот тип?
да можно прямо в ардуино ИДЕ printf включить. Как - ищите в гугле, вариантов не один и не два.
Другой вопрос. что обычно нафик это не нужно. В подавлющем большинстве ардуино-программ вообще тип float не нужен, не то что printf
Задача выводить температуру или например давление на экран с двумя знаками после запятой - легко решается через целые числа
 
  • Лойс +1
Реакции: Evgeniy2020

Геннадий П

★★★★★★✩
14 Апр 2021
1,974
633
45
Задача выводить температуру или например давление на экран с двумя знаками после запятой - легко решается через целые числа
Да и большинство математических вычислений тоже.
 
  • Лойс +1
Реакции: Evgeniy2020

Evgeniy2020

✩✩✩✩✩✩✩
12 Июл 2020
91
0
@bort707, ардуино иде не использую ибо пишу под тиньку2313 где флеш в ардуино иде улитает в секунду. @Геннадий П, да, понял )
все ручками :ROFLMAO: