/* */

Chris  -  AVR-Net-IO mit Arduino

 
Riki und Rudi Chris Michi Doris 

ETHERSEX (im Einsatz)

AVR-Net-IO mit Home-Assistant da: [link]

mein repo mit mqtt patches + home-assistant modul + reduzierter ram verbauch + TCP abort callback patch: github.com/ferbar/ethersex

WICHTIG: nicht vergessen die fuses zu setzen. Siehe https://www.ethersex.de/index.php/Flashing_(Deutsch)

lfuse:w:0xCF:m -U hfuse:w:0xDC:m

AVRNETIO (Hat leider nicht funktioniert, nicht im Einsatz)

Pollin AVR-NET-IO mit Arduino. zum Flashen verwende ich das "ATMEL Evaluations-Board Version 2.0.1"

Hat leider nicht funktioniert: --- github.com/maassen/avr-netino/tree/master/hardware/avrnetio ---

das arduino Verzeichnis damit überschreiben, bootloader kompilieren und boards.txt schreiben. Wenn Tools->Boards / netavr nicht gefunden wird unten Fehlermeldung checken ob boards.txt im richtigen Verzeichnis ist

bootloader kompilieren

  TOOLROOT=../../../tools/ make -f ../atmega/Makefile anio 

 avrdude

 

https://www.mikrocontroller.net/articles/Pollin_ATMEL_Evaluations-Board

 

alles löschen:

avrdude -p m32 -F -c ponyser -P /dev/ttyS0 -v -e avrdude -p m32 -F -c ponyser -P /dev/ttyS0 -v -e 

firmware upload:

avrdude -p m32 -F -c ponyser -P /dev/ttyS0 -v -U ./atmega/ATmegaBOOT_168_anio32.hex

 

 

hat einfach funktioniert:

www.ethersex.de/index.php/Flashing_(Deutsch)

cross-avr-gcc und avr-libc: https://software.opensuse.org/package/cross-avr-gcc

und mit avrdude flashen 

config:

avr - net io default laden.

+debuggen auf uart einschalten

+dhcp

+ecmd über uart ein

avrdude ponyser

 

http://www.ethersex.de/index.php/Own_module

 

race condition in httplog.c: wenn zwischen ACK und ABORT ein 2. mal aufgerufen wird ein kaputter http request gesendet

patches bei protocols/httplog/httplog.c: im uip_abort() teil das free machen

patches bei protocols/uip/uip.c:  if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) { uip_connr->tcpstateflags = UIP_CLOSED;

ebenfalls callback aufrufen

unnötige Konstanten im SRAM suchen

Funktionen erwarten prinzipiell ein char* aufs SRAM. D.h. möchte man eine Konstante verwenden muss diese zuerst ins SRAM kopiert werden. Das geschieht beim Start des Programms. Für die meisten Funktionen gibts allerdings auch _p - Versionen die den char * im Programm Speicher erwarten. Baut man die Funktion auf *_p und _P("string") um kann man einige Bytes kostbares SRAM sparen.

LDFLAGS += "-Wl,-Map=$(TARGET).map,--cref"

 -Wa,-adhlns=MySrc.lst  

 

und dann nach .rodata (konstanten die in strings verandelt werden) common (globale objekte) und .bss suchen