Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

stm32 - eclipse, HAL, CubeMX - pusty plik wynikowy

.:KoSik:. 11 Nov 2020 11:48 510 7
Computer Controls
  • #1
    .:KoSik:.
    Level 18  
    Witam,

    Mój komputer był już tak powolny, że byłem zmuszony przywrócić system, niestety... Teraz już komputer śmiga aż miło, ale niestety nie wszystko śmiga :not:
    Zainstalowałem, tak jak uprzednio (przed kilkoma laty) eclipse, bibliotekę HAL (czyli cały pakiet SW4STM32) i zintegrowany CubeMX. Niestety moje projekty nie kompilują się poprawnie. Wyskakuje sporo warningów i nie bardzo rozumiem dlaczego ale nie ma żadnych błędów i kompilacja przebiega "normalnie".

    W pliku wynikowym dostaję:
    Quote:

    :04000000F8B500BF90
    :04000400F8B500BF8C
    :00000001FF


    Nie bardzo wiem gdzie szukać błędu. Dodam jeszcze, że gdy tworzę nowy projekt typu miganie diodą czy uruchomienie LCD działa bez problemu. Podpowiedzcie coś, proszę :please:

    => Wywaliłem wszystko kolejny raz. Zresetowałem komputer. Zainstalowałem kolejno wszystkie składniki w najnowszych wersjach. Zaimportowałem projekt (bez migracji do ostatniej wersji oprogramowania). Skompilował się bez problemu. Wyrzuca 2 ostrzeżenia ale to mało ważne:
    Quote:

    13:15:06 **** Incremental Build of configuration Debug for project STM32F103_MyHome_NRFTest ****
    make all
    Building file: ../Src/main.c
    Invoking: MCU GCC Compiler
    C:\STM32\mx_workspace\STM32F103_MyHome_NRFTest\Debug
    arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft '-D__weak=__attribute__((weak))' '-D__packed=__attribute__((__packed__))' -DUSE_HAL_DRIVER -DSTM32F103xB -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Inc" -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/STM32F1xx_HAL_Driver/Inc" -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/CMSIS/Device/ST/STM32F1xx/Include" -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/CMSIS/Include" -I"C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Inc" -O2 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fmessage-length=0 -MMD -MP -MF"Src/main.d" -MT"Src/main.o" -o "Src/main.o" "../Src/main.c"
    ../Src/main.c: In function 'wyslijDane':
    ../Src/main.c:95:10: warning: pointer targets in passing argument 1 of 'sprintf' differ in signedness [-Wpointer-sign]
    sprintf(nrfTX,"#88.%i.%i.>%i",liczba,liczba2,liczba3);
    ^~~~~
    In file included from C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h:50:0,
    from C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h:45,
    from C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Inc/stm32f1xx_hal_conf.h:219,
    from C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h:46,
    from C:/STM32/mx_workspace/STM32F103_MyHome_NRFTest/Inc/main.h:31,
    from ../Src/main.c:22:
    c:\stm32\ac6\systemworkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825\tools\compiler\arm-none-eabi\include\stdio.h:244:5: note: expected 'char * restrict' but argument is of type 'uint8_t * {aka unsigned char *}'
    int sprintf (char *__restrict, const char *__restrict, ...)
    ^~~~~~~
    ../Src/main.c: In function 'main':
    ../Src/main.c:250:16: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Wint-conversion]
    liczba=atoi(nrfRX[3]);
    ^~~~~
    In file included from ../Src/main.c:29:0:
    c:\stm32\ac6\systemworkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825\tools\compiler\arm-none-eabi\include\stdlib.h:81:5: note: expected 'const char *' but argument is of type 'uint8_t {aka unsigned char}'
    int atoi (const char *__nptr);
    ^~~~
    Finished building: ../Src/main.c

    Building target: STM32F103_MyHome_NRFTest.elf
    Invoking: MCU GCC Linker
    arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -specs=nosys.specs -specs=nano.specs -u _printf_float -T"../STM32F103C8Tx_FLASH.ld" -Wl,-Map=output.map -Wl,--gc-sections -o "STM32F103_MyHome_NRFTest.elf" @"objects.list" -lm
    Finished building target: STM32F103_MyHome_NRFTest.elf

    make --no-print-directory post-build
    Generating hex and Printing size information:
    arm-none-eabi-objcopy -O ihex "STM32F103_MyHome_NRFTest.elf" "STM32F103_MyHome_NRFTest.hex"
    arm-none-eabi-size "STM32F103_MyHome_NRFTest.elf"
    text data bss dec hex filename
    21384 532 1868 23784 5ce8 STM32F103_MyHome_NRFTest.elf


    13:15:08 Build Finished (took 1s.871ms)


    Rozmiar pliku jest ok. Urządzenie niestety nie startuje. Póki co to tylko program testowy do nrf24l01. Program jest na pewno w porządku, bo wgrany z kopii działa bez zarzutu.
    Po migracji projektu na nową wersję oprogramowania bez zmian.
    Macie może jakieś podpowiedzi co mogę sprawdzić czy muszę szukać na piechotę?
  • Computer Controls
  • #2
    Freddie Chopin
    MCUs specialist
    .:KoSik:. wrote:
    ../Src/main.c: In function 'main':
    ../Src/main.c:250:16: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Wint-conversion]
    liczba=atoi(nrfRX[3]);
    ^~~~~
    In file included from ../Src/main.c:29:0:
    c:\stm32\ac6\systemworkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825\tools\compiler\arm-none-eabi\include\stdlib.h:81:5: note: expected 'const char *' but argument is of type 'uint8_t {aka unsigned char}'
    int atoi (const char *__nptr);
    ^~~~

    Jeśli to jest mało istotny warning, to faktycznie kod jest na pewno w porządku. Co prawda w C++ takie coś generuje errora na najniższych ustawieniach, ale jak wiadomo C++ jest głupie (;
  • Computer Controls
  • #3
    .:KoSik:.
    Level 18  
    Freddie Chopin wrote:
    jak wiadomo C++ jest głupie

    Och, nie o to mi chodziło. Z pierwszym ostrzeżeniem nie mogę sobie poradzić i nie mogłem już wcześniej. Drugi natomiast powoduje różnica typów danych. Nie wiem jak tą zmienną zamienić na const char ale długość jest chyba taka sama więc nie powinno być z tym problemu.
    Wcześniej ten kod działał. To tylko program testowy.

    => Problem rozwiązany! :idea:
    Dolutowałem szpilki i po podłączeniu analizatora stanów okazało się, że SPI działa bez zarzutów ale wysyła w pewnym miejscu puste bajty. Idąc tym tropem okazało się, że w bibliotece od NRF24L01 w inicjalizacji był błąd. Skutkował on wysłaniem 4 bajtów 0x00 dodatkowo razem z adresem urządzenia.

    O tu jest:
    Code: c
    Log in, to see the code


    Nie wiem dlaczego tam jest 5 i dlaczego w starej wersji działało bez problemu. Teraz to już nie ważne. Po zmianie na 1 bajt wszystko wróciło do normy.
  • #4
    User removed account
    Level 1  
  • #5
    .:KoSik:.
    Level 18  
    agent.007 wrote:
    Jeżeli celem było skonwertowanie na integer tekstu zaczynającego się od czwartego znaku tej tablicy to musisz


    Celem było skonwertowanie tylko jednego znaku z tablicy uint8_t

    To wszystko jest bardzo proste i bardzo fajnie można to zrozumieć. Dopóki nie zacznie się pisać programu :roll: Wszystko się myli i już głupieję czy ma być znak & czy * czy jeszcze coś innego. Niestety każda ta funkcja jest inna i bez zrozumienia co ona tak naprawdę robi łatwo popełnić błąd.
    Dziękuję za wyjaśnienie w przystępny sposób :D

    Sprawdziłem i niestety wyskakuje kolejne ostrzeżenie:
    Quote:
    Description Resource Path Location Type
    pointer targets in passing argument 1 of 'atoi' differ in signedness [-Wpointer-sign] main.c /STM32F103_MyHome_NRFTest/Src line 250 C/C++ Problem
  • #6
    User removed account
    Level 1  
  • #7
    .:KoSik:.
    Level 18  
    agent.007 wrote:
    Ale to nie zadziała


    Takie rozwiązanie z odjęciem '0' już gdzieś widziałem. Myślałem, że atoi() będzie lepsze. Jak widać myliłem się.
    Potrzebowałem zamienić tylko jeden znak więc Twoja funkcja sprawdzi się dużo lepiej i pewnie jest trochę szybsza niż atoi().

    Teraz skompilowało bez błędów. Dziękuję jeszcze raz za pomoc
  • #8
    rafiak2
    Level 8  
    Cześć,
    to jest znany błąd i zgłoszony już twórcom, powinien być naprawiony podczas najbliższych aktualizacji. Problem polega na tym, że uszkodzeniu ulega plik STM32FXXXXXx_FLASH.Id. Jest to plik generowany automatycznie, zawierający on opis pamięci mikrokontrolera. Najlepiej skasować uszkodzony plik STM32FXXXXXx_FLASH.Id i ponownie wygenerować projekt z CubeMX a następnie skompilować cały projekt.