You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Confirmed by finding "IDLE" string at real address 0x080BBC32
This means our Ghidra project has a 0x7000 offset from real addresses. PC-relative branches work correctly in Ghidra, but absolute addresses (MOVW/MOVT) reflect real flash addresses.
All 6 User Tasks
Found via xTaskCreate calls in the initialization function:
#
Task Name
Entry Point (real)
Stack
Priority
Queue/Semaphore
Description
1
display
0x0803DA50
1536 B
1 (lowest)
Queue: 20 items × 1 byte
UI renderer. Receives display commands, dispatches via function pointer table
2
key
0x08040008
512 B
4 (highest)
Queue: 15 items × 1 byte + Binary semaphore
Button/input handler. Debounce, auto-repeat
3
osc
0x0804009C
1024 B
2
Binary semaphore
Oscilloscope acquisition. Takes semaphore, calls processing function
4
fpga
0x0803E454
512 B
3
Queue: 15 items × 1 byte
FPGA data readout. ADC calibration/scaling with FPU. Accesses SPI/FSMC
5
dvom_TX
0x0803E3F4
256 B
2
Queue: 10 items × 2 bytes
Digital voltmeter UART transmit. Sends to UART at 0x4000440C
6
dvom_RX
0x0803DAC0
512 B
3
Binary semaphore (from UART RX ISR)
Digital voltmeter UART receive + measurement calculations
The dvom_TX and dvom_RX tasks reveal that the multimeter function uses a dedicated external digital voltmeter chip communicating over UART (at 0x4000440C = USART2). This means:
The USART2 port talks to the DVOM chip, not the FPGA (correcting our earlier assumption)
The FPGA communication likely happens via SPI or parallel GPIO (the fpga task accesses 0x40003C08 which is in the SPI region)
The multimeter measurements are done by dedicated hardware, not the MCU's internal ADC
The DVOM chip handles voltage, current, resistance, continuity, etc.