Bootloader actually checking for joystick, docs on debugging

master
Ilya Elenskiy 5 years ago
parent ce7f506b4f
commit 68da5e7e84

@ -41,13 +41,21 @@ $ git clone git@teach.emg.ing.tu-bs.de:dmm/dmm-demo.git
$ cd dmm-demo
```
Es sind zwei PlatformIO-Environments definiert. `release` wird standardmäßig
genutzt und ist auf die Programmierung per Bootloader ausgelegt. `debug` wird
für das Aufspielen des Bootloaders oder Debugging mittels JTAGICE3 genutzt.
Es sind dre PlatformIO-Environments definiert:
* `release` wird standardmäßig
genutzt und ist auf die Programmierung per Bootloader ausgelegt.
* `debug` wird
für das Debugging mittels avr-stub genutzt.
* `jtag` wird zum Aufspielen des Bootloaders mittels externem
JTAGICE3 Programmer genutzt.
> **In `debug` darf daher kein UART genutzt werden, da es zur Kommunikation mit
> GDB dient**. Entsprechende Programmteile müssen gegebenenfalls mit
>`#ifndef GDBSTUB` deaktiviert werden!
Bauen von `release`:
```
$ pio run
$ pio run -e release
```
Bauen von `debug`:
@ -55,39 +63,42 @@ Bauen von `debug`:
$ pio run -e debug
```
Wenn man `-e <environment>` weglässt, wird immer `debug` gebaut, da dies die
Standartkonfiguration ist, die von dem Debugger von VSCode genutzt werden soll.
Dabei werden neben der Toolchain automatisch die für DMM-Projekte vorgesehenen
[Bibliotheken](https://teach.emg.ing.tu-bs.de/git/dmm/dmm-libs) in den Ordner
`dmm-demo/depends` heruntergeladen.
Die für die DMM-Projekte vorgesehenen
[Bibliotheken](https://teach.emg.ing.tu-bs.de/git/dmm/dmm-libs) sowie die
Toolchain werden durch `pio run` automatisch heruntergeladen und müssen nicht
extra installiert werden. Die Bibliotheken werden dabei im Ordner
`dmm-demo/depends` hinterlegt.
### Programmierung & Nutzung
*GUI*: die aufgeführten Befehle können auch aus dem PlatformIO-Toolbar des
VSCode per Mausklick ausgeführt werden.
*GUI*: die hier aufgeführten Befehle können auch aus dem PlatformIO-Toolbar des
VSCode per Mausklick ausgeführt werden.
#### Aufspielen des Bootloaders
Auf einem neuen Board muss zunächst mittels JTAGICE3 ein Bootloader aufgespielt
werden. Dazu wird es mit dem JTAG-Header verbunden (Polung beachten!).
```
$ pio run -t bootloader -e debug
$ pio run -t bootloader -e jtag
```
> Sollte es beim Aufruf zum Fehler `TypeError: expected str, bytes or
> os.PathLike object, not NoneType ...
> join(platform.get_package_dir("tool-avrdude"), "avrdude.conf")`
> kommen, kann dieser durch einmaliges Aufrufen von
>`$ pio run -t program -e debug`
>vor der Installation des Bootloaders behoben werden.
> `$ pio run -t program -e debug`
> vor der Installation des Bootloaders behoben werden.
#### Aufspielen des Programms
Das Board muss per USB verbunden und Bootloader gestarted werden.
*Zum Start des Bootloaders den Joystick in Richtung unten halten, Reset-Taste
drücken und den Joystick loslassen. Die Aktivierung des Bootloaders erkennt man
an zwei leuchtenden roten LEDs auf dem Board*
an dreimaligem Blinken und anschließendem Dauerleuchten der LED4 auf dem Board*.
```
$ pio run -t upload
$ pio run -e release -t upload
```
Anschließend Reset-Taste drücken um das Programm zu starten.
@ -105,7 +116,7 @@ $ pio device monitor
Beim Drücken des Joystick im entsprechenden Teil des Demos wird nun eine Meldung
angezeigt.
### Unit-Test
#### Unit-Test
Die Demo enthält im Ordner `tests` einen Beispiel zur Ausführung von Unit-Tests
auf dem Mikrocontroller. Dazu muss wie oben beschrieben der Bootloader aktiviert
@ -117,3 +128,34 @@ Nach dem Befehl wird eine Firmware auf das Board heruntergeladen, die bei der
Ausführung per UART (wie auch bei `pio device monitor`) die Ergebnisse der
Tests im Terminal ausgibt.
#### Debugging mit avr-stub
Normallerweise ist zum Debuggen (also Setzen von Breakpoints und Auslesen der
Register) ein JTAG-Adapter notwendig. PlattformIO kann
mittels einer [Bibliothek](https://github.com/jdolinay/avr_debug) die Funktion
der Hardware-Debugger unter Inkaufnahme einiger Nachteile teilweise ersetzen.
Die Kommunikation erfolgt dabei per UART, der nicht mehr im eigenen Programm
genutzt werden kann.
Die Konfiguration `debug` bindet die nötige Bibliothek ein, und schaltet
Optimierung über das Setzen von `build_type` aus und definiert `GDBSTUB`. Am
Anfang des programms muss `debug_init()` aus `avr8-stub.h` aufgerufen werden.
Debugging wird in VScode mittels "Run & Debug" Tab gestartet. Vorher muss
der Bootloader aktiv sein.
Zu beachten ist:
* Beakpoints funktionieren nur in Programmteilen, wo Interrupts aktiviert
sind. **Das setzen eines Breakpoints innerhalb einer Interruptroutine führt
immer zum Aufhängen des Programms**.
* Breakpoints werden über das Neuschreiben von Flash gesetzt. Dies hat einen
Verschleiß zufolge, da der Flash nur für 10000 Schreibzyklen ausgelegt ist.
Das "Steppen" einzelner Befehle ist daher sparsam zu verwenden.
* Debugger nutzt das Watchdog-Interrupt, daher darf WDT nicht vom Programm
genutzt werden. Außerdem können die gelegentlichen Interrupts die Timings
beeinflussen.
> **TODO:** aktuell muss der Port des Debuggers manuell in `platformio.ini`
> unter `debug_port` gesetzt werden!
> (z.B. `/dev/ttyUSBx` unter Linux oder `COMx` unter Windows).
> Für automatisches Auflösen des Ports siehe
> [Issue 253](https://github.com/platformio/platform-atmelavr/issues/253).

@ -20,7 +20,7 @@
"require_upload_port": true
},
"bootloader": {
"file": "boards/optiboot_atmega1284p.hex",
"file": "boards/optiboot_atmega1284p_dmm.hex",
"lfuse": "0xFF",
"hfuse": "0x9C",
"efuse": "0xFC",

@ -1,55 +0,0 @@
:020000021000EC
:10FC000001C01BC1112484B7882369F0982F9A7012
:10FC1000923049F081FF02C097EF94BF282E80E018
:10FC2000F7D00C94000085E08093810082E08093FF
:10FC3000C00088E18093C10086E08093C20080E12B
:10FC40008093C4008EE0E4D0239A86E020E33CEF6A
:10FC500091E0309385002093840096BBB09BFECF4B
:10FC60001B9AA8954091C00047FD02C0815089F7BA
:10FC700043E0B42EAA24A39451E1752EBDD0813463
:10FC800071F4BAD0C82FCAD081E0C23821F088E020
:10FC9000C13809F083E0A9D080E1A7D0EFCF82344A
:10FCA00019F484E1C3D0F8CF853411F485E0FACF9C
:10FCB000853581F4A1D0082F9FD0182F87FF07C06A
:10FCC0008BB781608BBF000F111FA8D0E5CF8BB71A
:10FCD0008E7FF8CF863581F48FD08D3459F48CD057
:10FCE000CBB78AD0C170880F8C2B8BBF81E09ED0A0
:10FCF00080E0D1CF83E0FBCF843609F046C07CD0D2
:10FD0000E82EF12CFE2CEE2477D0E82A75D0682E50
:10FD1000E701C12CDD24D39446018FEFC81AD80A1D
:10FD20006BD0F40180832197B9F778D0F5E46F1296
:10FD30000DC0FE01F395EC16FD0609F4ADCF608110
:10FD4000CE01800F911F91D02196F3CFF801B7BE5D
:10FD5000E89507B600FCFDCFFE01E00FF11FDE01C4
:10FD6000B3958D919C910C01A7BEE8951124229624
:10FD7000EC16FD0689F785E0F80187BFE89507B620
:10FD800000FCFDCF77BEE89587CF8437F9F434D0F7
:10FD9000C82FD0E0DC2FCC272FD0C82B2DD0D82EC9
:10FDA0003DD07801F5E4DF120AC0C70156D01DD05E
:10FDB00021978FEFE81AF80A2097B9F76DCFF7016E
:10FDC00087917F0112D02197D1F766CF853739F41B
:10FDD00025D08EE10AD087E908D085E05CCF813557
:10FDE00009F073CF88E014D070CF9091C00095FFD8
:10FDF000FCCF8093C60008958091C00087FFFCCFA0
:10FE00008091C00084FD01C0A8958091C60008952E
:10FE1000E0E6F0E098E1908380830895EDDF8032A2
:10FE200019F088E0F5DFFFCF84E1DFCFCF93C82F53
:10FE3000E3DFC150E9F7CF91F1CFFC010A0167BFC1
:10FE4000E895112407B600FCFDCF667029F0452B1C
:10FE500019F481E187BFE8950895F999FECF92BD25
:10FE600081BDF89A992780B50895262FF999FECF7C
:10FE70001FBA92BD81BD20BD0FB6F894FA9AF99AC7
:10FE80000FBE0196089556657273696F6E3D382EE8
:10FE900031004F505449424F4F545F435553544FD4
:10FEA0004D5645523D30004465766963653D617449
:10FEB0006D656761313238347000465F4350553D9F
:10FEC00031363030303030304C00424947424F4FAD
:10FED000543D31004275696C743A4170722031387A
:10FEE00020323032313A31343A32343A35330055F7
:10FEF0004152543D3000424155445F524154453DCA
:10FF0000313135323030004C45443D4233004C45B0
:10FF1000445F53544152545F464C41534845533D0E
:02FF20003300AC
:02FFFE000108F8
:040000031000FC00ED
:00000001FF

@ -0,0 +1,55 @@
:020000021000EC
:10FC000001C020C1112484B7882391F00E98169A60
:10FC100090B1282F2A70223011F496FF09C081FF7D
:10FC200002C097EF94BF282E80E0F7D00C9400001C
:10FC300085E08093810082E08093C00088E180931A
:10FC4000C10086E08093C20080E18093C40080E020
:10FC5000E4D0239A86E020E33CEF91E030938500E6
:10FC60002093840096BBB09BFECF1B9AA895409131
:10FC7000C00047FD02C0815089F743E0B42EAA249A
:10FC8000A39451E1752EBDD0813471F4BAD0C82F40
:10FC9000CAD081E0C23821F088E0C13809F083E0A1
:10FCA000A9D080E1A7D0EFCF823419F484E1C3D08A
:10FCB000F8CF853411F485E0FACF853581F4A1D0F1
:10FCC000082F9FD0182F87FF07C08BB781608BBF8D
:10FCD000000F111FA8D0E5CF8BB78E7FF8CF8635E8
:10FCE00081F48FD08D3459F48CD0CBB78AD0C170C9
:10FCF000880F8C2B8BBF81E09ED080E0D1CF83E03A
:10FD0000FBCF843609F046C07CD0E82EF12CFE2CC7
:10FD1000EE2477D0E82A75D0682EE701C12CDD24C7
:10FD2000D39446018FEFC81AD80A6BD0F4018083B0
:10FD30002197B9F778D0F5E46F120DC0FE01F39565
:10FD4000EC16FD0609F4ADCF6081CE01800F911F46
:10FD500091D02196F3CFF801B7BEE89507B600FC25
:10FD6000FDCFFE01E00FF11FDE01B3958D919C9157
:10FD70000C01A7BEE89511242296EC16FD0689F722
:10FD800085E0F80187BFE89507B600FCFDCF77BE98
:10FD9000E89587CF8437F9F434D0C82FD0E0DC2F32
:10FDA000CC272FD0C82B2DD0D82E3DD07801F5E40C
:10FDB000DF120AC0C70156D01DD021978FEFE81A75
:10FDC000F80A2097B9F76DCFF70187917F0112D01C
:10FDD0002197D1F766CF853739F425D08EE10AD047
:10FDE00087E908D085E05CCF813509F073CF88E0E2
:10FDF00014D070CF9091C00095FFFCCF8093C600C7
:10FE000008958091C00087FFFCCF8091C00084FDE1
:10FE100001C0A8958091C6000895E0E6F0E098E161
:10FE2000908380830895EDDF803219F088E0F5DF5C
:10FE3000FFCF84E1DFCFCF93C82FE3DFC150E9F7D5
:10FE4000CF91F1CFFC010A0167BFE895112407B6F5
:10FE500000FCFDCF667029F0452B19F481E187BFC6
:10FE6000E8950895F999FECF92BD81BDF89A99273A
:10FE700080B50895262FF999FECF1FBA92BD81BD96
:10FE800020BD0FB6F894FA9AF99A0FBE019608951C
:10FE900056657273696F6E3D382E31004F5054496C
:10FEA000424F4F545F435553544F4D5645523D308A
:10FEB000004465766963653D61746D6567613132E3
:10FEC00038347000465F4350553D31363030303065
:10FED00030304C00424947424F4F543D310042754B
:10FEE000696C743A41707220313820323032313AC4
:10FEF00032323A30333A303000554152543D3000BE
:10FF0000424155445F524154453D313135323030E4
:10FF1000004C45443D4233004C45445F53544152EC
:0CFF2000545F464C41534845533D3300AC
:02FFFE000108F8
:040000031000FC00ED
:00000001FF
Loading…
Cancel
Save