Nie działa funkcja sprintf.

Odpowiedz Nowy wątek
2019-12-08 12:19

Rejestracja: 8 lat temu

Ostatnio: 3 dni temu

0

Uruchomiłem FreeRTOS na STM32F4 i wszystko prawie działa, gdyż mam problem z sprint. Mam zadanie, które odczytuje napięcie i natężenie z czujnika, odczyt odbywa się poprawnie, tylko zamiana wartości na tekst by wyświetlić na LCD już nie dział. Wyświetlenie napięcia działa, ale już natężenie nie wyświetla się tylko zawiesza się na sprintf(). Jak widać zmienna current jest float w zakresie -1000.00 mA do 1000.00 mA, natężenia ma mi wyświetlić dwa miejsca po przecinku.
Wygląda to tak:

void INA219_Read_Task(void const * argument)
{
    uint16_t voltage = 0;
    float current = 0.0;
    char buffor_voltage[10];
    char buffor_currnet[12];
    INA219_init();

    for(;;)
    {
        voltage = INA219_bus_voltage();  
        sprintf( buffor_voltage, "%d mV", voltage );
        BSP_LCD_DisplayStringAtLine(15, (uint8_t *)buffor_voltage);
        current = INA219_current();
        sprintf( buffor_currnet, "%.2f mA", current ); //tutaj się uC zawiesza
        BSP_LCD_DisplayStringAtLine(16, (uint8_t *)buffor_currnet);
        osDelay(1000);
    }
}

Nie mam pojęcie co mógłbym jeszcze zmienić by to działało.

edytowany 1x, ostatnio: furious programming, 2019-12-08 12:23

Pozostało 580 znaków

2019-12-08 17:13

Rejestracja: 7 miesięcy temu

Ostatnio: 2 dni temu

0

Nie za bardzo się orientuje ale float to chyba specyficzny typ danych, tutaj może być problem. Widzę w google że jest sporo tematów pod hasłem float stm32. Może zmiana na inny typ pomoże... int, double...


Pozostało 580 znaków

2019-12-08 18:33

Rejestracja: 5 lat temu

Ostatnio: 46 minut temu

0

Sprawdź flagi kompilatora dotyczące floatów (-mfloat-abi=hard, -mfpu=fpv4-sp-d16), być może to pomoże.


My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze

Pozostało 580 znaków

2019-12-08 18:50

Rejestracja: 8 lat temu

Ostatnio: 3 dni temu

0
goose_ napisał(a):

Nie za bardzo się orientuje ale float to chyba specyficzny typ danych, tutaj może być problem. Widzę w google że jest sporo tematów pod hasłem float stm32. Może zmiana na inny typ pomoże... int, double...

Próbowałem też double, ten sam efekt.

sugar_hiccup napisał(a):

Sprawdź flagi kompilatora dotyczące floatów (-mfloat-abi=hard, -mfpu=fpv4-sp-d16), być może to pomoże.

Mam ustawione tak jak napisałeś, każde inne ustawienie nic nie daje.

Pozostało 580 znaków

vtx
2019-12-10 06:21
vtx

Rejestracja: 4 miesiące temu

Ostatnio: 37 minut temu

1

Zobacz czy dodanie takiej opcji do 'ld' lub 'gcc' nie pomoże:

-u _printf_float
edytowany 2x, ostatnio: furious programming, 2019-12-10 17:50

Pozostało 580 znaków

2019-12-10 16:55

Rejestracja: 8 lat temu

Ostatnio: 3 dni temu

0

Mam tę opcję dodaną, bez tego się nie skompiluje, gdy używam sprintf i float.
Coś FreeRTOS się gryzie z funkcją sprintf. Gdy uruchomię ten kawałek kodu bez systemu to wszystko działa jak powinno. W internecie jest trochę o tym, spróbuje tam poszukać rozwiązania.

edytowany 1x, ostatnio: furious programming, 2019-12-10 17:50

Pozostało 580 znaków

2019-12-10 22:59

Rejestracja: 7 miesięcy temu

Ostatnio: 2 dni temu

0

Ja mam tylko Nucleo-F031K6 z CortexM0, a na tym twoim jest rejestr CPACR i FPCCR . Trzeba go aktywować tutaj jest opis . W sumie to sam się muszę doedukować w temacie floatów an ARM. Widzę że są jakieś rzeczy tupu fixed point, _fract _accum etc Może nie masz tego w ogóle zainicjalizowanego, bo piszą że to jest domyslnie wyłączone.


edytowany 5x, ostatnio: goose_, 2019-12-10 23:05

Pozostało 580 znaków

vtx
2019-12-11 06:39
vtx

Rejestracja: 4 miesiące temu

Ostatnio: 37 minut temu

0

Jeśli możesz pokaż całego Makefile'a, którego używasz, ewentualnie cały log z kompilacji.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0