AVRPascal — pytania i odpowiedzi (FAQ) ====================================== P: Dla kogo przeznaczony jest AVRPascal? O: AVRPascal jest przeznaczony dla użytkowników, którzy chcą programować 8-bitowe mikrokontrolery AVR w języku Pascal. Obsługuje on dwa równoległe tryby pracy, w zależności od preferowanego sposobu programowania lub wymaganego poziomu abstrakcji: 1) Inspirowany Arduino tryb z wykorzystaniem biblioteki UnoLib, dystrybuowanej razem z programem. Przeznaczony jest dla użytkowników, którzy: - chcą zacząć od czegoś prostego i funkcjonalnego, - korzystają z płytek kompatybilnych z ATmega328 (np. Arduino Uno, Nano), - preferują funkcje, takie jak DigitalWrite, Delay oraz abstrakcje wzorowane na Arduino API zaimplementowane w Pascalu (UnoLib), - chcą skupić się na eksperymentach, czujnikach i weryfikacji pomysłów, bez zagłębiania się w szczegóły sprzętowe. 2) Tryb niskopoziomowy AVR ("bare-metal"), stosowany w kursie programowania mikrokontrolerów AVR w Pascalu „Arduino na miarę naszych potrzeb”. Przeznaczony jest dla użytkowników, którzy: - chcą zrozumieć architekturę AVR i rejestry mikrokontrolera, - pracują blisko sprzętu (porty, timery, przerwania), - preferują niestandardowe konfiguracje ATtiny/ATmega, - wybierają pełną kontrolę i minimalny poziom abstrakcji. Te tryby są niezależne od siebie. Można wybrać jeden z nich na stałe lub przełączać się między nimi w miarę potrzeb. P: Czy AVRPascal jest produktem Open-Source? O: Nie, jest to program typu Freeware. Jednakże biblioteka UnoLib dołączona do pakietu jest produktem Open-Source opartym na licencji MIT. P: Czy mogę używać AVRPascala do tworzenia produktów komercyjnych? O: Tak. Możesz swobodnie sprzedawać urządzenia i oprogramowanie stworzone przy użyciu AVRPascala. Wymagania licencyjne zależą od tego, czego użyjesz w swoim projekcie: 1) Wygenerowany kod: Wykorzystuje bibliotekę FPC RTL (zmodyfikowana licencja LGPL), która jednoznacznie zezwala na tworzenie komercyjnych, zamkniętych aplikacji bez konieczności udostępniania kodu źródłowego Twojego programu. 2) Biblioteka UnoLib: Jeśli zdecydujesz się z niej skorzystać, jest ona licencjonowana na zasadach MIT, co wymaga dołączenia informacji o prawach autorskich w Twojej dokumentacji. 3) Kod niskopoziomowy: Jeśli piszesz własny kod bez użycia UnoLib, musisz przestrzegać jedynie warunków licencji FPC RTL. W każdym przypadku ostateczny plik binarny należy do Ciebie, a korzystanie z AVRPascala nie wiąże się z żadnymi opłatami licencyjnymi ani tantiemami. P: Czy AVRPascal to kompilator? O: Nie. AVRPascal to środowisko programistyczne (IDE) i pakiet narzędziowy. Zawiera zewnętrzne programy, takie jak kompilator Free Pascal (FPC) służący do generowania kodu i AVRdude do programowania mikrokontrolera. P: Czy AVRPascal to kompletny pakiet? O: Tak. AVRPascal zawiera wszystko, co potrzebne do pisania, kompilowania i wgrywania programów w Pascalu do mikrokontrolerów AVR bez konieczności instalowania dodatkowych programów. P: Czy muszę definiować typ mikrokontrolera w kodzie źródłowym? O: Nie. Symbol FPC_MCU_XXX lub uproszczona jego wersja XXX (typ MCU) jest definiowana przez program automatycznie na podstawie typu mikrokontrolera wybranego w oknie "Options". Ręczne definiowanie typów MCU jest zazwyczaj zbędne i może powodować konflikty. Warto jednak dodać dyrektywy blokujące, które przerywają kompilację w przypadku nieprawidłowego typu MCU. P: Skąd pochodzą definicje rejestrów i bitów MCU? O: Wszystkie definicje rejestrów i bitów są dostarczane przez kompilator Free Pascal Compiler (FPC) w oddzielnych plikach definicji dla każdego typu MCU umieszczonych w folderze rtl/avr. AVRPascal nie modyfikuje tych definicji, aby zachować pełną zgodność z kompilatorem. P: Dlaczego generowany kod jest czasami większy niż w Microchip Studio? O: FPC włącza kod startowy, inicjalizacyjny i finalizacyjny, a także pełną tablicę wektorów przerwań do plików wynikowych. Chociaż Microchip Studio (GCC) generuje tylko podstawowy kod startowy, FPC zapewnia bardziej niezawodne środowisko uruchomieniowe. Ta różnica jest celowa i nie oznacza niższej jakości kodu, lecz wynika z większego nacisku na bezpieczeństwo i niezawodność. Aby zmniejszyć rozmiar pliku wynikowego, upewnij się, że poziom „Optimization” jest ustawiony na -O3 lub -O4 w oknie "Options". P: Dlaczego mój program zaczyna wykorzystywać znacznie więcej pamięci Flash lub SRAM? O: Deklarowanie rejestrów sprzętowych jako normalnych zmiennych niepotrzebnie przydziela pamięć RAM i dodaje zbędny kod inicjalizacyjny. Rejestry MCU muszą być deklarowane za pomocą słowa kluczowego „absolute” tak, aby mogły zostać zmapowane bezpośrednio na adresy sprzętowe. P: Czy mogę dodawać własne definicje MCU? O: Tak. Lecz zamiast modyfikować pliki definicji RTL, lepiej zdefiniować brakujące rejestry lokalnie w programie za pomocą słowa kluczowego „absolute” (na przykład var PORTB: byte absolute $25). P: Czy mogę używać bibliotek napisanych dla Arduino? O: Nie bezpośrednio. Biblioteki C++ muszą zostać wcześniej przetłumaczone na język Pascal. Jednak AVRPascal zawiera bibliotekę UnoLib, która udostępnia znane funkcje (DigitalWrite, Delay itp.) zapewniające płynne przejście w środowisko Pascala. P: Jak mogę wykonywać obliczenia zmiennoprzecinkowe na 8-bitowych procesorach AVR? O: Standardowe typy Pascala „single” i „double” nie są obsługiwane przez kompilator FPC dla architektury AVR. Jednak biblioteka UnoLib 1.2+ udostępnia typ TFloat32. Zapewnia on funkcjonalną implementację 32-bitowej matematyki zmiennoprzecinkowej, obsługując standardowe operatory (+, -, *, /). Dzięki temu kod matematyczny jest zarówno możliwy do skompilowania, jak i łatwy do czytania. P: Dlaczego mój program w AVRPascalu korzystający z biblioteki UnoLib jest czasami większy niż ten sam program w Arduino? O: Jest to normalne i zrozumiałe. Istnieją dwa główne powody: 1) Podobnie jak GCC, FPC generuje kod inicjujący i finalizujący sekcje pamięci oraz środowisko wykonawcze, zapewniając poprawne wykonanie programu na mikrokontrolerze. W przypadku FPC kod ten jest zwykle nieco większy. 2) W przeciwieństwie do Arduino (GCC), FPC nie obsługuje funkcji (makr) preprocesora. Dostępne są tylko dyrektywy kompilacji warunkowej (np. {$IFDEF}, {$IFNDEF}) oraz definicje symboli i makr tekstowych z użyciem {$DEFINE}. Aby zaimplementować funkcjonalność, która normalnie korzystałaby z makr, UnoLib wykorzystuje zwykły kod Pascala i w razie potrzeby stosuje inlining. Może to zwiększyć rozmiar kodu, ale zapewnia bezpieczeństwo typów, poprawność i łatwość utrzymania. Aby zminimalizować rozmiar, upewnij się, że parametr "Optimization" jest ustawiony na -O3 lub -O4 w oknie "Options". P: Dlaczego FPC nie obsługuje funkcji (makr) preprocesora takich jak Arduino/C? O: To celowy wybór projektowy. FPC priorytetowo traktuje bezpieczeństwo typów i przejrzystość kodu. Zamiast makr należy używać procedur „inline”. Zapewniają one podobne korzyści wydajnościowe, jednocześnie pozwalając kompilatorowi wychwycić błędy, które z użyciem makr byłyby trudniejsze do znalezienia. P: Czy istnieją jakieś specjalne wymagania w odniesieniu do Arduino Leonardo? O: Tak. Arduino Leonardo to specjalna płytka, która wymaga resetu portu szeregowego przed programowaniem. Dla pełnej kompatybilności i stabilnego działania, zalecane jest korzystanie z przykładowej biblioteki UnoLib w katalogu "Extras". P: Jak mogę debugować błędy komunikacji z programatorem? O: Możesz włączyć wyświetlanie wiersza poleceń kompilatora i uploadera w oknie dialogowym "Options". Pozwala to zweryfikować dokładne parametry wysyłane do avrdude. P: Czy AVRPascal obsługuje STM32 lub ESP32? O: Nie. AVRPascal został zaprojektowany specjalnie dla 8-bitowej architektury AVR. Obsługa 32-bitowych MCU takich jak ARM (STM32) lub Xtensa (ESP32), wymaga innych kompilatorów i bibliotek. P: Gdzie mogę znaleźć szczegółową dokumentację języka Pascal dla AVR? O: Zapoznaj się z dokumentacją Free Pascal oraz stronami wiki dotyczącymi AVR i programowania niskopoziomowego na https://wiki.freepascal.org/.