Bootloader actually checking for joystick, docs on debugging
This commit is contained in:
@@ -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
|
||||
55
Firmware/boards/optiboot_atmega1284p_dmm.hex
Normal file
55
Firmware/boards/optiboot_atmega1284p_dmm.hex
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user