Jeżeli zawitałeś tutaj tylko po skrypt to jest on do pobrania tutaj:
I generalnie mógłbyś przestać czytać, ale jeżeli chcesz dowiedzieć się więcej, to czytaj dalej. Do niedawna, do zabawy z kodem dla procesorów AVR używałem IDE AVR-Studio. Niestety, to środowisko w najnowszych wersjach jest dość opasłe. Ostatnio odkryłem jak przyjemnie korzysta się z Visual Studio Code - takiej lżejszej wersji Visual Studio od Microsoftu. Niestety trochę trzeba się nagimnastykować, aby zmusić je do działania jako środowisko dla AVRów. Borykając się z kolejną przeszkodą odczuwałem narastającą pokusę napisania prostego narzędzia w Pythonie, które zrobi za mnie całą brudną robotę. Dostęp do źródła sprawia, że mogę dodawać dowolne funkcjonalności na jakie przyjdzie mi ochota. I wiesz co? Opłaciło się. Gdy implementowałem bootloader, musiałem porównywać kody wynikowe kompilacji i w tym skrypcie zrobiłem to w parę linijek dokładając wywołanie dodatkowych aplikacji. Potem przyszła chęć dodania testów jednostkowych z pomocą GMock-a i GTesta. I to też zajęło tylko chwilę. Potem naturalnym okazało się dodanie automatycznego programowania procesora gdy kompilacja się powiedzie. Przełącznik do programowania bootloadera lub zwykłego kodu? Nic trudniejszego.
Kilka podróży pociągiem do i z pracy i oto jest. To dość żywy kod, ponieważ często modyfikuję go do aktualnych potrzeb.
Aby zacząć czerpać nieprzerwaną przyjemność z korzystania z tego skryptu, trzeba poświęcić chwilę i ustawić dane w jego wnętrzu. Na początek najważniejszą rzeczą jest typ procesora z którym będziemy współpracować:
mcu = "atmega32"
Kolejną rzeczą jest podanie, które pliki wchodzą w skład projektu i gdzie można znaleźć pliki nagłówkowe. W sekcji list flag przekazywanych do poszczególnych aplikacji można zdefiniować m.in stopień optymalizacji kodu, czy prędkość zegara z jakim współpracujemy.
Dostępne opcje:
Options: -h, --help show this help message and exit -u, --unittests runs unit tests -b, --bootloader compile code as for boot loader purposes -s CODE_PATH, --source=CODE_PATH top level code path -t TARGET, --target=TARGET Executable file name -c, --clear Removes all output files -r, --rebuild Rebuilds whole project -x, --run-tests Executes unit tests -d, --debug Shows executed commands -p, --program_dev Program device -a, --disassembly Generates assembler code from elf file --filter-tests=TEST_FILTER Regex to pick up only some tests
Typowe wywołanie:
python.exe build.py -s sciezkadoźródeł -t avr_program.elf
Zachęcam do pobrania i pozostawienia komantarza.
Uwaga!
Do poprawnej pracy wymagane jest podanie ścieżek do pakietu avr-gcc. Może pochodzić ono z WinAvr albo Arduino