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
.equ NET_BUFFERS_NUM = 8
.equ UART_HW_MSGNUMINBUF_SIZE = 8
.equ UART_HW_MSGNUMOUTBUF_SIZE = 8
.equ NET_BUFFERS_NUM = 10

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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