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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.