Skocz do zawartości
starcu

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

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.

Udostępnij ten post


Link to post
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 🙂

Udostępnij ten post


Link to post
Share on other sites

Obie funkcje znajdują się w pliku dodatkowy.h a w pliku main.c dołączam je za pomocą:

#include "dodatkowy.h"

Udostępnij ten post


Link to post
Share on other sites

To przerzuć je do pliku .c a w pliku .h zrób same deklaracje.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

Musisz dodać plik w tym samym folderze (z poziomu Project Explolera) co znajduje sie main.c.

Udostępnij ten post


Link to post
Share on other sites

Jeśli tak go dodaję to wyrzuca mi 18 błędów m.in.

unknown type name 'uint32_t'

.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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...