AT90CAN128 - nicht definiertes Verhalten

OP #5679455
Lesenswert?

Nabend,

Tausche aktuell CAN Messages zwischen dem Atmel und dem Rechner aus.
Soweit so gut. Ab und zu kommen Messages die eigentlich keiner sendet.
1
inline void _CanCopyMessageToMob(CanMessageType_t *Message)
2
{
3
  ENTER_CRITICAL_SECTION;
4
    
5
  // write DLC (Data Length Code)
6
  CANCDMOB = Message->Length;
7
  
8
  if (Message->Flags.Extended == 1)
9
  {
10
          PORTE^=1<<PE4;//Status LED
11
          // Eigentlich dürfe das Flag nie gesetzt sein..!
12
  }
13
  
14
  if (Message->Flags.Extended) 
15
  {
16
    // extended CAN ID
17
    CANCDMOB |= (1 << IDE);
18
    
19
    CANIDT4 = (uint8_t)  Message->Identifier << 3;
20
    
21
    uint32_t temp = Message->Identifier << 3;
22
    uint8_t *ptr = (uint8_t *) &temp;
23
    
24
    CANIDT3 = *(ptr + 1);
25
    CANIDT2 = *(ptr + 2);
26
    CANIDT1 = *(ptr + 3);
27
  }
28
  else 
29
  {
30
    // standard CAN ID
31
    CANIDT4 = 0;
32
    CANIDT3 = 0;
33
    CANIDT2 = (uint8_t)  Message->Identifier << 5;
34
    CANIDT1 = (uint16_t) Message->Identifier >> 3;
35
  }    
36

37
  
38
  if (Message->Flags.Rtr) {
39
    CANIDT4 |= (1<<RTRTAG);
40
  }
41
  else 
42
  {
43
    const uint8_t *p = Message->Data;
44
    for (uint8_t i = 0;i < Message->Length;i++) 
45
    {
46
      CANMSG = *p++;
47
    }
48
  }
49
  LEAVE_CRITICAL_SECTION;
50
}

Mir ist aufgefallen das:
1
  if (Message->Flags.Extended == 1)
2
  {
3
    // Eigentlich dürfe das Flag nie gesetzt sein..?!
4
  }
Das dass Flag gesetzt wird. ABER NICHT VON MIR!
Das heißt es muss ja irgendwas falsch laufen!

Habe die Source und den Header beigefügt. Was übersehe Ich?
Angehängte Dateien:

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