Ben aan het pielen met FreeRTOS op een ESP32 ucontroller. Ben aardig thuis in diverse programmeertalen maar nog een n00b in C... Ik wik een enkele message queue gebruiken om verschillende soorten berichten tussen de taken te versturen. Ik heb daarvoor een struct gedefineerd als basistype en andere structs voor de specifieke berichten:
Het versturen van de berichten geeft geen probleem. In de code voor het afhandelen gaat het wel mis. Ik probeer dit:
Ik heb me al suf gegoogeld. Gok dat dit zo triviaal is dat ik meer niet relevante resultaten krijg dan iets waar ik mee geholpen ben of verder mee kom
code:
1
2
3
4
5
6
7
8
9
10
| typedef struct { enum MessageType messageType; char buffer[64]; // maximum message payload size } QueueMessage; typedef struct { enum MessageType messageType; uint16_t x; uint16_t y; } JoystickMessage; |
Het versturen van de berichten geeft geen probleem. In de code voor het afhandelen gaat het wel mis. Ik probeer dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void queueReader(void *pvParameters) { QueueMessage msg; // de generieke struct voor berichten setupMessageQueue(); while(1) { // wait, and block forever, for a message xQueueReceive(queue, &msg, portMAX_DELAY); switch (msg.messageType) { case Joystick: uint16_t x = (JoystickMessage) msg.x; // <-- hier gaat het mis, deze cast pikt de compiler niet, ik krijg een melding dat struct QueueMessage geen member x heeft. uint16_t y = (JoystickMessage) msg.y; break; } } vTaskDelete( NULL ); } |
Ik heb me al suf gegoogeld. Gok dat dit zo triviaal is dat ik meer niet relevante resultaten krijg dan iets waar ik mee geholpen ben of verder mee kom
Veni, vidi, vici - ik kwam, zag en overwon de drempels van het leven - denk ik dan maar, en vond vriendschap