Hi
Ich habe heute den Webserver von Radig so angepasst, dass ich TCP-Daten
empfangen und sie direkt über UART ausgeben kann. Es scheint alles zu
klappen, allerdings bleibt ein Problem. Wenn ich mit "Advanced Serial
Port Terminal" über TCP/IP Daten an den Controller schicke, scheint es
als ob er diese mehrere Male bekommt. D.h. ich bekomme mehrere Male
etwas über UART gesendet obwohl ich es nur einmal im Terminal sende.
1 | #include <avr/io.h>
|
2 | #include <stdio.h>
|
3 | #include <string.h>
|
4 | #include "config.h"
|
5 | #include "usart.h"
|
6 | #include "networkcard/enc28j60.h"
|
7 | #include "stack.h"
|
8 | #include "timer.h"
|
9 | #include "base64.h"
|
10 |
|
11 | void tcpFunktion(unsigned char buffer);
|
12 |
|
13 | int main(void){
|
14 |
|
15 | long a;
|
16 |
|
17 | DDRA = 0xFF;
|
18 | PORTA = 0xC4;
|
19 |
|
20 | //UART initialisieren
|
21 | usart_init(BAUDRATE);
|
22 |
|
23 | //Erfolgsmeldung
|
24 | usart_write("\n\rSystem Ready\n\r");
|
25 | usart_write("Compiliert am "__DATE__" um "__TIME__"\r\n");
|
26 | usart_write("Compiliert mit GCC Version "__VERSION__"\r\n");
|
27 |
|
28 | //Verzögerung
|
29 | for(a=0;a<1000000;a++){asm("nop");};
|
30 |
|
31 | //Stack initialisieren
|
32 | stack_init();
|
33 |
|
34 | //Ethernetcard Interrupt enable
|
35 | ETH_INT_ENABLE;
|
36 |
|
37 | //Globale Interrupts einschalten
|
38 | sei();
|
39 |
|
40 | add_tcp_app(1337, &tcpFunktion);
|
41 |
|
42 | for(;;){
|
43 | eth_get_data();
|
44 | }
|
45 |
|
46 | }
|
47 |
|
48 | void tcpFunktion(unsigned char buffer){
|
49 |
|
50 | int value;
|
51 | char usart_buffer[30];
|
52 | int a;
|
53 |
|
54 | usart_write("Data received!!!!!\n");
|
55 |
|
56 | for(a=TCP_DATA_START; a < TCP_DATA_END_VAR; a++){
|
57 | usart_write_char(eth_buffer[a]);
|
58 | }
|
59 |
|
60 | usart_write_char('\n');
|
61 | }
|
Die ganzen Register habe ich natürlich angepasst. Wenn ich nun über das
Terminal den String "hello" über TCP/IP sende erscheint folgendes
1 | System Ready
|
2 |
|
3 | Compiliert am Jul 14 2008 um 15:45:54
|
4 | Compiliert mit GCC Version 4.2.2 (WinAVR 20071221)
|
5 |
|
6 |
|
7 | NIC init:READY!
|
8 | My IP: 192.168.0.99
|
9 |
|
10 | Data received!!!!!
|
11 | hello
|
12 | Data received!!!!!
|
13 | hello
|
14 | Data received!!!!!
|
15 | hello
|
16 | Data received!!!!!
|
17 | hello
|
18 | Data received!!!!!
|
19 | hello
|
20 | Data received!!!!!
|
21 | ¦žUuÔ$¦èÀ¨
|
22 | bÀ¨c–Í€(ÿÿÿÀ¨
|
23 | Ám9”:Ú ±o| ±oé hÆvçÿŒãÒÐëN
|
24 | s/ü7Ç(w}y=•ïl¶Ôˆµ1/ßz, û¯©—Çÿ›Úå§ÿóJi—˾ó5·cè;›Ov{òðgof½MÒ?‰-0¯ûN
|
25 | §û:ÁžÞSv¨‹eö^ü¾»¿$T® ¼[ñ¥ÔÙo±ëÏÆÍ\û]ûèž7S}=·¸ô‡ú†ý¾”ï÷ÿÇãï~Â$Ä—ïÐ%ÿ4hÞüæ…g?«ej¾Úf+$Ã4–ùôÍß\T€`ÿ¶êzô-úqÌÍ•^åÆËâØøë<ª>·¸ûûðÜÿ
|
26 | Ì×k—cv¶¥œ
|
27 | 7/B2<,÷·ï¡çÙäÌj]Üô×ôíû[ÇÓ¦æë¦>lm±÷Ûtð©¢0˜˜Édÿ¿~VñžžZ$ÎyKßßK7ÆùüßÝYO'ì{ÿí”Ò~8|sµ²åž¿Ò{£ê|ÇŸs¤Ùi¹¦{,ÇW½¼Óú¾éjÿ”½ö/9û×¼é;UüÖç¾:úû¯n¥|Ö*°ÿ´ÈÝï÷ÝݬçÑ“Ïÿ‡»ÿ+6óÓûæ\ÇâÝï¯iìþODüßfÀÑm—¤cU§CWOkÜ{˜¿ÌÑMH®_ZY÷ïщïùö6nbÌ.³ÔT²\Ñ[qÈÖÔÙõŸäC*Uú:çÙ#«CÙ¼g}ø_]àDßj}eù=ž|ÿsÏ.G«™ÿ–OÕù[ºé`TÓbèÑ|˜°f7
|
28 | ž}ãòw»¶ÿ™wÚlÞt¿(Oër}¨Þl÷xëÐ+’žõeüÃöøɾÝ
|
29 | Data received!!!!!
|
30 | hello
|
31 | Data received!!!!!
|
32 | hello
|
Hat jemand eine Idee warum diese Nachricht so oft übertragen wird und
wie man das beheben kann?
Mit freundlichen Grüssen