reduce size of net buffers from 32 to 28.

allows us to use 10 buffers in R05.
This commit is contained in:
Martin Preuss
2025-07-12 00:21:47 +02:00
parent 003f53b0b7
commit 3cd23d5f60
6 changed files with 38 additions and 12 deletions

View File

@@ -75,10 +75,7 @@
#define APPS_ROUTER #define APPS_ROUTER
.equ NET_BUFFERS_NUM = 8 .equ NET_BUFFERS_NUM = 10
.equ UART_HW_MSGNUMINBUF_SIZE = 8
.equ UART_HW_MSGNUMOUTBUF_SIZE = 8

View File

@@ -124,6 +124,8 @@ NET_Buffer_ReleaseByNum_end:
NET_Buffer_Locate: NET_Buffer_Locate:
cpi r16, NET_BUFFERS_NUM cpi r16, NET_BUFFERS_NUM
brcc NET_Buffer_Locate_end ; out of range brcc NET_Buffer_Locate_end ; out of range
.if NET_BUFFERS_SIZE == 32
mov xh, r16 ; * 256 mov xh, r16 ; * 256
clr xl clr xl
lsr xh ; *128 lsr xh ; *128
@@ -132,10 +134,31 @@ NET_Buffer_Locate:
ror xl ror xl
lsr xh ; *32 lsr xh ; *32
ror xl 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) ldi r17, LOW(netBuffers)
add xl, r17 add xl, r17
ldi r17, HIGH(netBuffers) ldi r17, HIGH(netBuffers)
adc xh, r17 adc xh, r17
sec sec
NET_Buffer_Locate_end: NET_Buffer_Locate_end:
ret ret

View File

@@ -10,7 +10,7 @@
; defs ; 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) .equ NET_MSGNUMINBUF_SIZE = 6 ; max buffer nums in ringbuffer (global incoming)

View File

@@ -132,7 +132,7 @@ comOnUart0StartReading:
adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER
std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl
std Y+UART_HW2_IFACE_OFFS_BUFPOS_HIGH, xh 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 std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16
clr r16 clr r16
std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16 std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16
@@ -650,8 +650,11 @@ comOnUart0RxCharIsr:
brne comOnUart0RxCharIsr_end brne comOnUart0RxCharIsr_end
; determine msg size ; determine msg size
inc r16 ; last byte was payload length, add byte for crc inc r16 ; last byte was payload length, add byte for crc
cp r16, r17 ; compare remaining length against remaining space ; cp r16, r17 ; compare remaining length against remaining space
brcc comOnUart0RxCharIsr_emsgsize ; msg too long ; 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 std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 ; set new number of bytes left
tst r16 tst r16
brne comOnUart0RxCharIsr_end ; jmp if still bytes left to receive brne comOnUart0RxCharIsr_end ; jmp if still bytes left to receive

View File

@@ -132,7 +132,7 @@ comOnUart1StartReading:
adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER adiw xh:xl, UART_HW2_IFACE_OFFS_BUFFER
std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl std Y+UART_HW2_IFACE_OFFS_BUFPOS_LOW, xl
std Y+UART_HW2_IFACE_OFFS_BUFPOS_HIGH, xh 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 std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16
clr r16 clr r16
std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16 std Y+UART_HW2_IFACE_OFFS_BUFUSED, r16
@@ -650,8 +650,10 @@ comOnUart1RxCharIsr:
brne comOnUart1RxCharIsr_end brne comOnUart1RxCharIsr_end
; determine msg size ; determine msg size
inc r16 ; last byte was payload length, add byte for crc inc r16 ; last byte was payload length, add byte for crc
cp r16, r17 ; compare remaining length against remaining space ; cp r16, r17 ; compare remaining length against remaining space
brcc comOnUart1RxCharIsr_emsgsize ; msg too long ; 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 std Y+UART_HW2_IFACE_OFFS_BUFLEFT, r16 ; set new number of bytes left
tst r16 tst r16
brne comOnUart1RxCharIsr_end ; jmp if still bytes left to receive brne comOnUart1RxCharIsr_end ; jmp if still bytes left to receive

View File

@@ -11,7 +11,8 @@
#define AVR_MODULES_UART_HW2_DEFS_H #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 .equ UART_HW2_MODE_IDLE = 0