Zitat von
pongi
Ist das so richtig? Also wird hiermit zuerst das Low-Byte, dann das High-Byte versendet, oder ist das schwachsinn? Wie würdet ihr das lösen?
Prinzipiell ist es richtig.
Es kommt aber immer drauf an, wie ein INT dargestellt ist. Es gibt Maschinen, da stehen die low-Bits im unteren Teil (little Endian) und es gibt solche, da stehen die low-Bits im oberen Teil (big Endian).
Man muss also sicherstellen, daß auf Sende- und Empfangsseite die gleiche Darstellung verwendet wird.
Zum Versenden kann man allgemeiner sowas machen:
Code:
void uart_send_buf (void*, uint8_t);
// n Bytes (max 255) ab Adresse vbuf verschicken
void uart_send_buf (void * vbuf, uint8_t nBytes)
{
uint8_t i;
uint8_t * buf = (uint8_t*) vbuf;
for (i=0; i < nBytes; i++)
{
uart_putc (*buf++);
}
}
...
{
// result als static weil es aufwändig ist,
// die Adresse einer auto-Variablen zu nehmen
static uint16_t result;
result = ReadChannel (3);
uart_putc (& result, sizeof (result));
}
Lesezeichen