logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32 - Jak użyć #define do załadowania stałej do kolejki FreeRTOS?

wilk125 20 Cze 2014 14:59 1830 9
REKLAMA
  • #1 13724640
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    Witam
    Chciałem załadowac do kolejki dane ze stałuch zdefiniowanych przy pomocy #define xx
    ponizęj funckja wysylajaca dane do kolejki, jak mam zmienną lub wskażnik to nie ma problemu, ale jak uzyć stałej np. #define komenda 11, tak zeby to jedenascie znalazło sie w kolejce, a nie to co znajduje sie pod adresem 11.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 13724710
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    to zamiast define zrób zmienna
  • #3 13724839
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    tadzik85 napisał:
    to zamiast define zrób zmienna

    tak narazie mam zrobione, tylko za kazdym razem jak cos wysylam do kolejki to musze ta zmienna ustawiac, a tak mial bym zdefiniowanych kilkanascie komend na stałe.
  • REKLAMA
  • Pomocny post
    #4 13724915
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    to zrób globalne consty
  • Pomocny post
    #5 13725175
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    Niestety funkcja umieszczająca dane w kolejce potrzebuje wskaźnika na te dane. Jeśli masz dużo takich danych stałych to umieść je w tablicy stałych a w #define zadeklaruj wskaźniki do danych w tej tablicy.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 13725407
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    dzieki, mysle ze tak bedzie ok
  • REKLAMA
  • #8 13726657
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    A jaką przewagę mają wasze definy nad:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    ? Żadną. Zrób takie stałe i do funkcji przekaż wskaźnik na nie i tyle. Masz przy okazji kontrolę typu, dane we flashu i brak jakiegoś dziwnego rzutowania.
  • #9 13727164
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    Jak masz 2-3 takie dane to nie ma problemu, takie rozwiązanie jest najszybsze, ale jak masz tego więcej 20-30 i wiecej to już w kodzie zaczyna robić się śmietnik. Potem jak chcesz tego użyć w kilku plikach to jeszcze musisz potworzyć do każdej zmiennej eksporty. Chowając wszystkie dane do tablicy tworzysz zgrabną konstrukcję , eksportujesz tylko deklaracje tablicy a do danych w tablicy możesz uzyskiwać dostęp przez wielokrotnie stworzone #define lub stworzyć makro automatyzujące ten dostęp. Po drugie jakie to ma znaczenie jak to jest zrobione w tym przypadku?
  • REKLAMA
  • #10 13728454
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    michalko12 napisał:
    Po drugie jakie to ma znaczenie jak to jest zrobione w tym przypadku?

    Chyba poprzednik miał na myśli ilosc kodu. Jak by nie patrzył, tablica z const to dla mnie najlepsze rozwiazanie

Podsumowanie tematu

✨ Użytkownik pyta, jak załadować stałe zdefiniowane za pomocą #define do kolejki FreeRTOS, aby wartości te były przekazywane jako dane, a nie jako wskaźniki. Odpowiedzi sugerują różne podejścia, w tym użycie globalnych stałych (const), tablic stałych z wskaźnikami do tych danych oraz wykorzystanie literali złożonych (compound literals) w C. Użytkownicy podkreślają, że tablica stałych może uprościć kod, zwłaszcza przy większej liczbie stałych, a także umożliwić lepszą organizację i kontrolę typów.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA