hallo! Angenommen, ich habe eine Funktion, die sich öfter "aufhängt" Wo sie sich aufhängt, weiß ich nicht genau. diese Funktion ruft nämlich einige andere Funktionen auf. Alle haben auch schleifen. Es gibt so viele Abzweige, dass ich nicht jede Codezeile einzeln debuggen kann.(ginge bei mir nur per Uart) Ein Timerinterrupt kommt regelmäßig wie erwünscht. Ich habe mir gedacht, dass ich die Zeit überwache, die der Controller außerhalb der main-Loop verbringt. Gibt es eine möglichkeit, die Funktion aus einer anderen heraus zu beenden? AVRGCC Atmega 32 ps: es geht um die RX funktion der "bidirektionalen Funkbrücke RFM12"
Ich würde in warscheinlichen Bereichen einfach einen String per UART senden. Z.B. wenn Du in der Main eine Sub aufrufst, setzt Du vor der Sub einen Sendecode hin, welcher Dir anzeigt das die Sub gestartet wurde, und am Ende das diese wieder verlassen wurde.
Hier die aufger. Funktion:
1 | unsigned char rf12_rxdata(unsigned char *data, unsigned char *status, unsigned char *id) |
2 | { unsigned char i, number; |
3 | unsigned short crc, crcref; |
4 | LED_RX=1; |
5 | *status=rf12_rxbyte(); // Status |
6 | crc=_crc_ccitt_update (0, *status); |
7 | number=rf12_rxbyte(); // Anzahl der zu empfangenden Bytes |
8 | crc=_crc_ccitt_update (crc, number); |
9 | if (number>MAX_BUF) |
10 | number=MAX_BUF; |
11 | if (number) |
12 | {
|
13 | uart_puts(s); |
14 | *id=rf12_rxbyte(); // Paketnummer |
15 | crc=_crc_ccitt_update (crc, *id); |
16 | for (i=0; i<number; i++) |
17 | { *data=rf12_rxbyte(); |
18 | crc=_crc_ccitt_update (crc, *data); |
19 | data++; |
20 | }
|
21 | }
|
22 | crcref=rf12_rxbyte(); // CRC empfangen |
23 | uart_puts("crc emp\r\n"); |
24 | crcref|=rf12_rxbyte()*256; // CRC empfangen |
25 | uart_puts("crc emp_2\r\n"); |
26 | rf12_trans(0xCA81); // restart syncword detection: |
27 | rf12_trans(0xCA83); // enable FIFO |
28 | LED_RX=0; |
29 | if (crcref!=crc) |
30 | return 255; // checksum error |
31 | else
|
32 | return number; // data ok |
33 | }
|
Unbekannt schrieb: > if (number) > { > uart_puts(s); > *id=rf12_rxbyte(); // Paketnummer > crc=_crc_ccitt_update (crc, *id); > for (i=0; i<number; i++) > { *data=rf12_rxbyte(); > crc=_crc_ccitt_update (crc, *data); > data++; > } > } endlosschleife in uart_puts() ?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.