Fehler in ccTX

Begonnen von Michael N., 12 Januar 2013, 18:00:21

Vorheriges Thema - Nächstes Thema

Michael N.

Ich grüble jetzt schon zum wiederholten Male über ccTX (ist ja wohl so schon länger im Code)


void
ccTX(void)
{
  uint8_t cnt = 0xff;
  EIMSK  &= ~_BV(CC1100_INT);

  // Going from RX to TX does not work if there was a reception less than 0.5
  // sec ago. Due to CCA? Using IDLE helps to shorten this period(?)
  ccStrobe(CC1100_SIDLE);
  while(cnt-- && (ccStrobe( CC1100_STX ) & 0x70) != 2)
    my_delay_us(10);
}


(1) Wenn ich nicht total falsch liege, ist der Ausdruck "ccStrobe( CC1100_STX ) & 0x70) != 2" immer wahr. Denn wenn ich etwas mit 0x70 bit-weise Und-verknüpfe kann niemals "2" herauskommen. Denn ein im Ergebnis von "ccStrobe( CC1100_STX )" gesetztes bit 1 (0x02) würde ja durch die Und-Verknüpfung maskiert, oder?

(2) Ist das Verhalten eigentlich tatsächlich sinnvoll? Wenn wir den CC1100 in den Idle-Zustand versetzen, empfängt er nicht mehr und merkt also auch nicht, dass jemand anderes sendet. Ist es sinnvoll, dass wir Pakete, die gerade gesendet werden, stören, um unser Paket loszuwerden?

Matthias Gehre

Also m.E. hast du vollkommen Recht.
Leider scheint der ursprüngliche Programmier sich nicht zu melden. Hast du mal
probiert, ob was passiert, wenn du deine Änderungen vornimmst?