Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

(Siehe auch)
(BCC beim Stuffen nicht berücksichtigt (pfui))
Zeile 28: Zeile 28:
 
void TxCloseFrame ( void )
 
void TxCloseFrame ( void )
 
{
 
{
   transmit ( bTxBcc )
+
   TxSendStuffByte ( bTxBcc ) // auch das BCC mit ev. prefixed werden
 
   transmit ( CTL_C_ETX )                         
 
   transmit ( CTL_C_ETX )                         
 
}
 
}
Zeile 35: Zeile 35:
 
{
 
{
 
     bTxBcc ^= bTxChar
 
     bTxBcc ^= bTxChar
 +
    TxSendStuffByte ( bTxChar )
 +
}
 +
// --------------------------------------------------------------
 +
void TxSendStuffByte ( unsigned char bTxChar)
 +
{
 
     if (bTxChar & CTL_M_MASK) == CTL_C_BASE)  
 
     if (bTxChar & CTL_M_MASK) == CTL_C_BASE)  
 
     {  
 
     {  

Version vom 1. März 2006, 15:15 Uhr

Network Controller/PC Spezifikationen

Für das Projekt "Network Controller/PC" werden hier die ganz konkreten Spezifikationen angelegt. Als "Sprache" wird Pseudo-Code, an C angelehnt, verwendet.

Spezifikationen Layer-0 UART

  • Maximale Frame-Size
#define FRAME_C_MAX   127     

Das ist die maximale Netto-Länge zwischen STX und ETX, exklusive. Auch das scheint für µC etwas groß, aber es wird davon ausgegangen, daß die real benötigten Messages weit kürzer sein werden, d.h. das regelt sich vermutlich von selbst durch die Vereinbarungen und Restriktionen in den oberen Layern

  • Kontrollzeichen
#define CTL_M_MASK   0xF8 
#define CTL_M_ADON   0x10 
#define CTL_C_BASE   0xA8 
#define CTL_C_STX   CTL_C_BASE + 1 
#define CTL_C_ETX   CTL_C_BASE + 2 
#define CTL_C_PFX   CTL_C_BASE + 3 
  • Code-Beispiel/Muster für Paket-senden

( transmit() stellt die Funktion für den tatsächlichen physischen Output dar).

static unsigned char bTxBcc;            // Checksum für BCC 
// --------------------------------------------------------------
void TxStartFrame ( void )
{
  bTxBcc = 0
  transmit ( CTL_C_STX )                         
}
// --------------------------------------------------------------
void TxCloseFrame ( void )
{
  TxSendStuffByte ( bTxBcc )  // auch das BCC mit ev. prefixed werden
  transmit ( CTL_C_ETX )                         
}
// --------------------------------------------------------------
void TxSendFrameByte ( unsigned char bTxChar)
{
     bTxBcc ^= bTxChar
     TxSendStuffByte ( bTxChar ) 
}
// --------------------------------------------------------------
void TxSendStuffByte ( unsigned char bTxChar)
{
     if (bTxChar & CTL_M_MASK) == CTL_C_BASE) 
     { 
       transmit ( CTL_C_PFX )
       transmit ( bTxChar | CTL_M_ADON )      
     } 
     else 
     { 
       transmit ( bTxChar )        
     } 
}
  • Die entsprechende Empfangsroutine ist etwas komplexer und wird wesentlich mehr vom Geschick und den Gewohnheiten des Programmieres bestimmt.

Autor

Siehe auch


LiFePO4 Speicher Test