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
|
$ cd dmm-demo
|
||||||
```
|
```
|
||||||
|
|
||||||
Es sind zwei PlatformIO-Environments definiert. `release` wird standardmäßig
|
Es sind dre PlatformIO-Environments definiert:
|
||||||
genutzt und ist auf die Programmierung per Bootloader ausgelegt. `debug` wird
|
* `release` wird standardmäßig
|
||||||
für das Aufspielen des Bootloaders oder Debugging mittels JTAGICE3 genutzt.
|
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`:
|
Bauen von `release`:
|
||||||
```
|
```
|
||||||
$ pio run
|
$ pio run -e release
|
||||||
```
|
```
|
||||||
|
|
||||||
Bauen von `debug`:
|
Bauen von `debug`:
|
||||||
@@ -55,39 +63,42 @@ Bauen von `debug`:
|
|||||||
$ pio run -e 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
|
Die für die DMM-Projekte vorgesehenen
|
||||||
[Bibliotheken](https://teach.emg.ing.tu-bs.de/git/dmm/dmm-libs) in den Ordner
|
[Bibliotheken](https://teach.emg.ing.tu-bs.de/git/dmm/dmm-libs) sowie die
|
||||||
`dmm-demo/depends` heruntergeladen.
|
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
|
### Programmierung & Nutzung
|
||||||
|
|
||||||
*GUI*: die aufgeführten Befehle können auch aus dem PlatformIO-Toolbar des
|
*GUI*: die hier aufgeführten Befehle können auch aus dem PlatformIO-Toolbar des
|
||||||
VSCode per Mausklick ausgeführt werden.
|
VSCode per Mausklick ausgeführt werden.
|
||||||
|
|
||||||
#### Aufspielen des Bootloaders
|
#### Aufspielen des Bootloaders
|
||||||
|
|
||||||
Auf einem neuen Board muss zunächst mittels JTAGICE3 ein Bootloader aufgespielt
|
Auf einem neuen Board muss zunächst mittels JTAGICE3 ein Bootloader aufgespielt
|
||||||
werden. Dazu wird es mit dem JTAG-Header verbunden (Polung beachten!).
|
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
|
> Sollte es beim Aufruf zum Fehler `TypeError: expected str, bytes or
|
||||||
> os.PathLike object, not NoneType ...
|
> os.PathLike object, not NoneType ...
|
||||||
> join(platform.get_package_dir("tool-avrdude"), "avrdude.conf")`
|
> join(platform.get_package_dir("tool-avrdude"), "avrdude.conf")`
|
||||||
> kommen, kann dieser durch einmaliges Aufrufen von
|
> kommen, kann dieser durch einmaliges Aufrufen von
|
||||||
>`$ pio run -t program -e debug`
|
> `$ pio run -t program -e debug`
|
||||||
>vor der Installation des Bootloaders behoben werden.
|
> vor der Installation des Bootloaders behoben werden.
|
||||||
|
|
||||||
#### Aufspielen des Programms
|
#### Aufspielen des Programms
|
||||||
|
|
||||||
Das Board muss per USB verbunden und Bootloader gestarted werden.
|
Das Board muss per USB verbunden und Bootloader gestarted werden.
|
||||||
*Zum Start des Bootloaders den Joystick in Richtung unten halten, Reset-Taste
|
*Zum Start des Bootloaders den Joystick in Richtung unten halten, Reset-Taste
|
||||||
drücken und den Joystick loslassen. Die Aktivierung des Bootloaders erkennt man
|
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.
|
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
|
Beim Drücken des Joystick im entsprechenden Teil des Demos wird nun eine Meldung
|
||||||
angezeigt.
|
angezeigt.
|
||||||
|
|
||||||
### Unit-Test
|
#### Unit-Test
|
||||||
|
|
||||||
Die Demo enthält im Ordner `tests` einen Beispiel zur Ausführung von Unit-Tests
|
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
|
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
|
Ausführung per UART (wie auch bei `pio device monitor`) die Ergebnisse der
|
||||||
Tests im Terminal ausgibt.
|
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
|
"require_upload_port": true
|
||||||
},
|
},
|
||||||
"bootloader": {
|
"bootloader": {
|
||||||
"file": "boards/optiboot_atmega1284p.hex",
|
"file": "boards/optiboot_atmega1284p_dmm.hex",
|
||||||
"lfuse": "0xFF",
|
"lfuse": "0xFF",
|
||||||
"hfuse": "0x9C",
|
"hfuse": "0x9C",
|
||||||
"efuse": "0xFC",
|
"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