diff --git a/avr/modules/network/buffer.asm b/avr/modules/network/buffer.asm index c8e54e9..f96c927 100644 --- a/avr/modules/network/buffer.asm +++ b/avr/modules/network/buffer.asm @@ -27,6 +27,11 @@ NET_Buffer_Init: ldi xl, LOW(netBuffers) ldi xh, HIGH(netBuffers) + ldi r16, NET_BUFFERS_NUM + sts netBuffersFree, r16 + clr r16 + sts netBuffersMaxUsed, r16 + sts netBuffersUsed, r16 m_fixedbuf_init NET_BUFFERS_SIZE, NET_BUFFERS_NUM ret ; @end @@ -45,13 +50,39 @@ NET_Buffer_Alloc: push r15 in r15, SREG cli + + lds r17, netBuffersFree + tst r17 + breq NET_Buffer_Alloc_error + rcall NET_Buffer_Alloc_noIrq brcc NET_Buffer_Alloc_error + lds r17, netBuffersFree + dec r17 + sts netBuffersFree, r17 + lds r17, netBuffersUsed + inc r17 + sts netBuffersUsed, r17 + push r16 + lds r16, netBuffersMaxUsed + cp r16, r17 + brcc NET_Buffer_Alloc_countersSet + sts netBuffersMaxUsed, r17 +NET_Buffer_Alloc_countersSet: +#ifdef MODULES_LED_SIGNAL + ldi r16, T03_FLAGS_ALLOC + rcall LedSignal_ClrFlag ; (R17) +#endif + pop r16 out SREG, r15 pop r15 sec ret NET_Buffer_Alloc_error: +#ifdef MODULES_LED_SIGNAL + ldi r16, T03_FLAGS_ALLOC + rcall LedSignal_SetFlag ; (R17) +#endif out SREG, r15 pop r15 clc @@ -96,6 +127,12 @@ NET_Buffer_ReleaseByAddr: rjmp NET_Buffer_ReleaseByAddr_done NET_Buffer_ReleaseByAddr_release: m_fixedbuf_release + lds r16, netBuffersFree + inc r16 + sts netBuffersFree, r16 + lds r16, netBuffersUsed + dec r16 + sts netBuffersUsed, r16 NET_Buffer_ReleaseByAddr_done: out SREG, r15 pop r15 diff --git a/avr/modules/network/data.asm b/avr/modules/network/data.asm index c3d8dea..255e372 100644 --- a/avr/modules/network/data.asm +++ b/avr/modules/network/data.asm @@ -12,6 +12,9 @@ networkDataBegin: ; buffers for incoming and outgoing messages + netBuffersUsed: .byte 1 + netBuffersMaxUsed: .byte 1 + netBuffersFree: .byte 1 netBuffers: .byte NET_BUFFERS_NUM*NET_BUFFERS_SIZE netRingBufferMsgNumIn: .byte RINGBUFFERY_SIZE+NET_MSGNUMINBUF_SIZE