luca_stm32
Чт, 07 декабря 2017 г., 8:23 вечера
Привет всем.
Я пытаюсь сделать Sprintf работать в Словере с поплавком.
Я написал следующий эскиз, чтобы проверить его:
Я пытаюсь сделать Sprintf работать в Словере с поплавком.
Я написал следующий эскиз, чтобы проверить его:
#include "Arduino.h"
void setup()
{
Serial.begin(115200);
delay(5000);
}
void loop()
{
static float temp = 10000;
uint8_t i;
char buffer[100];
for (i=1;i<13;i++) {
Serial.print("Before ");
Serial.println(i);
//sprintf (buffer,"Value = %f",temp);
ftoa(temp, buffer);
Serial.print("After ");
temp=temp/3;
Serial.println(buffer);
}
while(1);
}
Рик Кимбалл
Чт, 07 декабря 2017 г., 21:39
что такое FTOA? Это не стандартное. Где ты это взял?
Почему бы не использовать функции преобразования строки:
Почему бы не использовать функции преобразования строки:
#include "Arduino.h"
void setup()
{
Serial.begin(115200);
delay(5000);
}
void loop()
{
static float temp = 10000;
uint8_t i;
String buffer;
for (i=1;i<13;i++) {
Serial.print("Before ");
Serial.println(i);
buffer = temp; // convert a float using the String's conversion routines
Serial.print("After ");
temp=temp/3;
Serial.println(buffer);
}
while(1);
}
Rogerclark
Чт, 07 декабря 2017 г., 21:49
Я думал, что были общие проблемы с Float to Cstring и т. Д., Потому что только часть полного Printf / Sprintf Lib реализована, иначе она слишком велика, чтобы соответствовать большинству маленьких MCU
Или, может быть, я думаю о проблемах, которые у меня были в AVR
Или, может быть, я думаю о проблемах, которые у меня были в AVR
Рик Кимбалл
Чт, 07 декабря 2017 г., 22:05
Ты прав, Роджер. Я посмотрел на преобразование струны, но я не смотрел на функцию dtoStrf (), которую она вызывает, что в очередь вызовов Sprintf... Извините, NM
Также это не CString, это на самом деле строка .. который является специфическим классом Arduino. В версиях AVR у них есть свой собственный код преобразования плавания, который не использует Sprintf .. он использует функцию в AVR Libc
http: // www.атмель.com/webdoc/avrlibcrefe ... 71d42.HTML
... который в конечном итоге называет:
https: // github.com/vancgroup-mirrors/a ... DTOA_PRF.в
Также это не CString, это на самом деле строка .. который является специфическим классом Arduino. В версиях AVR у них есть свой собственный код преобразования плавания, который не использует Sprintf .. он использует функцию в AVR Libc
http: // www.атмель.com/webdoc/avrlibcrefe ... 71d42.HTML
... который в конечном итоге называет:
https: // github.com/vancgroup-mirrors/a ... DTOA_PRF.в
Rogerclark
Чт, 07 декабря 2017 г., 23:41
Обычно я в конечном итоге печатаю фиксированные точные плавания, используя функцию E.глин. Возьмите целочисленную деталь, а затем затем плавуческую часть и умножьте часть поплавки на 10 на количество требуемых цифр и т. Д
Это, вероятно, быстрее для процессора, чем вызов Sprintf и т. Д. Если вы просто хотите распечатать поплавок с фиксированной точностью.
Это, вероятно, быстрее для процессора, чем вызов Sprintf и т. Д. Если вы просто хотите распечатать поплавок с фиксированной точностью.
victor_pv
Чт, 07 декабря 2017 г., 23:56
Не уверен, чего вы пытаетесь достичь в конце, так как пример кода выглядит как пример чего -то не так с FTOA, а не Sprintf, но вот мои 2 цента:
1. Если вы хотите распечатать поплавок, просто используйте класс печати, он включает в себя функцию для печати поплавок:
1. Если вы хотите распечатать поплавок, просто используйте класс печати, он включает в себя функцию для печати поплавок:
Serial.print(float, num_digits));
Пито
Пт, 08 декабря 2017 г. 12:06
Прекрасно работает под ядром Слоэбера и Роджера (Bluepill):
Before 1
After Value = 10000.000000
Before 2
After Value = 3333.333252
Before 3
After Value = 1111.111084
Before 4
After Value = 370.370361
Before 5
After Value = 123.456787
Before 6
After Value = 41.152264
Before 7
After Value = 13.717422
Before 8
After Value = 4.572474
Before 9
After Value = 1.524158
Before 10
After Value = 0.508053
Before 11
After Value = 0.169351
Before 12
After Value = 0.056450
luca_stm32
Пт 08 декабря 2017 г. 6:37 утра
Код, который я протестировал, без FTOA. FTOA была функцией, которую я реализовал, чтобы попытаться заставить эскиз работать.
Код, который я использую, это то, что провел PITO, но в моем случае он не работает.
Я использую Rogers Core (Bluepill).
Если я использую Arduino IDE, Skecth работает правильно, Но при Slakeber это не работает.
@victor_pv:
2) Вы правы: статическое объявление не требуется.
3) Я немного растерялся. Как я уже говорил, код, который я использую, именно то, что проверил PITO.
4) Я обнаружил реализацию Sprintf Light, но эта реализация не поддерживает Float.
@Pito: Вы добавили несколько личных директив в Словере, которые не поставляются со стандартным распространением? Например, я заметил, что у вас есть модифицированная платформа.TXT, чтобы сделать новый () функциональный работа ViewTopic.PHP?F = 41&t = 2434&начало = 80
Лука
Код, который я использую, это то, что провел PITO, но в моем случае он не работает.
Я использую Rogers Core (Bluepill).
Если я использую Arduino IDE, Skecth работает правильно, Но при Slakeber это не работает.
@victor_pv:
2) Вы правы: статическое объявление не требуется.
3) Я немного растерялся. Как я уже говорил, код, который я использую, именно то, что проверил PITO.
4) Я обнаружил реализацию Sprintf Light, но эта реализация не поддерживает Float.
@Pito: Вы добавили несколько личных директив в Словере, которые не поставляются со стандартным распространением? Например, я заметил, что у вас есть модифицированная платформа.TXT, чтобы сделать новый () функциональный работа ViewTopic.PHP?F = 41&t = 2434&начало = 80
Лука
Пито
Пт, 08 декабря 2017 г. 8:28 утра
@Pito: Вы добавили несколько личных директив в Словере, которые не поставляются со стандартным распространением?
name=STM32 Boards (STM32duino.com)
version=0.1.2
compiler.warning_flags=-w -DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.none=-w -DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.default=-DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.more=-Wall -DDEBUG_LEVEL=DEBUG_FAULT
compiler.warning_flags.all=-Wall -Wextra -DDEBUG_LEVEL=DEBUG_ALL
compiler.combine.flags=-u _sbrk -u link -u _close -u _fstat -u _isatty -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
# compiler variables
..
luca_stm32
Пт 08 декабря 2017 г. 9:01
@Pito.
Привет, пито. Пожалуйста, будьте терпеливы, меня: я не очень хорош с затмением Как я могу правильно вставить эти директивы в Словебер? Я изменил платформу.TXT Under/Home/LUCA/ARDUINO/ARDWARE/ARDUINO_STM32-MASTER/STM32F1/PLARTION.TXT, перезапущенный Slaeber, очищенный проект, перестроенный проект, но я вижу дополнительные флаги в выходной консоли, и Sletch все еще не работает.
Привет, пито. Пожалуйста, будьте терпеливы, меня: я не очень хорош с затмением Как я могу правильно вставить эти директивы в Словебер? Я изменил платформу.TXT Under/Home/LUCA/ARDUINO/ARDWARE/ARDUINO_STM32-MASTER/STM32F1/PLARTION.TXT, перезапущенный Slaeber, очищенный проект, перестроенный проект, но я вижу дополнительные флаги в выходной консоли, и Sletch все еще не работает.
Starting combiner
"/home/luca/sloeber//arduinoPlugin/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-g++" -Og -Wl,--gc-sections -mcpu=cortex-m3 "-T/home/luca/arduino/hardware/Arduino_STM32-master/STM32F1/variants/generic_stm32f103c/ld/jtag_c8.ld" "-Wl,-Map,/home/luca/Documenti/sloeber-workspace/Sprintf_Test/Release/Sprintf_Test.map" "-L/home/luca/arduino/hardware/Arduino_STM32-master/STM32F1/variants/generic_stm32f103c/ld" -o "/home/luca/Documenti/sloeber-workspace/Sprintf_Test/Release/Sprintf_Test.elf" "-L/home/luca/Documenti/sloeber-workspace/Sprintf_Test/Release" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group ./sloeber.ino.cpp.o /home/luca/Documenti/sloeber-workspace/Sprintf_Test/Release/arduino.ar -Wl,--end-group
/home/luca/sloeber/arduinoPlugin/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/lib/armv7-m/libnosys.a(sbrk.o): In function `_sbrk':
sbrk.c:(.text._sbrk+0x30): warning: undefined reference to `end'
Finished building: Sprintf_Test.elf
Пито
Пт, 08 декабря 2017 12:15
Рецепт комбинации на платформе.txt (он добавляет {компилятор.комбинировать.флаги} в сборку):
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {compiler.combine.flags} {object_files} "{build.path}/{archive_file}" -Wl,--end-group
luca_stm32
Пт, 08 декабря 2017 г., 19:25
Привет, пито.
Спасибо за предложения.
В файловой платформе.TXT, который находится под/home/luca/arduino/hardware/arduino_stm32-master/stm32f1/platform.txt я добавил:
Спасибо за предложения.
В файловой платформе.TXT, который находится под/home/luca/arduino/hardware/arduino_stm32-master/stm32f1/platform.txt я добавил:
name=STM32 Boards (STM32duino.com)
version=0.1.2
compiler.warning_flags=-w -DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.none=-w -DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.default=-DDEBUG_LEVEL=DEBUG_NONE
compiler.warning_flags.more=-Wall -DDEBUG_LEVEL=DEBUG_FAULT
compiler.warning_flags.all=-Wall -Wextra -DDEBUG_LEVEL=DEBUG_ALL
compiler.combine.flags=-u _sbrk -u link -u _close -u _fstat -u _isatty -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
victor_pv
Пт, 08 декабря 2017 г., 8:21 вечера
В свойствах проекта измените доску на что -то другое, примените, а затем вернитесь к тому, который вы использовали. Это перезагружает все флаги с платформы.текст
Не уверен, что это перезагружает их, просто закрыв и открывая, я считаю, что это не так.
Я использую Slakeber 4.1 в Windows 10 и 4.0 В победе 8.1, оба работают нормально.
Не уверен, что это перезагружает их, просто закрыв и открывая, я считаю, что это не так.
Я использую Slakeber 4.1 в Windows 10 и 4.0 В победе 8.1, оба работают нормально.
Стивестронг
Пт, 08 декабря 2017 г., 8:46 вечера
Лука, какой метод загрузки вы используете?
Я думаю, что файл линкера не правильный. Вместо jtag_c8.лд это должно быть Bootloader_20.лд.
Я думаю, что файл линкера не правильный. Вместо jtag_c8.лд это должно быть Bootloader_20.лд.
luca_stm32
Сб 09 декабря 2017 г. 9:58 утра
@Виктор
Я следовал вашим инструкциям, и теперь добавленные директивы загружены Correclty, а эскиз работает, как и в Sloceber
@Стив
Я использую программист Stlink. Я думаю, что jtag_c8.LD в этом случае верен.
@Victor, Стив, Пито и Роджер
Еще раз спасибо за вашу поддержку
@Роджер
Возможно, добавить эти директивы на платформе.TXT по умолчанию? Я проверил этот эскиз с модифицированной платформой.TXT и Arduino IDE и Works, но я не знаю, имеют ли дополнительные директивы.
Я верю, что я не первый, кто спрашивает тебя об этом. Я также знаю, что при Arduino IDE STM32 Core работает правильно, и Core STM32 предназначен для Arduino IDE.
В противном случае, есть ли другой способ сделать его «совместимым» с Eclipse IDE?
Я пытаюсь сказать, что если кто -то хочет использовать ядро STM32 из репозитория и использовать Eclipse, такие функции, как New (), Sprintf... не работает, и они не знают, почему.
Еще раз спасибо и еще раз дополняют вашу работу.
С уважением.
Лука.
Я следовал вашим инструкциям, и теперь добавленные директивы загружены Correclty, а эскиз работает, как и в Sloceber
@Стив
Я использую программист Stlink. Я думаю, что jtag_c8.LD в этом случае верен.
@Victor, Стив, Пито и Роджер
Еще раз спасибо за вашу поддержку
@Роджер
Возможно, добавить эти директивы на платформе.TXT по умолчанию? Я проверил этот эскиз с модифицированной платформой.TXT и Arduino IDE и Works, но я не знаю, имеют ли дополнительные директивы.
Я верю, что я не первый, кто спрашивает тебя об этом. Я также знаю, что при Arduino IDE STM32 Core работает правильно, и Core STM32 предназначен для Arduino IDE.
В противном случае, есть ли другой способ сделать его «совместимым» с Eclipse IDE?
Я пытаюсь сказать, что если кто -то хочет использовать ядро STM32 из репозитория и использовать Eclipse, такие функции, как New (), Sprintf... не работает, и они не знают, почему.
Еще раз спасибо и еще раз дополняют вашу работу.
С уважением.
Лука.
Пито
Сб 09 декабря 2017 г. 10:44
Не уверен, что это перезагружает их, просто закрыв и открывая, я считаю, что это не так.
В Слове, чтобы загрузить новые свойства и настройки, вам нужно идти:
Проект -> Характеристики -> Ардуино -> Применять -> ХОРОШО.
Проект -> Характеристики -> Ардуино -> Применять -> ХОРОШО.