tmiw / ezDV

A FreeDV device based on the ESP32.
89 stars 4 forks source link

[IC-705] Optimize socket and audio handling #45

Closed tmiw closed 1 month ago

tmiw commented 1 month ago

Performs several optimizations to reduce the CPU usage required for IC-705 support:

  1. Use non-blocking sockets instead of select() (similar to what was previously done in #33 for FlexRadio support).
  2. Use fixed-point math to amplify TX audio going to the IC-705 (to take advantage of integer-only SIMD instructions on the ESP32-S3 and slightly reduce stack consumption).

Benchmark results:

1.0.3 RX:

| Task | Run Time | Percentage
| IcomSocketTask/ | 119517 | 5%
| IcomSocketTask/ | 121203 | 6%
| IcomSocketTask/ | 57806 | 2%

1.0.3 TX:

| Task | Run Time | Percentage
| IcomSocketTask/ | 142365 | 7%
| IcomSocketTask/ | 59905 | 2%
| IcomSocketTask/ | 97499 | 4%

PR RX:

| Task | Run Time | Percentage
| IcomSocketTask/ | 16438 | 0%
| IcomSocketTask/ | 35090 | 1%
| IcomSocketTask/ | 25191 | 1%

PR TX:

| Task | Run Time | Percentage
| IcomSocketTask/ | 23805 | 1%
| IcomSocketTask/ | 50360 | 2%
| IcomSocketTask/ | 18416 | 0%

Before merging: