Meshnetics Zigbee ZDM-A1281 zwei UARTs gleichzeitig öffnen mit eZeeNet Stack?

OP #793500
Lesenswert?

Hallo,

vielleicht kann mir jemand helfen.

Ich nutze ein ZDM-A1281 Zigbee Modul von Meshnetics zusammen mit dem 
eZeeNet-Stack [1]. Der darauf verbaute Controller (ATMega1281) besitzt 
zwei UART, welche vom Stack auch unterstützt werden.

Wenn ich nur UART_0 mittels uart_open öffne funktioniert alles, ebenso 
wenn ich nur UART_1 öffne.
Ist jedoch bereits ein UART offen, bekomme ich beim Öffnen des anderen 
UART von uart_open den Rückgabewert -1. Dieser Rückgabewert bedeutet 
laut Datenblatt

1. incorrect UART channel oder
2. unsupported flags oder
3. insufficient resources.

Die ersten beiden Fehler können es nicht sein, da die UARTS einzeln mit 
den selben Parametern funktionieren. Bleibt also nur noch "insufficient 
resources" als Grund.

Hier mal der Code zum öffnen der UARTs.
1
int uart0;
2
int uart1;
3

4
UARTMode_t param;
5
param.baudrate = UART_BAUDRATE_9600;
6
param.data = UART_DATA8;
7
param.parity = UART_PARITY_NONE;
8
param.stopbits = UART_STOPBIT_1;
9

10
uart0=uart_open(UART_CHANNEL_0, &param, UART_FLOW_CONTROL_NONE,UART0RXByte,tx0Done);
11
uart1=uart_open(UART_CHANNEL_1, &param, UART_FLOW_CONTROL_NONE,UART1RXByte,tx1Done);

Meine Frage ist jetzt, was muss ich tun damit ich genügend Resourcen 
habe um zwei UARTs gleichzeitig zu öffnen. Mein Programm enthält bisher 
eigentlich sonst keinen weiteren Code. Es kann also nicht daran liegen, 
dass ich selbst zuviel Resourcen brauche. Gibt es eine Möglichkeit in 
Stack mehr Resourcen für den UART zu reservieren, oder geht das öffnen 
von zwei UARTS gleichzeitig generell nicht (und warum steht es dann 
nicht gleich im Datenblatt)?

Gruß Holger

[1] Datenblatt zum Stack: http://www.meshnetics.com/dl.php?id=17
OP #794172
Lesenswert?

Hallo

erstmal Danke für eure bisherigen Vorschläge.

>was ist denn UART0RXByte, tx0Done, UART1RXByte, tx1Done?
>Läufts denn wenn du an den Stellen jeweils NULL einträgst?

Nein, hatte ich inzwischen auch schon versucht. Daran liegt es aber 
nicht.

Inzwischen habe ich wohl gefunden, was ich suche. Es gibt im HAL 
(Hardware Aabstraction Layer) der zum Stack gehört in der Source 
(uart.h) ein
1
#ifndef NUM_USART_CHANNELS
2
#define NUM_USART_CHANNELS 1 // Number USART channels
3
#endif

Man muss wohl vorher einfach nur definieren, wieviele Kanäle man 
gleichzeitig öffen will. Dann wird vom HAL entsprechend Speicher 
reserviert. Dazu hatte ich leider keine Doku.

Denke das sollte die Lösung sein. Evt. muss man noch den HAL neu 
übersetzen. Ich werde es gleich mal ausprobieren und Wenn es klappt hier 
berichten. Vielleicht hilft es dann ja noch jemandem.

Gruß Holger

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren