AVR crosscompile Cobra mk3
1 Crosscompile chain pro AVR na Cobru mk3
Jak jsem rozcházel crosscompile na svém novém počítači podle http://micro-corner.gilhad.cz/blog/AVR/2019-02-01-AVR-crosscompile.html - aneb příprava na další práci.
Aby šlo AVR programovat, musí se připojit, takže kernel musí mít nastavené příslušné ovladače:
1.1 Kernel:
su - cd /usr/src/linux make menuconfig Device Drivers ---> [*] USB support ---> <*> USB Modem (CDC ACM) support <*> USB Serial Converter support ---> <*> USB FTDI Single Port Serial Driver <*> USB Winchiphead CH341 Single Port Serial Driver make -j25 # -j25 se dá vynechat, řiká kolik vláken se má použít, u počítače s 24 core mi přijde škoda je nevytížit všechna a jedno navíc pro režii make modules_install
Já používám UEFI, takže kernel nainstaluju příslušným způsobem:
cp /usr/src/linux/arch/x86/boot/bzImage /boot/bzImage.efi efibootmgr # BootCurrent: 0008 # Timeout: 1 seconds # BootOrder: 0008,0007,0003,0000,0001,0002,0006 # Boot0000* NVM-Gentoo-NVM-SYSTEM # Boot0001* NVM-Gentoo-SDA2 # Boot0002* NVM-Gentoo-NVM-SYSBCK # Boot0003* SDA-Gentoo-NVM-SYSTEM # Boot0004* SDA-Gentoo-SDA2 # Boot0005* SDA-Gentoo-NVM-SYSBCK # Boot0006 Windows Boot Manager # Boot0007* SDA-Gentoo-NVM-TeachMePCB # Boot0008* NVM-Gentoo-NVM-TeachMePCB efibootmgr -b 7 -B efibootmgr -b 8 -B mount /dev/sda1 /boot mkdir -p /boot/EFI/'Gentoo-NVM-TeachMePCB' # or any other name under /boot/EFI cp /usr/src/linux/arch/x86/boot/bzImage /boot/EFI/'Gentoo-NVM-TeachMePCB'/bzImage.efi efibootmgr -c -L "SDA-Gentoo-NVM-TeachMePCB" -l '\EFI\Gentoo-NVM-TeachMePCB\bzImage.efi' -d /dev/sda1 umount /boot mount /dev/nvme0n1p1 /boot mkdir -p /boot/EFI/'Gentoo-NVM-TeachMePCB' # or any other name under /boot/EFI cp /usr/src/linux/arch/x86/boot/bzImage /boot/EFI/'Gentoo-NVM-TeachMePCB'/bzImage.efi efibootmgr -c -L "NVM-Gentoo-NVM-TeachMePCB" -l '\EFI\Gentoo-NVM-TeachMePCB\bzImage.efi' -d /dev/nvme0n1p1 umount /boot efibootmgr # Check BootCurrent: 0008; BootOrder: 0008,..; Boot0008* NVM-Gentoo-NVM-TeachMePCB
1.2 Repository:
cd ~/GIT-arduino portage-tools-new-repository.sh -u arduino BareAVR "Arduino as AVR only\n see http://micro-corner.gilhad.cz/blog/AVR/2019-02-01-AVR-crosscompile.html" cd BareAVR mkdir simple_self_test cd simple_self_test wget http://micro-corner.gilhad.cz/blog/AVR/listings/simple_self_test2.sh -O simple_self_test2.sh ./simple_self_test2.sh # fail, no compiler
Simple self test na ověření, že to aspoň nějak funguje: simple_self_test2.sh a jeho zdroj samozřejmě selhal, protože mu chybí kompilátor a utility, takže to hned napravím
1.3 Intel Hex konverze
1.4 Crosschain:
# * error: please convert //etc/portage/package.mask to a directory emerge -avq sys-devel/crossdev mkdir -p /var/db/repos/portage-crossdev/{profiles,metadata} echo 'crossdev' > /var/db/repos/portage-crossdev/profiles/repo_name echo 'masters = gentoo' > /var/db/repos/portage-crossdev/metadata/layout.conf chown -R portage:portage /var/db/repos/portage-crossdev ############################################### # /etc/portage/repos.conf/crossdev.conf ############################################## # [crossdev] # location = /var/db/repos/portage-crossdev # priority = 10 # masters = gentoo # auto-sync = no # AVR (Arduino/Genuino/ATmicro/ATmega/etc.) crossdev -s4 --stable --portage --verbose --target avr # ARM (STM32/GD32/etc.) crossdev -s4 --stable --portage --verbose --target arm Troubleshooting # If issues are encountered when crossdev is compiling the gcc stages, try: # USE="-openmp -hardened -sanitize -vtv" crossdev -s4 --stable --portage --verbose --target avr
Tentokrát by simple_self_test2.sh měl projít bez problémů a přeložit dva jednoduché prográmky, plus k nim přidat výpisy (a vidím, že dostávám něco dost rozdílného, podle toho co po překladači chci, jednou tam jsou i vektory přerušní, podruhé nikoli)
1.5 Potlačení akcelerace Arduino myši
Zatímco u normální myši je akcelerace přijemná, protože dosáhneme na celou obrazovku a přitom se dá kurzor umístit celkem přesně, tak u robotické myši je dost nevýhodná, protože chybí zpětná vazba a velice záleží na délce pohybů, pauzách mezi nimi a i jejich řazení.
Myš umožňuje pohyb jen o +/- 127 v každém směru v jedné akci, přitom přez celou obrazovku to může být i několik tisíc - jednoduché řešní je si napsat funkci, která delší požadovaný pohyb rozloží na několik menších, které SW zvládne.
Nejjednodušší funkce vezme cíl, ořízne nějakou hodnotou (127, 100, ...), udělá tento pohyb a odečte od cíle, takto pokračuje, dokud nezbude 0,0 a má hotovo.
Problém je, že s výjimkou pohybu po osách a úhlopříčkách se cesta tam a zpátky liší a kvůli urychlení se nevrátíte do počátečního bodu. Nemluvě o tom, že skládání pohybů obecně vede k dost nepředvidatelným výsledkům - nejde například jednoduše proskákat a proklikat pravoúhlou síť tlačítek. Myš totiž neumožňuje zjištění aktuální polohy, ani pohyb na absolutní souřadnice.
Řešením je akceleraci vypnout, ale jen pro robotickou myš (ta si bude muset jet lineární rychlostí, tedy víc úseků, ale zato budou přesně dlouhé), normální nechat pohodlnou, akcelerovanou.
Nejdřív je potřeba zjistit, jak se nám robomyš hlásí v systému:
xinput --list - Virtual core pointer id=2 [master pointer (3)] - - Virtual core XTEST pointer id=4 [slave pointer (2)] - - SONiX USB DEVICE Consumer Control id=11 [slave pointer (2)] - - SONiX USB DEVICE Mouse id=12 [slave pointer (2)] - - BY Tech Usb Gaming Keyboard Consumer Control id=15 [slave pointer (2)] - - BY Tech Usb Gaming Keyboard Mouse id=17 [slave pointer (2)] - - USB Optical Mouse id=20 [slave pointer (2)] - - Arduino LLC Arduino Micro Mouse id=19 [slave pointer (2)] - Virtual core keyboard id=3 [master keyboard (2)] - Virtual core XTEST keyboard id=5 [slave keyboard (3)] - Power Button id=6 [slave keyboard (3)] - Power Button id=7 [slave keyboard (3)] - SONiX USB DEVICE id=8 [slave keyboard (3)] - SONiX USB DEVICE Keyboard id=9 [slave keyboard (3)] - SONiX USB DEVICE System Control id=10 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard id=13 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard System Control id=14 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard id=16 [slave keyboard (3)] - SONiX USB DEVICE Consumer Control id=21 [slave keyboard (3)] - BY Tech Usb Gaming Keyboard Consumer Control id=22 [slave keyboard (3)] - Arduino LLC Arduino Micro Keyboard id=18 [slave keyboard (3)]
Myš je zjevně Arduino LLC Arduino Micro Mouse a má id=19. Znázvu je první slovo do mezery Vendor, zbytek Produkt, takže vytvoříme soubor /etc/X11/xorg.conf.d/mouse-acceleration.conf, který ji akceleraci zakáže a restartujeme Xka