• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Проблема с функцией log

nikolz

Well-known member
Добрый день,
Возникла такая проблема (XP, UDK последней сборки).
Делаю вот такой тест:
Вставляю функцию log в программу.
Следующим образом:
1 Вариант :
float test(float x){ return log(2.); }
собирается без проблем.
------------------------------------
2 Вариант :
float test(float x){ return log(x); }
Выдает ошибки с указанием совершенно не этой строки в программе.
C:\Espressif\examples\ESP8266\1wire_ds18b20/user/user_main.c:375: undefined reference to `log'
-----------------------------------
еще такой эффект.
Если функцию log вызвать в user_init для числа то ошибки нет а если в цикле то ошибка.
если вызвать в колбеке, то ошибка всегда и для числа и для цикла.
Т е получается что вызвать математические функции невозможно внутри циклов или функций, кроме вызова в user_init.
---------------------------------------
Надежда слабая, что кто-то знает , как это исправить, но надежда умирает последней.
Есть идеи как это исправить?
спасибо
 

sboganov

Member
Добрый день,
Возникла такая проблема (XP, UDK последней сборки).
Делаю вот такой тест:
Вставляю функцию log в программу.
Следующим образом:
1 Вариант :
float test(float x){ return log(2.); }
собирается без проблем.
------------------------------------
2 Вариант :
float test(float x){ return log(x); }
Выдает ошибки с указанием совершенно не этой строки в программе.
C:\Espressif\examples\ESP8266\1wire_ds18b20/user/user_main.c:375: undefined reference to `log'
-----------------------------------
еще такой эффект.
Если функцию log вызвать в user_init для числа то ошибки нет а если в цикле то ошибка.
если вызвать в колбеке, то ошибка всегда и для числа и для цикла.
Т е получается что вызвать математические функции невозможно внутри циклов или функций, кроме вызова в user_init.
---------------------------------------
Надежда слабая, что кто-то знает , как это исправить, но надежда умирает последней.
Есть идеи как это исправить?
спасибо
Скорее всего log объявлена как log(double) - значит не может сделать boxing от float и не находит функцию...
 

sboganov

Member
вот такая запись в user_init
float z1=10000000.; float m1=log(z1);
работает без проблем.
Прикольно - есть 2 функции log - одна в math.h - вторая в <cmath> (для C++) и похоже какая-то реализация не работает.

Можешь проверить - либо весь проект компилировать как C++, или только как C. По идеи либо все заработает, либо все перестанет работать :)
 
Сверху Снизу