Где определение system_adc_read() в коде esp8266 Arduino?

Где находится определение uint16 system_adc_read(void) в коде esp8266 Arduino?

Я вижу, что он объявлен в Arduino/tools/sdk/include/user_interface.h, однако, похоже, для этого нет определения. system_adc_read() вызывается в analogRead( ) в Arduino/cores/esp8266/core_esp8266_wiring_analog.c

Я подозреваю, что system_adc_read() вызывает system_adc_read_fast() для чтения ADC, но не может найти его в коде! Может ли кто-нибудь указать мне на это? Я уже довольно долго мучаюсь.

Цель: манипулировать system_adc_read() в ESP8266 для повышения частоты дискретизации АЦП. Прямо сейчас частота дискретизации АЦП составляет 10 кс/с. Я хочу, чтобы она была больше 30–40 тыс./с.

, 👍3

Обсуждение

esp8266 SDK не является открытым исходным кодом, @Juraj

Боже мой! Спасибо, что сказали мне это. Итак, каковы мои альтернативы здесь? Я искал способы улучшить частоту дискретизации, но не смог достичь желаемого уровня (30-40 ksps)., @Ashish Ranjan

попробуйте ESP8266 Non-OS SDK API Reference здесь http://espressif.com/en/support/download/overview?keys=&field_type_tid%5B%5D=14, @Juraj


1 ответ


Лучший ответ:

2

"Определение" uint16 system_adc_read(void) находится внутри скомпилированного архива/объектного файла libmain.a внутри одного из NONOSDK папки, расположенные в /tools/sdk/lib/ . Версия выбирается в platform.txt. Например, в моей платформе.txt:

# default SDK for all boards
# (generic board overrides this variable)
build.sdk=NONOSDK22x_190703
#build.sdk=NONOSDK22x_191024
#build.sdk=NONOSDK22x_191105

Запуская xtensa-lx106-elf-objdump.exe -d в этом файле, я могу найти этот раздел внутри:

00000258 <system_adc_read>:
     258:   020c                    movi.n  a2, 0
     25a:   f0c112                  addi    a1, a1, -16
     25d:   0109                    s32i.n  a0, a1, 0
     25f:   fffc01                  l32r    a0, 250 <system_pp_recycle_rx_pkt+0x18>
     262:   0000c0                  callx0  a0
     265:   fff901                  l32r    a0, 24c <system_pp_recycle_rx_pkt+0x14>
     268:   f42020                  extui   a2, a2, 0, 16
     26b:   1b1207                  beq a2, a0, 28a <system_adc_read+0x32>
     26e:   b30c                    movi.n  a3, 11
     270:   902220                  addx2   a2, a2, a2
     273:   1122e0                  slli    a2, a2, 2
     276:   fff701                  l32r    a0, 254 <system_pp_recycle_rx_pkt+0x1c>
     279:   0000c0                  callx0  a0
     27c:   f42020                  extui   a2, a2, 0, 16
     27f:   00a402                  movi    a0, 0x400
     282:   013027                  bltu    a0, a2, 287 <system_adc_read+0x2f>
     285:   020d                    mov.n   a0, a2
     287:   f42000                  extui   a2, a0, 0, 16
     28a:   0108                    l32i.n  a0, a1, 0
     28c:   10c112                  addi    a1, a1, 16
     28f:   f00d                    ret.n
     291:   00                          .byte 00
     292:   00                          .byte 00
     293:   00                          .byte 00
     294:   ff ff 00 00                 
    ...

000002a0 <system_adc_read_fast>:
     2a0:   e0c112                  addi    a1, a1, -32
     2a3:   11c9                    s32i.n  a12, a1, 4
     2a5:   21d9                    s32i.n  a13, a1, 8
     2a7:   31e9                    s32i.n  a14, a1, 12
     2a9:   5129                    s32i.n  a2, a1, 20
     2ab:   41f9                    s32i.n  a15, a1, 16
     2ad:   0109                    s32i.n  a0, a1, 0
     2af:   03fd                    mov.n   a15, a3
     2b1:   fff901                  l32r    a0, 298 <system_adc_read+0x40>
     2b4:   0000c0                  callx0  a0
     2b7:   4fbc                    beqz.n  a15, 2ef <system_adc_read_fast+0x4f>
     2b9:   fff6e1                  l32r    a14, 294 <system_adc_read+0x3c>
     2bc:   0c0c                    movi.n  a12, 0
     2be:   51d8                    l32i.n  a13, a1, 20
     2c0:   90dcd0                  addx2   a13, a12, a13
     2c3:   001d32                  l16ui   a3, a13, 0
     2c6:   1a13e7                  beq a3, a14, 2e4 <system_adc_read_fast+0x44>
     2c9:   902330                  addx2   a2, a3, a3
     2cc:   1122e0                  slli    a2, a2, 2
     2cf:   b30c                    movi.n  a3, 11
     2d1:   fff201                  l32r    a0, 29c <system_adc_read+0x44>
     2d4:   0000c0                  callx0  a0
     2d7:   f44020                  extui   a4, a2, 0, 16
     2da:   00a402                  movi    a0, 0x400
     2dd:   003d                    mov.n   a3, a0
     2df:   013047                  bltu    a0, a4, 2e4 <system_adc_read_fast+0x44>
     2e2:   043d                    mov.n   a3, a4
     2e4:   005d32                  s16i    a3, a13, 0
     2e7:   cc1b                    addi.n  a12, a12, 1
     2e9:   f4c0c0                  extui   a12, a12, 0, 16
     2ec:   ce9fc7                  bne a15, a12, 2be <system_adc_read_fast+0x1e>
     2ef:   11c8                    l32i.n  a12, a1, 4
     2f1:   21d8                    l32i.n  a13, a1, 8
     2f3:   31e8                    l32i.n  a14, a1, 12
     2f5:   41f8                    l32i.n  a15, a1, 16
     2f7:   0108                    l32i.n  a0, a1, 0
     2f9:   20c112                  addi    a1, a1, 32
     2fc:   f00d                    ret.n
     2fe:   00                          .byte 00
     2ff:   00                          .byte 00
     300:   ff ff 00 00                 
    ...
,

Классная детективная работа. Спасибо! Я смог реализовать свой вариант использования, используя это: https://arduinoprosto.ru/q/52854/25931, @Ashish Ranjan

@loadingnow может ли кто-нибудь уточнить, возвращает ли system_adc_read 0-1023 или 1-1024?, @S. Imp

@ S.Imp Я не уверен, но вам следует задать отдельный вопрос для уточнения. Это было бы намного полезнее для других, у которых есть тот же вопрос., @loadingnow