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

[C] Jak korzystać z m-gen do tworzenia makr GPIO w mikrokontrolerach

Larus t. 23 Mar 2019 22:16 831 5
  • #1 17862685
    Larus t.
    Poziom 2  
    Witam,

    chciałbym przedstawić napisany przeze mnie ostatnio program na PC.
    m-gen automatycznie tworzy makra do obsługi gpio (wejść - wyjść) w mikrokontrolerach.

    O co chodzi:

    - ściągamy binarki z repozytorium github.com/Leopardus4/m-gen (zakładka release) lub kompilujemy ze źródeł

    - dla wygody kopiujemy program do PATH - github.com/Leopardus4/m-gen/blob/master/README.md#installation

    - uruchamiamy terminal / konsolę / jak-to-się-inaczej-nazywa / shell-a

    - wpisujemy:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    - tworzymy nowy arkusz:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    - otwieramy ten plik w ulubionym edytorze tekstu - wygląda mniej więcej tak:

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


    Najważniejsza jest dla nas sekcja $m - tutaj "tworzymy" nowe makra. Mode - tryb pinu - opis na dole pliku. PORT,PIN - który to fizycznie pin mikrokontrolera. Name - symboliczna nazwa (bez spacji).

    Przykładowo możemy go wypełnić tak:

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


    - następnie wywołujemy program który stworzy odpowiednie makra:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    nowy plik .h będzie zawierał makra wyglądające tak:

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




    Teraz nie pozostaje nic innego jak wykorzystać makra w naszym projekcie.

    Jeśli w trakcie prac nad systemem okaże się, że np. trzeba zmienić projekt PCB i diodka lepiej by pasowała na pinie PD1 zamiast PC5, wystarczy poprawić to w pliku .gm i ponownie wywołać m-gen - nic więcej. Nie trzeba zmieniać ani jednej linijki kodu.


    Taka pokrótce jest idea aplikacji. Powstała ona na własny użytek, ale ponieważ może być użyteczna, postanowiłem upublicznić ją na licencji GPL.

    Czym to na pewno nie jest:
    Nie jest to (i nie ma być) kolejne Arduino czy CUBE- z co najmniej 2 względów:
    - szybkość - tworzony jest natywny kod, co oznacza, że nie tracimy szybkości programu (można zajrzeć do generowanego assemblera - kod wynikowy jest taki jak bez makr)
    - to nie jest nakładka dla "wygodnego" programowania i nie zwalnia ze znajomości platformy - nie używaj tych makr jeśli nie wiesz co robią. Program ma jedynie ułatwić utrzymanie kodu warstwy sprzętowej, który może być łatwiej i szybciej portowalny.

    Aktualnie obsługiwane:
    - AVR8
    - (edit: ) LPC111x
    w przyszłości będa rozwijane porty na inne mikrokontrolery (ARM, ...).
    Jeśli jest ktoś chętny do współpracy, tworzenie nowego "targeta" jest stosunkowo proste - opis tutaj: github.com/Leopardus4/m-gen/blob/master/CONTRIBUTORS.md

    Za wszelkie sugestie i informacje o błędach (zawsze się mogą zdarzyć) oraz konstruktywną krytykę dziękuję, jednak proszę o powstrzymanie się od komentarzy w stylu "to jest źle zrobione, bo JA bym zrobił lepiej". Jeśli tak - kod jest otwarty, więc można się wykazać...


    Pozdrawiam
    Larus
  • #3 17862730
    LChucki
    Poziom 31  
    Makro może zaczynać się od cyfry?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jak dla mnie przerost formy nad treścią, zawsze tworzę sobie makra dla GPIO. Szybsze niż tworzenie jakimś programem.
  • #4 17862772
    Larus t.
    Poziom 2  
    LChucki napisał:
    Makro może zaczynać się od cyfry?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dzięki za czujność, poprawione.

    LChucki napisał:

    Jak dla mnie przerost formy nad treścią, zawsze tworzę sobie makra dla GPIO. Szybsze niż tworzenie jakimś programem.


    Mi akurat prościej napisać jedną linijkę w arkuszu i puścić "autokonwerter" (jedna linijka w konsoli) niż pisać co najmniej trzy linijki makr w nagłówku i pilnować żeby | w "|=" nie zgubić, nie mówiąc o modyfikacji makra. No ale integracja tego w istniejący projekt oparty na innej konwencji - cóż, nie byłaby najprostsza.
  • #5 17862795
    khoam
    Poziom 42  
    Jest taka aplikacja o nazwie m4 - uniwersalny makro-procesor dedykowany do automatycznego generowania plików źródłowych C/C++ (ale nie tylko), również z uwzględnieniem #define.
    Kod źródłowy tej aplikacji jest otwarty. Sądzę, że warto abyś zapoznał z jego możliwościami ;)
  • #6 17910440
    Larus t.
    Poziom 2  
    @khoam
    Racja, chociaż jak zajrzałem do manuala to jest to całkiem spory kombajn ;)
    Może gdybym wcześniej na to trafił, nie tworzyłbym m-gen'a - kto wie?


    W międzyczasie powstał nowy port na LPC111x - z pełną kompatybilnością pomiędzy nim a dotychczasowym AVR,
    oraz kilka drobnych ficzerów.
REKLAMA