Ich habe einen Ringbuffer mit Größe 20 und empfange 13 Bytes. Wenn ich den Code laufen lasse kommt aber nur jede 20. Nachricht ordentlich an. Wenn ich mir das mal in einer Tabelle darstelle dann sehe ich das Muster wiederholt sich nach 20 Zeilen.
Im Debugger habe ich das Gefühl dass DMA1_Channel5->CNDTR mir nicht immer die richtige Antwort gibt. Wie finde ich raus ob es überhaupt das richtige Register ist? Es ist ein STM32F103C8T6.
gerechnet habe ich es genauso wie in der Excel Tabelle
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
Unter der Bedingung das CNDTR auf die Position des 13. empfangenen Bytes zeigt klappt es, aber sonst nicht.
Das zweite Problem ist dass es auch mal mehr oder weniger als 13 Bytes sein können, daher war der ursprüngliche Code anders. Hier habe ich aber das gleiche Problem, nur jede 20. Nachricht passt.
https://github.com/aIecxs/EBiCS_Firmware/blob/3d38ccf/Src/display_kingmeter.c#L319
(es funktioniert wenn ich den ganzen Branch kompiliere, aber nicht wenn ich nur das memcpy() in einen anderen Branch übernehme)
https://github.com/EBiCS/EBiCS_Firmware/blob/90f6ad2/Src/display_kingmeter.c#L373