From 3cd23d5f6014d618916ad8f6009ef363fa611190 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sat, 12 Jul 2025 00:21:47 +0200 Subject: [PATCH] reduce size of net buffers from 32 to 28. allows us to use 10 buffers in R05. --- avr/devices/r05/main/main.asm | 5 +---- avr/modules/network/buffer.asm | 23 +++++++++++++++++++++++ avr/modules/network/defs.asm | 2 +- avr/modules/uart_hw2/comonuart0.asm | 9 ++++++--- avr/modules/uart_hw2/comonuart1.asm | 8 +++++--- avr/modules/uart_hw2/defs.asm | 3 ++- 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/avr/devices/r05/main/main.asm b/avr/devices/r05/main/main.asm index ebf87b3..b22236f 100644 --- a/avr/devices/r05/main/main.asm +++ b/avr/devices/r05/main/main.asm @@ -75,10 +75,7 @@ #define APPS_ROUTER -.equ NET_BUFFERS_NUM = 8 - -.equ UART_HW_MSGNUMINBUF_SIZE = 8 -.equ UART_HW_MSGNUMOUTBUF_SIZE = 8 +.equ NET_BUFFERS_NUM = 10 diff --git a/avr/modules/network/buffer.asm b/avr/modules/network/buffer.asm index 92732e4..5404450 100644 --- a/avr/modules/network/buffer.asm +++ b/avr/modules/network/buffer.asm @@ -124,6 +124,8 @@ NET_Buffer_ReleaseByNum_end: NET_Buffer_Locate: cpi r16, NET_BUFFERS_NUM brcc NET_Buffer_Locate_end ; out of range + +.if NET_BUFFERS_SIZE == 32 mov xh, r16 ; * 256 clr xl lsr xh ; *128 @@ -132,10 +134,31 @@ NET_Buffer_Locate: ror xl lsr xh ; *32 ror xl +.elif NET_BUFFERS_SIZE == 28 + clr r17 + mov xl, r16 ; * 256 + clr xh + lsl xl ; * 2 + rol xh + add xl, r16 ; * 3 + adc xh, r17 + lsl xl ; * 6 + rol xh + add xl, r16 ; * 7 + adc xh, r17 + lsl xl ; * 14 + rol xh + lsl xl ; * 28 + rol xh +.else +.error "Unhandled buffer size" +.endif + ldi r17, LOW(netBuffers) add xl, r17 ldi r17, HIGH(netBuffers) adc xh, r17 + sec NET_Buffer_Locate_end: ret diff --git a/avr/modules/network/defs.asm b/avr/modules/network/defs.asm index f048c80..9e68b37 100644 --- a/avr/modules/network/defs.asm +++ b/avr/modules/network/defs.asm @@ -10,7 +10,7 @@ ; defs -.equ NET_BUFFERS_SIZE = 32 ; CAVE: need to adapt routine NET_Buffer_Locate when changing this value!! +.equ NET_BUFFERS_SIZE = 28 ; CAVE: need to adapt routine NET_Buffer_Locate when changing this value!! .equ NET_MSGNUMINBUF_SIZE = 6 ; max buffer nums in ringbuffer (global incoming) diff --git a/avr/modules/uart_hw2/comonuart0.asm b/avr/modules/uart_hw2/comonuart0.asm index 60f718a..46c86da 100644 --- a/avr/modules/uart_hw2/comonuart0.asm +++ b/avr/modules/uart_hw2/comonuart0.asm @@ -132,7 +132,7 @@ comOnUart0StartReading: adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl std Y+UART_HW2_IFACE_OFFS_BUFPOS_HIGH, xh - ldi r16, UART_HW2_BUFFER_SIZE-1 + ldi r16, UART_HW2_BUFFER_SIZE std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 clr r16 std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16 @@ -650,8 +650,11 @@ comOnUart0RxCharIsr: brne comOnUart0RxCharIsr_end ; determine msg size inc r16 ; last byte was payload length, add byte for crc - cp r16, r17 ; compare remaining length against remaining space - brcc comOnUart0RxCharIsr_emsgsize ; msg too long +; cp r16, r17 ; compare remaining length against remaining space +; brcc comOnUart0RxCharIsr_emsgsize ; msg too long + cp r17, r16 ; compare remaining length against remaining space + brcs comOnUart0RxCharIsr_emsgsize ; msg too long + std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 ; set new number of bytes left tst r16 brne comOnUart0RxCharIsr_end ; jmp if still bytes left to receive diff --git a/avr/modules/uart_hw2/comonuart1.asm b/avr/modules/uart_hw2/comonuart1.asm index 6f87faf..6449877 100644 --- a/avr/modules/uart_hw2/comonuart1.asm +++ b/avr/modules/uart_hw2/comonuart1.asm @@ -132,7 +132,7 @@ comOnUart1StartReading: adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl std Y+UART_HW2_IFACE_OFFS_BUFPOS_HIGH, xh - ldi r16, UART_HW2_BUFFER_SIZE-1 + ldi r16, UART_HW2_BUFFER_SIZE std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 clr r16 std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16 @@ -650,8 +650,10 @@ comOnUart1RxCharIsr: brne comOnUart1RxCharIsr_end ; determine msg size inc r16 ; last byte was payload length, add byte for crc - cp r16, r17 ; compare remaining length against remaining space - brcc comOnUart1RxCharIsr_emsgsize ; msg too long +; cp r16, r17 ; compare remaining length against remaining space +; brcc comOnUart1RxCharIsr_emsgsize ; msg too long + cp r17, r16 ; compare remaining length against remaining space + brcs comOnUart1RxCharIsr_emsgsize ; msg too long std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 ; set new number of bytes left tst r16 brne comOnUart1RxCharIsr_end ; jmp if still bytes left to receive diff --git a/avr/modules/uart_hw2/defs.asm b/avr/modules/uart_hw2/defs.asm index a50a9f6..8bb10f2 100644 --- a/avr/modules/uart_hw2/defs.asm +++ b/avr/modules/uart_hw2/defs.asm @@ -11,7 +11,8 @@ #define AVR_MODULES_UART_HW2_DEFS_H -.equ UART_HW2_BUFFER_SIZE = NET_BUFFERS_SIZE +;.equ UART_HW2_BUFFER_SIZE = NET_BUFFERS_SIZE +.equ UART_HW2_BUFFER_SIZE = NET_BUFFERS_SIZE-1 .equ UART_HW2_MODE_IDLE = 0