Made two minimal, surgical fixes to stabilize ON/OFF splitting.

What I changed

  - Core/Inc/main.h:76
      - Set ADC_BUFF_SIZE from 50 to 64 so each half is even (32). This keeps the “i &
        1” parity consistent across half-buffer boundaries.
  - Core/Src/stm32f4xx_it.c:388
      - Fixed N after splitting the first half: ADC_proc.N = (ADC_BUFF_SIZE/2 -
        Sweep_state.curr_step_start_DMA_N)/2;
      - Previously it used (Sweep_state.curr_step_start_DMA_N)/2, which was wrong for
        that segment.

  Why this helps

  - With ADC_BUFF_SIZE=50, half-size is 25 (odd). That flips ON/OFF labeling each half
    because i & 1 parity shifts by 25, mixing levels and driving avg_ON and avg_OFF
    together.
  - The N bug skewed normalization, further flattening differences between averages.

  How to verify

  - Build and flash: make && make flash.
  - Observe avg_ON/avg_OFF over CDC. They should now differ consistently; inverting
    meандр should swap them cleanly.
  - If still needed, I can add a global sample counter (sample_seq) for fully robust
    ON/OFF classification without relying on buffer indices.
This commit is contained in:
2025-12-19 23:41:15 +03:00
parent 186ad1939a
commit 985dbcc87b
18 changed files with 2868 additions and 2866 deletions

View File

@ -1,4 +1,4 @@
ARM GAS /tmp/ccSpc0Qq.s page 1
ARM GAS /tmp/ccc06Tdn.s page 1
1 .cpu cortex-m4
@ -58,7 +58,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
27:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** /** @defgroup USBD_IOREQ
28:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** * @brief control I/O requests module
29:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** * @{
ARM GAS /tmp/ccSpc0Qq.s page 2
ARM GAS /tmp/ccc06Tdn.s page 2
30:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** */
@ -118,7 +118,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
84:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** * @retval status
85:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** */
86:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
ARM GAS /tmp/ccSpc0Qq.s page 3
ARM GAS /tmp/ccc06Tdn.s page 3
87:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** uint8_t *pbuf, uint32_t len)
@ -178,7 +178,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
66 0018 0020 movs r0, #0
67 001a 08BD pop {r3, pc}
68 .cfi_endproc
ARM GAS /tmp/ccSpc0Qq.s page 4
ARM GAS /tmp/ccc06Tdn.s page 4
69 .LFE243:
@ -238,7 +238,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
109 .section .text.USBD_CtlPrepareRx,"ax",%progbits
110 .align 1
111 .global USBD_CtlPrepareRx
ARM GAS /tmp/ccSpc0Qq.s page 5
ARM GAS /tmp/ccc06Tdn.s page 5
112 .syntax unified
@ -298,7 +298,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
144:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c ****
145:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** /* Start the transfer */
146:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
ARM GAS /tmp/ccSpc0Qq.s page 6
ARM GAS /tmp/ccc06Tdn.s page 6
145 .loc 1 146 3 is_stmt 1 view .LVU35
@ -358,7 +358,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
185 .loc 1 162 9 view .LVU44
186 0006 0021 movs r1, #0
187 .LVL14:
ARM GAS /tmp/ccSpc0Qq.s page 7
ARM GAS /tmp/ccc06Tdn.s page 7
188 .loc 1 162 9 view .LVU45
@ -418,7 +418,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
227 000e FFF7FEFF bl USBD_LL_Transmit
228 .LVL17:
180:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c ****
ARM GAS /tmp/ccSpc0Qq.s page 8
ARM GAS /tmp/ccc06Tdn.s page 8
181:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** return USBD_OK;
@ -478,7 +478,7 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
267 .loc 1 198 3 is_stmt 1 view .LVU62
199:Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c **** }
268 .loc 1 199 1 is_stmt 0 view .LVU63
ARM GAS /tmp/ccSpc0Qq.s page 9
ARM GAS /tmp/ccc06Tdn.s page 9
269 0012 0020 movs r0, #0
@ -529,25 +529,25 @@ ARM GAS /tmp/ccSpc0Qq.s page 1
305 .file 2 "/usr/lib/gcc/arm-none-eabi/13.2.1/include/stdint.h"
306 .file 3 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h"
307 .file 4 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h"
ARM GAS /tmp/ccSpc0Qq.s page 10
ARM GAS /tmp/ccc06Tdn.s page 10
DEFINED SYMBOLS
*ABS*:00000000 usbd_ioreq.c
/tmp/ccSpc0Qq.s:21 .text.USBD_CtlSendData:00000000 $t
/tmp/ccSpc0Qq.s:27 .text.USBD_CtlSendData:00000000 USBD_CtlSendData
/tmp/ccSpc0Qq.s:72 .text.USBD_CtlContinueSendData:00000000 $t
/tmp/ccSpc0Qq.s:78 .text.USBD_CtlContinueSendData:00000000 USBD_CtlContinueSendData
/tmp/ccSpc0Qq.s:110 .text.USBD_CtlPrepareRx:00000000 $t
/tmp/ccSpc0Qq.s:116 .text.USBD_CtlPrepareRx:00000000 USBD_CtlPrepareRx
/tmp/ccSpc0Qq.s:161 .text.USBD_CtlContinueRx:00000000 $t
/tmp/ccSpc0Qq.s:167 .text.USBD_CtlContinueRx:00000000 USBD_CtlContinueRx
/tmp/ccSpc0Qq.s:199 .text.USBD_CtlSendStatus:00000000 $t
/tmp/ccSpc0Qq.s:205 .text.USBD_CtlSendStatus:00000000 USBD_CtlSendStatus
/tmp/ccSpc0Qq.s:237 .text.USBD_CtlReceiveStatus:00000000 $t
/tmp/ccSpc0Qq.s:243 .text.USBD_CtlReceiveStatus:00000000 USBD_CtlReceiveStatus
/tmp/ccSpc0Qq.s:275 .text.USBD_GetRxCount:00000000 $t
/tmp/ccSpc0Qq.s:281 .text.USBD_GetRxCount:00000000 USBD_GetRxCount
/tmp/ccc06Tdn.s:21 .text.USBD_CtlSendData:00000000 $t
/tmp/ccc06Tdn.s:27 .text.USBD_CtlSendData:00000000 USBD_CtlSendData
/tmp/ccc06Tdn.s:72 .text.USBD_CtlContinueSendData:00000000 $t
/tmp/ccc06Tdn.s:78 .text.USBD_CtlContinueSendData:00000000 USBD_CtlContinueSendData
/tmp/ccc06Tdn.s:110 .text.USBD_CtlPrepareRx:00000000 $t
/tmp/ccc06Tdn.s:116 .text.USBD_CtlPrepareRx:00000000 USBD_CtlPrepareRx
/tmp/ccc06Tdn.s:161 .text.USBD_CtlContinueRx:00000000 $t
/tmp/ccc06Tdn.s:167 .text.USBD_CtlContinueRx:00000000 USBD_CtlContinueRx
/tmp/ccc06Tdn.s:199 .text.USBD_CtlSendStatus:00000000 $t
/tmp/ccc06Tdn.s:205 .text.USBD_CtlSendStatus:00000000 USBD_CtlSendStatus
/tmp/ccc06Tdn.s:237 .text.USBD_CtlReceiveStatus:00000000 $t
/tmp/ccc06Tdn.s:243 .text.USBD_CtlReceiveStatus:00000000 USBD_CtlReceiveStatus
/tmp/ccc06Tdn.s:275 .text.USBD_GetRxCount:00000000 $t
/tmp/ccc06Tdn.s:281 .text.USBD_GetRxCount:00000000 USBD_GetRxCount
UNDEFINED SYMBOLS
USBD_LL_Transmit