Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32F103RB - FreeRTOS jak wystartować?

moscow18-1990 24 Lip 2016 19:34 1992 10
  • #1 24 Lip 2016 19:34
    moscow18-1990
    Poziom 8  

    Dzień Dobry

    Potrzebuję małej rady. Jestem w trakcie realizacji pewnego projektu i mogę użyć callbacków i algorytmu karuzelowego lub przeprowadzić eksperymenty z systemem czasu rzeczywistego. Tak czy siak muszę nabrać doświadczenia w tej dziedzinie. Z tego co wstępnie wiem to wystarczy do projektu dodać odpowiednie pliki ".c" i ".h.". Podobno mogę wtedy korzystać z kolejek itp. Tylko pytanie czy korzystanie z FreeRTOS ogranicza się rzeczywiście do dodania takich plików? Czy trzeba zrobić znacznie więcej i generalnie czy jest to bardzo skomplikowane? Mógłby mnie ktoś nakierować na takie minimum, które muszę wykonać aby wystartować z tematem?

    0 10
  • Pomocny post
    #2 24 Lip 2016 20:29
    grko
    Poziom 33  

    Najlepiej skorzystaj z jakiegoś przykładu na Twojego procka. Tak ogólnie to:
    - dodajesz katalogi include oraz portable/GCC/ARM_CM3 do include path
    - kompilujesz plik port.c z katalogu portable/GCC/ARM_CM3
    - kompilujesz jeden plik z katalogu portable/MemMang (np heap_2.c)
    - kompilujesz wszystkie pliki zawarte w głównym katalogu FreeRTOSa

    W projekcie powinieneś mieć plik FreeRTOSConfig.h. Zwróć uwagę w szczególności na definicje:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 12 Lut 2017 13:51
    moscow18-1990
    Poziom 8  

    Ok. Mam projekt. Normalnie się kompiluje i wydaje się działać. Generalnie mam tylko problem z plikiem syscalls.c i z plikami common->include.

    syscalls.c:

    STM32F103RB - FreeRTOS jak wystartować?

    include:

    STM32F103RB - FreeRTOS jak wystartować?


    Generalnie nie powoduje to błędów kompilacji, ale mimo wszytko chciałbym się pozbyć tego typu komunikatów jak na zdjęciu. Ktoś wie co może być przyczyną ich powstawania?

    0
  • Pomocny post
    #4 12 Lut 2017 14:56
    2675900
    Użytkownik usunął konto  
  • Pomocny post
    #6 12 Lut 2017 15:06
    2675900
    Użytkownik usunął konto  
  • #7 12 Lut 2017 16:23
    grko
    Poziom 33  

    @Piotrus_999 Jesteś w błędzie. Z wielu przyczyn:

    1. Stosowanie standardowej konstrukcji języka prawie __zawsze__ będzie lepsze od rozszerzeń kompilatora.
    2. Stosowanie tego unused spowoduje problemy z portowalnoscią kodu. Inne kompilatory nie będą wspierać attribute(unused) albo będą wspierać tylko trzeba wstawić tego typu atrybut w innym miejscu -> same problemy. Ostatecznie aby pozbyć się warningów skończy się na: (void)zmienna;
    3. Jeśli chodzi o warunkową kompilacją to również mozna sobie zrobić coś w stylu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    4. Wobec powyższego pada również argument z search/replace (kompletnie bezsensowny).

    5. W tych syscallsach chcemy aby te argumenty były prawie zawsze ignorowane gdyż większość z tych funkcji to po prostu puste implementacje. Stare poczciwe (void)zmienna jest wystarczająco wymowne w tym miejscu.

    6. Nieczytelne. Co chwilę w liście argumentów unused, unused, unused...

    Nie piszę tego posta aby Ciebie przekonać tylko innych. Bo wiem, że to niemożliwe choćby po Twoich wypowiedziach na temat const.

    0
  • #8 12 Lut 2017 16:41
    2675900
    Użytkownik usunął konto  
  • #9 12 Lut 2017 16:52
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Powyższa dyskusja doskonale pasuje do stwierdzenia, że w C++ rozwiązano ten problem całkowicie - nazwy nieużywanych argumentów można usunąć z definicji funkcji (zostawiając oczywiście typy) i "voila" - problem solved.

    https://github.com/DISTORTEC/distortos/blob/master/source/syscalls/syscallsStubs.cpp

    0
  • #10 12 Lut 2017 16:58
    grko
    Poziom 33  

    @Freddie Chopin No nie całkowicie. Często mamy do czynienia z warunkową kompilacją typu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tak czy inaczej fajnie wiedzieć, że w C++ jest coś takiego:)

    0
  • #11 23 Kwi 2017 21:27
    moscow18-1990
    Poziom 8  

    Ok. (void) zmienna rozwiązało problem.

    0