MSP430 UART interface array verarbeitung

Gast #987158
Lesenswert?
• ▲
▼
Hallo.

ich bin neu in der µC programmierung und habe Verständisprobleme mit dem 
UART INTERFACE.

Ich hab mir ein testboard gebaut das über ein USB->FTDI232->MSP430 
interface eine datenstrecke realisiert. Die ist mit einem 
beisielprogramm, bereits getestet, die funktioniert.

Jetzt folgende Situation:

Es soll per UART ein auf dem PC vorhandenes Array mit daten sätzen 
übermittelt werden an den MSP

Die anzahl der Datensätze variiert, ich kann im mikrokontroller also 
keine feste array größe angeben, weil ich sie ned weiß.

Ein Datzen Satz besteht immer aus 2 Integerzahlen

1 34455
5 33325
2 234


so zum beispiel. (1 gibt einen last wert an. die große zahl ist ein wert 
in sekunden)

Wie bekomme ich diese im uC gespeichert, bzw wie verarbeitet der die 
Daten die über die schnittstelle kommen?

Prinzipiell hätte ich mir gewünscht, das wenn ich meine Sequenz auf dem 
PC starte, der PC per virtuellem Com port (die treiber dafür von ftdi 
sind installiert und funzen) das komplette array übermittelt, dass ich 
die daten dafür im µC zur verfügung habe.

Der UART ist soweit initialisiert
1
void main( void )
2
{  
3
    WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
4

5
  InitializeHardware();
6
  BIS_SR(LPM0_bits + GIE);         // Enter LPM0 w/ interrupt
7
  _EINT();                          // Enable interrupts
8

9
    while(1)
10
    {     
11
    }
12
}
13

14
void InitializeHardware( void )
15
{
16

17
//Setup UART1
18
  // Enable module pin functions
19
  P3SEL |= (BIT6);
20
  P3DIR |= (BIT6);
21

22
  // Enable module
23
  ME2 |= (UTXE1);
24
  
25
  // Reset UART
26
  U1CTL = (CHAR      );
27
  U1TCTL = (TXEPT+UTCTL_ACLK);
28

29
  // Setup 2400 baud with ACLK
30
  U1BR0 = 0x0D;
31
  U1BR1 = 0x00;
32
  U1MCTL = 0x6B;
33

34
  // Set Tx Flag
35
  IFG2 |= (UTXIFG1); 
36
    
37
  // Enable module pin functions
38
  P3SEL |= (BIT7);
39

40
  // Enable module
41
  ME2 |= (URXE1);
42
  
43
  // Reset UART
44
  U1RCTL = (URXEIE);
45

46
  IE2 |= (URXIE1);
47
  
48
}

DAs hab ich aus dem testprogramm übernommen. Soweit ich das verstehe ist 
nun dieser #pragma teil dafür zuständig, was passiert, wenn daten kommen

1
// UART1 RX interrupt service routine
2
#pragma vector=UART1RX_VECTOR
3
__interrupt void UART1RX (void)
4
{
5
  
6
}


Meine erste idee wäre es gewesen, als erste zahl, die array größe zu 
übermitteln und mit dieser dann das Arrray zu erzeugen, IAR workbench 
nörgelt allerdings, das array nicht mit variablen erzeugt werden dürfen, 
sondern feste werte haben müssen.

Wie wird das normalerweise gehandhabt, mehrere Datensätze gleichen typs 
zu übermitteln abzuspeichern, wenn man die anzahl der datensätze nicht 
vorher kennt?
Persönliche Seite #987218
Lesenswert?
• ▲
▼
Um ein Array einer erst zur Laufzeit bekannten Größe anzulegen, 
verwendet man üblicherweise dynamische Speicherverwaltung mit 
Funktionen wie malloc etc.

Allerdings ist das auf einem µC mit doch sehr beschränktem RAM nicht 
sinnvoll - hier steht ja die maximale Arraygröße fest (mehr RAM hat er 
halt nicht, Dein MSP430).

Also kannst Du auch mit einem Array fester Größe arbeiten - die Größe 
ist halt das sinnvolle Maximum, das sich aus dem restlichen 
Speicherbedarf Deines Programmes und dem verfügbaren RAM des Controllers 
ergibt. Mehr als 10 kByte sind sowieso nicht drin.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.