Skocz do zawartości

[SW4STM32][C] Problem z przekazywaniem wartości do f-cji pow()


starcu

Pomocna odpowiedź

Witam,

mam problem z przekazaniem do funkcji pow() wartości zwracanej prze inna funkcję. Funkcja zwracająca wartość ma postać:

uin32_t foo()
{
    uin32_t a = 2.5 + 2.32;
    return a;
}

Natomiast funkcja wykorzystująca zwracaną przez nią wartość:

float foo2()
{
    float b = foo();
    float c = pow(b, 1.9);
    return c;
}

Obie funkcje znajdują się w pliku nagłówkowym dołączonym do pliku głównego. Do teraz program przy kompilacji nie zwraca żadnego błędu, ale gdy chcę użyć funkcji foo2 w pętli while eclipse zwraca błąd, który nie ma opisu oprócz nazwy Error1 i nazwy pliku .elf w nawiasach kwadratowych. Jednakże kiedy wyrzucę funkcję foo z argumentu pow() i zmienię funkcję foo2 na:

float foo2()
{
    float b = 2.464534535;
    float c = pow(b, 1.9);
    return c;
}

wszystko działa bez problemu. Nie mogę poradzić sobie z tym błędem a wykorzystanie tej funkcji jest w moim programie niezbędne, więc proszę o pomoc. Dodam, że błąd nie występuje przy wykorzystanie biblioteki standardowej dla STM32F103TBU6 i tutaj funkcja oblicza wartość bez problemu, ale dla HAL'a generowanego przez CubeMX nie chce działać mimo identycznej jak wcześniej implementacji. Korzystam z SW4STM32 zainstalowanego jako dodatek do Eclipe Luna i CubeMX 4.15.0.

Link do komentarza
Share on other sites

Obie funkcje znajdują się w pliku nagłówkowym dołączonym do pliku głównego.
Możesz to rozwinąć? Bo mi to wygląda na dołączanie plików .c przez #include, a tak sie nie robi 🙂
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dopiero teraz zrobiłem jak mówiłeś i po stworzeniu pliku "dodatkowy.c" wyrzuca błąd, że nie może znaleźć odwołania do funkcji mimo, że dołączam w main'ie i nowym pliku "dodatkowy.c" nagłówkowy plik "dodatkowy.h", w którym są deklaracje funkcji i zmiennych. W pliku "dodatkowy.c" wrzuciłem tylko realizacje funkcji i jak pisałem wcześniej odnośnik do pliku .h. W przypadku jakiegokolwiek programu w C taka opcja działa, ale dla projektu z CubeMX nie chce. Dodam, że po dodaniu pliku "dodatkowy.c" do listy plików linkowanych kompilator wyrzuca masę błędów.

Link do komentarza
Share on other sites

Jeżeli ktoś miałby kiedyś problem z f-cją pow() to znalazłem rozwiązanie. Należy odznaczyć użycie -lm w linkerze i dodać ręcznie do linkera (kolumna z literą -l) "c" oraz "m" w takiej kolejności.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.