From 6ffe081fd2d6df033cc8b428b92db14eb7a67485 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Mon, 2 Nov 2020 23:19:24 +0200 Subject: [PATCH] Update IDF master to 357a27760 --- cores/esp32/esp32-hal-gpio.c | 6 +- cores/esp32/esp32-hal-gpio.h | 12 +- platform.txt | 8 +- tools/platformio-build-esp32.py | 8 +- tools/platformio-build-esp32s2.py | 8 +- tools/sdk/esp32/bin/bootloader_dio_40m.bin | Bin 17312 -> 17376 bytes tools/sdk/esp32/bin/bootloader_dio_80m.bin | Bin 17328 -> 17408 bytes tools/sdk/esp32/bin/bootloader_dout_40m.bin | Bin 17312 -> 17376 bytes tools/sdk/esp32/bin/bootloader_dout_80m.bin | Bin 17328 -> 17408 bytes tools/sdk/esp32/bin/bootloader_qio_40m.bin | Bin 17312 -> 17376 bytes tools/sdk/esp32/bin/bootloader_qio_80m.bin | Bin 17328 -> 17408 bytes tools/sdk/esp32/bin/bootloader_qout_40m.bin | Bin 17312 -> 17376 bytes tools/sdk/esp32/bin/bootloader_qout_80m.bin | Bin 17328 -> 17408 bytes tools/sdk/esp32/include/config/sdkconfig.h | 15 +- .../include/driver/include/driver/gpio.h | 10 +- .../esp32/include/driver/include/driver/i2c.h | 2 +- .../esp32/include/driver/include/driver/i2s.h | 3 +- .../include/driver/include/driver/mcpwm.h | 11 +- .../include/driver/include/driver/pcnt.h | 13 + .../esp32/include/driver/include/driver/rmt.h | 2 +- .../driver/include/driver/sdmmc_host.h | 6 +- .../driver/include/driver/sigmadelta.h | 2 +- .../driver/include/driver/spi_slave_hd.h | 2 +- .../include/driver/include/driver/twai.h | 7 +- .../include/driver/include/driver/uart.h | 7 +- .../esp32-camera/driver/include/sensor.h | 1 + .../include/esp_common/include/esp_bit_defs.h | 33 + .../esp_common/include/esp_idf_version.h | 4 + .../esp_littlefs/include/esp_littlefs.h | 119 +++ .../esp_littlefs/src/littlefs/bd/lfs_filebd.h | 73 ++ .../esp_littlefs/src/littlefs/bd/lfs_rambd.h | 75 ++ .../esp_littlefs/src/littlefs/bd/lfs_testbd.h | 141 ++++ .../include/esp_littlefs/src/littlefs/lfs.h | 655 +++++++++++++++ .../esp_littlefs/src/littlefs/lfs_util.h | 234 ++++++ .../include/esp_littlefs/src/littlefs_api.h | 106 +++ .../include/esp_rom/include/esp32/rom/gpio.h | 2 +- .../include/esp_rom/include/esp_rom_gpio.h | 1 + .../freertos/include/freertos/FreeRTOS.h | 659 ++++++++++----- .../freertos/include/freertos/atomic.h | 418 ++++++++++ .../freertos/include/freertos/croutine.h | 92 +-- .../include/freertos/deprecated_definitions.h | 100 +-- .../freertos/include/freertos/event_groups.h | 147 ++-- .../include/freertos/include/freertos/list.h | 148 ++-- .../include/freertos/message_buffer.h | 702 ++++++++++++++++ .../freertos/include/freertos/mpu_wrappers.h | 264 +++--- .../freertos/include/freertos/portable.h | 247 +++--- .../freertos/include/freertos/porttrace.h | 42 - .../freertos/include/freertos/projdefs.h | 161 ++-- .../include/freertos/include/freertos/queue.h | 271 ++---- .../freertos/include/freertos/semphr.h | 136 ++- .../{StackMacros.h => stack_macros.h} | 93 +-- .../freertos/include/freertos/stream_buffer.h | 745 +++++++++++++++++ .../include/freertos/include/freertos/task.h | 773 +++++++++++------- .../freertos/include/freertos/timers.h | 212 +++-- .../xtensa/include/freertos/FreeRTOSConfig.h | 14 +- .../xtensa/include/freertos/portmacro.h | 137 +++- .../xtensa/include/freertos/xtensa_context.h | 2 +- .../hal/esp32/include/hal/adc_hal_conf.h} | 20 +- .../include/hal/esp32/include/hal/can_types.h | 2 +- .../include/hal/esp32/include/hal/cpu_ll.h | 2 +- .../include/hal/esp32/include/hal/gpio_ll.h | 10 +- .../include/hal/esp32/include/hal/i2c_ll.h | 12 +- .../include/hal/esp32/include/hal/mcpwm_ll.h | 2 +- .../include/hal/esp32/include/hal/mpu_ll.h | 2 +- .../include/hal/esp32/include/hal/pcnt_ll.h | 71 +- .../include/hal/esp32/include/hal/rmt_ll.h | 2 +- .../include/hal/esp32/include/hal/rtc_io_ll.h | 4 +- .../hal/esp32/include/hal/touch_sensor_ll.h | 2 +- .../include/hal/esp32/include/hal/twai_ll.h | 6 +- .../include/hal/esp32/include/hal/uart_ll.h | 21 +- .../esp32/include/hal/include/hal/adc_types.h | 2 +- .../include/hal/include/hal/brownout_hal.h | 2 +- .../esp32/include/hal/include/hal/cpu_hal.h | 2 +- .../esp32/include/hal/include/hal/dac_types.h | 2 +- .../esp32/include/hal/include/hal/gpio_hal.h | 2 +- .../include/hal/include/hal/gpio_types.h | 15 +- .../esp32/include/hal/include/hal/i2c_types.h | 2 +- .../esp32/include/hal/include/hal/i2s_hal.h | 2 +- .../esp32/include/hal/include/hal/i2s_types.h | 2 +- .../include/hal/include/hal/ledc_types.h | 8 +- .../esp32/include/hal/include/hal/pcnt_hal.h | 9 + .../esp32/include/hal/include/hal/rmt_hal.h | 2 +- .../esp32/include/hal/include/hal/rmt_types.h | 2 +- .../include/hal/include/hal/rtc_io_hal.h | 50 +- .../hal/include/hal/sigmadelta_types.h | 21 +- .../esp32/include/hal/include/hal/spi_hal.h | 2 +- .../include/hal/include/hal/spi_slave_hal.h | 4 +- .../esp32/include/hal/include/hal/spi_types.h | 4 +- .../include/hal/include/hal/systimer_types.h | 2 +- .../esp32/include/hal/include/hal/timer_hal.h | 4 +- .../include/hal/include/hal/timer_types.h | 6 +- .../hal/include/hal/touch_sensor_types.h | 10 +- .../include/hal/include/hal/twai_types.h | 9 +- .../include/hal/include/hal/uart_types.h | 2 +- .../esp32/include/hal/include/hal/wdt_hal.h | 2 +- .../include/heap/include/esp_heap_caps.h | 21 +- .../esp32/include/heap/include/multi_heap.h | 4 +- .../idf_test/include/idf_performance.h | 9 + .../esp32/include/soc/include/soc/spinlock.h | 1 - .../soc/soc/esp32/include/soc/adc_caps.h | 31 - .../soc/soc/esp32/include/soc/can_caps.h | 33 - .../soc/soc/esp32/include/soc/can_periph.h | 2 +- .../soc/soc/esp32/include/soc/dac_caps.h | 22 - .../soc/soc/esp32/include/soc/gpio_caps.h | 51 -- .../soc/soc/esp32/include/soc/gpio_pins.h} | 5 +- .../soc/soc/esp32/include/soc/i2c_caps.h | 36 - .../soc/soc/esp32/include/soc/i2s_caps.h | 37 - .../soc/soc/esp32/include/soc/mcpwm_caps.h | 22 - .../soc/soc/esp32/include/soc/mpu_caps.h | 21 - .../soc/soc/esp32/include/soc/pcnt_caps.h | 27 - .../soc/soc/esp32/include/soc/rmt_caps.h | 26 - .../include/soc/soc/esp32/include/soc/rtc.h | 23 + .../soc/soc/esp32/include/soc/rtc_io_caps.h | 21 - .../soc/esp32/include/soc/sigmadelta_caps.h | 37 - .../soc/soc/esp32/include/soc/soc_caps.h | 239 +++++- .../include/soc/{cpu_caps.h => soc_pins.h} | 14 +- .../include/soc/{spi_caps.h => spi_pins.h} | 17 - .../soc/esp32/include/soc/timer_group_caps.h | 15 - .../soc/esp32/include/soc/touch_sensor_caps.h | 29 - .../soc/soc/esp32/include/soc/twai_caps.h | 29 - .../soc/soc/esp32/include/soc/uart_caps.h | 33 - .../regi2c_apll.h} | 4 +- .../regi2c_bbpll.h} | 4 +- .../include/soc/soc/include/soc/adc_periph.h | 4 +- .../include/soc/soc/include/soc/dac_periph.h | 2 +- .../include/soc/soc/include/soc/gpio_periph.h | 6 +- .../include/soc/soc/include/soc/i2c_periph.h | 2 +- .../include/soc/soc/include/soc/i2s_periph.h | 2 +- .../include/soc/soc/include/soc/ledc_periph.h | 4 +- .../include/soc/soc/include/soc/pcnt_periph.h | 25 + .../soc/soc/include/soc/rtc_io_periph.h | 7 +- .../include/soc/soc/include/soc/rtc_periph.h | 2 +- .../soc/soc/include/soc/sdio_slave_periph.h | 2 +- .../soc/soc/include/soc/sdmmc_periph.h | 2 +- .../include/soc/soc/include/soc/spi_periph.h | 3 +- .../soc/soc/include/soc/touch_sensor_periph.h | 2 +- .../include/soc/soc/include/soc/twai_periph.h | 2 +- .../include/soc/soc/include/soc/uart_periph.h | 2 +- .../esp32/{i2c_rtc_clk.h => regi2c_ctrl.h} | 15 +- .../esp32/include/ulp/include/ulp_common.h | 7 +- tools/sdk/esp32/ld/esp32.project.ld | 90 +- tools/sdk/esp32/lib/libapp_trace.a | Bin 118728 -> 118684 bytes tools/sdk/esp32/lib/libapp_update.a | Bin 138230 -> 138230 bytes tools/sdk/esp32/lib/libasio.a | Bin 2914432 -> 2914432 bytes tools/sdk/esp32/lib/libbootloader_support.a | Bin 674190 -> 689564 bytes tools/sdk/esp32/lib/libbt.a | Bin 20884898 -> 20886138 bytes tools/sdk/esp32/lib/libcbor.a | Bin 512282 -> 512282 bytes tools/sdk/esp32/lib/libcmock.a | Bin 29200 -> 29200 bytes tools/sdk/esp32/lib/libcoap.a | Bin 1689082 -> 1689082 bytes tools/sdk/esp32/lib/libcoexist.a | Bin 116186 -> 116158 bytes tools/sdk/esp32/lib/libconsole.a | Bin 556748 -> 556772 bytes tools/sdk/esp32/lib/libcore.a | Bin 6510 -> 6510 bytes tools/sdk/esp32/lib/libcxx.a | Bin 61790 -> 61682 bytes tools/sdk/esp32/lib/libdriver.a | Bin 4634628 -> 4646258 bytes tools/sdk/esp32/lib/libefuse.a | Bin 231636 -> 231636 bytes tools/sdk/esp32/lib/libesp-face.a | Bin 988738 -> 988738 bytes tools/sdk/esp32/lib/libesp-tls.a | Bin 232372 -> 232372 bytes tools/sdk/esp32/lib/libesp32-camera.a | Bin 1277146 -> 1445760 bytes tools/sdk/esp32/lib/libesp32.a | Bin 700122 -> 699926 bytes tools/sdk/esp32/lib/libesp_adc_cal.a | Bin 54630 -> 54630 bytes tools/sdk/esp32/lib/libesp_common.a | Bin 429918 -> 429670 bytes tools/sdk/esp32/lib/libesp_eth.a | Bin 1325428 -> 1325300 bytes tools/sdk/esp32/lib/libesp_event.a | Bin 407452 -> 407656 bytes tools/sdk/esp32/lib/libesp_gdbstub.a | Bin 123474 -> 123474 bytes tools/sdk/esp32/lib/libesp_hid.a | Bin 620498 -> 619850 bytes tools/sdk/esp32/lib/libesp_http_client.a | Bin 346080 -> 346080 bytes tools/sdk/esp32/lib/libesp_http_server.a | Bin 496152 -> 496152 bytes tools/sdk/esp32/lib/libesp_https_ota.a | Bin 79296 -> 79296 bytes tools/sdk/esp32/lib/libesp_ipc.a | Bin 35240 -> 35256 bytes tools/sdk/esp32/lib/libesp_littlefs.a | Bin 0 -> 753442 bytes tools/sdk/esp32/lib/libesp_local_ctrl.a | Bin 266228 -> 266228 bytes tools/sdk/esp32/lib/libesp_netif.a | Bin 800834 -> 801238 bytes tools/sdk/esp32/lib/libesp_pm.a | Bin 183206 -> 183010 bytes tools/sdk/esp32/lib/libesp_ringbuf.a | Bin 167110 -> 167462 bytes tools/sdk/esp32/lib/libesp_rom.a | Bin 36798 -> 36798 bytes .../sdk/esp32/lib/libesp_serial_slave_link.a | Bin 247818 -> 247818 bytes tools/sdk/esp32/lib/libesp_system.a | Bin 1017348 -> 1018892 bytes tools/sdk/esp32/lib/libesp_timer.a | Bin 174812 -> 174876 bytes tools/sdk/esp32/lib/libesp_websocket_client.a | Bin 173986 -> 174026 bytes tools/sdk/esp32/lib/libesp_wifi.a | Bin 811038 -> 810850 bytes tools/sdk/esp32/lib/libespcoredump.a | Bin 179088 -> 179120 bytes tools/sdk/esp32/lib/libespnow.a | Bin 48062 -> 48062 bytes tools/sdk/esp32/lib/libexpat.a | Bin 1852610 -> 1852610 bytes tools/sdk/esp32/lib/libfatfs.a | Bin 957824 -> 957992 bytes tools/sdk/esp32/lib/libfb_gfx.a | Bin 44068 -> 44068 bytes tools/sdk/esp32/lib/libfreemodbus.a | Bin 2026206 -> 2026634 bytes tools/sdk/esp32/lib/libfreertos.a | Bin 812726 -> 944832 bytes tools/sdk/esp32/lib/libhal.a | Bin 1964158 -> 1967346 bytes tools/sdk/esp32/lib/libheap.a | Bin 356482 -> 518904 bytes tools/sdk/esp32/lib/libjsmn.a | Bin 28842 -> 28842 bytes tools/sdk/esp32/lib/libjson.a | Bin 406970 -> 406970 bytes tools/sdk/esp32/lib/liblibsodium.a | Bin 4456852 -> 4456852 bytes tools/sdk/esp32/lib/liblog.a | Bin 96460 -> 96480 bytes tools/sdk/esp32/lib/liblwip.a | Bin 6141108 -> 6141204 bytes tools/sdk/esp32/lib/libmbedcrypto.a | Bin 3522768 -> 3522704 bytes tools/sdk/esp32/lib/libmbedtls.a | Bin 1180092 -> 1180092 bytes tools/sdk/esp32/lib/libmbedx509.a | Bin 672396 -> 672396 bytes tools/sdk/esp32/lib/libmdns.a | Bin 1005226 -> 1005866 bytes tools/sdk/esp32/lib/libmesh.a | Bin 1059390 -> 1059390 bytes tools/sdk/esp32/lib/libmqtt.a | Bin 457888 -> 457928 bytes tools/sdk/esp32/lib/libnet80211.a | Bin 966038 -> 967432 bytes tools/sdk/esp32/lib/libnewlib.a | Bin 343120 -> 343028 bytes tools/sdk/esp32/lib/libnghttp.a | Bin 2076820 -> 2076820 bytes tools/sdk/esp32/lib/libnvs_flash.a | Bin 1758002 -> 1757434 bytes tools/sdk/esp32/lib/libopenssl.a | Bin 439978 -> 439978 bytes tools/sdk/esp32/lib/libperfmon.a | Bin 76316 -> 76316 bytes tools/sdk/esp32/lib/libpp.a | Bin 502002 -> 501962 bytes tools/sdk/esp32/lib/libprotobuf-c.a | Bin 417836 -> 417836 bytes tools/sdk/esp32/lib/libprotocomm.a | Bin 613170 -> 613206 bytes tools/sdk/esp32/lib/libpthread.a | Bin 185848 -> 185852 bytes tools/sdk/esp32/lib/libsdmmc.a | Bin 449242 -> 449242 bytes tools/sdk/esp32/lib/libsmartconfig.a | Bin 108574 -> 108562 bytes tools/sdk/esp32/lib/libsoc.a | Bin 731838 -> 736000 bytes tools/sdk/esp32/lib/libsoc_esp32.a | Bin 388476 -> 403452 bytes tools/sdk/esp32/lib/libspi_flash.a | Bin 975960 -> 976012 bytes tools/sdk/esp32/lib/libspiffs.a | Bin 789226 -> 789290 bytes tools/sdk/esp32/lib/libtcp_transport.a | Bin 355232 -> 355232 bytes tools/sdk/esp32/lib/libtcpip_adapter.a | Bin 197200 -> 197200 bytes tools/sdk/esp32/lib/libulp.a | Bin 95670 -> 95670 bytes tools/sdk/esp32/lib/libunity.a | Bin 263370 -> 263370 bytes tools/sdk/esp32/lib/libvfs.a | Bin 420986 -> 421014 bytes tools/sdk/esp32/lib/libwear_levelling.a | Bin 344956 -> 344956 bytes tools/sdk/esp32/lib/libwifi_provisioning.a | Bin 950026 -> 949510 bytes tools/sdk/esp32/lib/libwpa_supplicant.a | Bin 5916414 -> 5917502 bytes tools/sdk/esp32/lib/libxtensa.a | Bin 140244 -> 140264 bytes tools/sdk/esp32/sdkconfig | 19 + tools/sdk/esp32s2/bin/bootloader_dio_40m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_dio_80m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_dout_40m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_dout_80m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_qio_40m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_qio_80m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_qout_40m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/bin/bootloader_qout_80m.bin | Bin 14624 -> 14576 bytes tools/sdk/esp32s2/include/config/sdkconfig.h | 12 +- .../include/driver/include/driver/gpio.h | 10 +- .../include/driver/include/driver/i2c.h | 2 +- .../include/driver/include/driver/i2s.h | 3 +- .../include/driver/include/driver/mcpwm.h | 11 +- .../include/driver/include/driver/pcnt.h | 13 + .../include/driver/include/driver/rmt.h | 2 +- .../driver/include/driver/sdmmc_host.h | 6 +- .../driver/include/driver/sigmadelta.h | 2 +- .../driver/include/driver/spi_slave_hd.h | 2 +- .../include/driver/include/driver/twai.h | 7 +- .../include/driver/include/driver/uart.h | 7 +- .../include/esp32s2/include/esp_hmac.h | 32 + .../include/esp_common/include/esp_bit_defs.h | 33 + .../esp_common/include/esp_idf_version.h | 4 + .../esp_littlefs/include/esp_littlefs.h | 119 +++ .../esp_littlefs/src/littlefs/bd/lfs_filebd.h | 73 ++ .../esp_littlefs/src/littlefs/bd/lfs_rambd.h | 75 ++ .../esp_littlefs/src/littlefs/bd/lfs_testbd.h | 141 ++++ .../include/esp_littlefs/src/littlefs/lfs.h | 655 +++++++++++++++ .../esp_littlefs/src/littlefs/lfs_util.h | 234 ++++++ .../include/esp_littlefs/src/littlefs_api.h | 106 +++ .../include/esp_rom/include/esp32/rom/gpio.h | 2 +- .../include/esp_rom/include/esp_rom_gpio.h | 1 + .../freertos/include/freertos/FreeRTOS.h | 659 ++++++++++----- .../freertos/include/freertos/atomic.h | 418 ++++++++++ .../freertos/include/freertos/croutine.h | 92 +-- .../include/freertos/deprecated_definitions.h | 100 +-- .../freertos/include/freertos/event_groups.h | 147 ++-- .../include/freertos/include/freertos/list.h | 148 ++-- .../include/freertos/message_buffer.h | 702 ++++++++++++++++ .../freertos/include/freertos/mpu_wrappers.h | 264 +++--- .../freertos/include/freertos/portable.h | 247 +++--- .../freertos/include/freertos/porttrace.h | 42 - .../freertos/include/freertos/projdefs.h | 161 ++-- .../include/freertos/include/freertos/queue.h | 271 ++---- .../freertos/include/freertos/semphr.h | 136 ++- .../{StackMacros.h => stack_macros.h} | 93 +-- .../freertos/include/freertos/stream_buffer.h | 745 +++++++++++++++++ .../include/freertos/include/freertos/task.h | 773 +++++++++++------- .../freertos/include/freertos/timers.h | 212 +++-- .../xtensa/include/freertos/FreeRTOSConfig.h | 14 +- .../xtensa/include/freertos/portmacro.h | 137 +++- .../xtensa/include/freertos/xtensa_context.h | 2 +- .../hal/esp32s2/include/hal/adc_hal_conf.h} | 22 +- .../include/hal/esp32s2/include/hal/adc_ll.h | 122 ++- .../include/hal/esp32s2/include/hal/cpu_ll.h | 2 +- .../include/hal/esp32s2/include/hal/gpio_ll.h | 5 +- .../include/hal/esp32s2/include/hal/i2c_ll.h | 8 +- .../include/hal/esp32s2/include/hal/mpu_ll.h | 2 +- .../include/hal/esp32s2/include/hal/pcnt_ll.h | 71 +- .../include/hal/esp32s2/include/hal/rmt_ll.h | 2 +- .../hal/esp32s2/include/hal/rtc_io_ll.h | 4 +- .../hal/esp32s2/include/hal/touch_sensor_ll.h | 14 +- .../include/hal/esp32s2/include/hal/uart_ll.h | 11 +- .../include/hal/include/hal/adc_types.h | 2 +- .../include/hal/include/hal/brownout_hal.h | 2 +- .../esp32s2/include/hal/include/hal/cpu_hal.h | 2 +- .../include/hal/include/hal/dac_types.h | 2 +- .../include/hal/include/hal/gpio_hal.h | 2 +- .../include/hal/include/hal/gpio_types.h | 15 +- .../include/hal/include/hal/i2c_types.h | 2 +- .../esp32s2/include/hal/include/hal/i2s_hal.h | 2 +- .../include/hal/include/hal/i2s_types.h | 2 +- .../include/hal/include/hal/ledc_types.h | 8 +- .../include/hal/include/hal/pcnt_hal.h | 9 + .../esp32s2/include/hal/include/hal/rmt_hal.h | 2 +- .../include/hal/include/hal/rmt_types.h | 2 +- .../include/hal/include/hal/rtc_io_hal.h | 50 +- .../hal/include/hal/sigmadelta_types.h | 21 +- .../esp32s2/include/hal/include/hal/spi_hal.h | 2 +- .../include/hal/include/hal/spi_slave_hal.h | 4 +- .../include/hal/include/hal/spi_types.h | 4 +- .../include/hal/include/hal/systimer_types.h | 2 +- .../include/hal/include/hal/timer_hal.h | 4 +- .../include/hal/include/hal/timer_types.h | 6 +- .../hal/include/hal/touch_sensor_types.h | 10 +- .../include/hal/include/hal/twai_types.h | 9 +- .../include/hal/include/hal/uart_types.h | 2 +- .../esp32s2/include/hal/include/hal/wdt_hal.h | 2 +- .../include/heap/include/esp_heap_caps.h | 21 +- .../esp32s2/include/heap/include/multi_heap.h | 4 +- .../idf_test/include/idf_performance.h | 9 + .../include/soc/include/soc/spinlock.h | 1 - .../soc/soc/esp32s2/include/soc/adc_caps.h | 31 - .../soc/soc/esp32s2/include/soc/dac_caps.h | 22 - .../soc/soc/esp32s2/include/soc/gpio_caps.h | 48 -- .../soc/soc/esp32s2/include/soc/gpio_pins.h} | 4 +- .../soc/soc/esp32s2/include/soc/i2c_caps.h | 36 - .../soc/soc/esp32s2/include/soc/i2s_caps.h | 30 - .../soc/soc/esp32s2/include/soc/mpu_caps.h | 21 - .../soc/soc/esp32s2/include/soc/pcnt_caps.h | 27 - .../soc/soc/esp32s2/include/soc/rmt_caps.h | 30 - .../include/soc/soc/esp32s2/include/soc/rtc.h | 26 + .../soc/soc/esp32s2/include/soc/rtc_io_caps.h | 18 - .../soc/esp32s2/include/soc/sigmadelta_caps.h | 37 - .../soc/soc/esp32s2/include/soc/soc_caps.h | 205 ++++- .../include/soc/{cpu_caps.h => soc_pins.h} | 14 +- .../soc/soc/esp32s2/include/soc/spi_caps.h | 59 -- .../soc/soc/esp32s2/include/soc/spi_pins.h | 19 +- .../soc/esp32s2/include/soc/systimer_caps.h | 21 - .../esp32s2/include/soc/timer_group_caps.h | 17 - ...ouch_sensor_caps.h => touch_sensor_pins.h} | 11 +- .../soc/soc/esp32s2/include/soc/twai_caps.h | 26 - .../soc/soc/esp32s2/include/soc/uart_caps.h | 32 - .../soc/soc/esp32s2/include/soc/usb_caps.h | 17 - .../soc/soc/esp32s2/include/soc/usb_periph.h | 2 +- .../regi2c_apll.h} | 4 +- .../regi2c_bbpll.h} | 4 +- .../private_include/regi2c_brownout.h} | 4 +- .../regi2c_saradc.h} | 12 +- .../regi2c_ulp.h} | 4 +- .../include/soc/soc/include/soc/adc_periph.h | 4 +- .../include/soc/soc/include/soc/dac_periph.h | 2 +- .../include/soc/soc/include/soc/gpio_periph.h | 6 +- .../include/soc/soc/include/soc/i2c_periph.h | 2 +- .../include/soc/soc/include/soc/i2s_periph.h | 2 +- .../include/soc/soc/include/soc/ledc_periph.h | 4 +- .../include/soc/soc/include/soc/pcnt_periph.h | 25 + .../soc/soc/include/soc/rtc_io_periph.h | 7 +- .../include/soc/soc/include/soc/rtc_periph.h | 2 +- .../soc/soc/include/soc/sdio_slave_periph.h | 2 +- .../soc/soc/include/soc/sdmmc_periph.h | 2 +- .../include/soc/soc/include/soc/spi_periph.h | 3 +- .../soc/soc/include/soc/touch_sensor_periph.h | 2 +- .../include/soc/soc/include/soc/twai_periph.h | 2 +- .../include/soc/soc/include/soc/uart_periph.h | 2 +- .../esp32s2/{i2c_rtc_clk.h => regi2c_ctrl.h} | 24 +- .../esp32s2/include/ulp/include/ulp_common.h | 7 +- tools/sdk/esp32s2/ld/esp32s2.project.ld | 72 +- tools/sdk/esp32s2/ld/libesp32s2.a | Bin 693928 -> 707862 bytes tools/sdk/esp32s2/lib/libapp_trace.a | Bin 120624 -> 120580 bytes tools/sdk/esp32s2/lib/libapp_update.a | Bin 136678 -> 136678 bytes tools/sdk/esp32s2/lib/libasio.a | Bin 2925872 -> 2925872 bytes tools/sdk/esp32s2/lib/libbootloader_support.a | Bin 606194 -> 633466 bytes tools/sdk/esp32s2/lib/libcbor.a | Bin 510530 -> 510530 bytes tools/sdk/esp32s2/lib/libcmock.a | Bin 29236 -> 29236 bytes tools/sdk/esp32s2/lib/libcoap.a | Bin 1686914 -> 1686930 bytes tools/sdk/esp32s2/lib/libcoexist.a | Bin 70976 -> 70988 bytes tools/sdk/esp32s2/lib/libconsole.a | Bin 556160 -> 556184 bytes tools/sdk/esp32s2/lib/libcore.a | Bin 6458 -> 6462 bytes tools/sdk/esp32s2/lib/libcxx.a | Bin 61746 -> 61614 bytes tools/sdk/esp32s2/lib/libdriver.a | Bin 4391678 -> 4402440 bytes tools/sdk/esp32s2/lib/libefuse.a | Bin 259888 -> 259888 bytes tools/sdk/esp32s2/lib/libesp-face.a | Bin 1020866 -> 1020866 bytes tools/sdk/esp32s2/lib/libesp-tls.a | Bin 255298 -> 255338 bytes tools/sdk/esp32s2/lib/libesp32s2.a | Bin 693928 -> 707862 bytes tools/sdk/esp32s2/lib/libesp_adc_cal.a | Bin 42096 -> 42096 bytes tools/sdk/esp32s2/lib/libesp_common.a | Bin 454766 -> 454534 bytes tools/sdk/esp32s2/lib/libesp_eth.a | Bin 658102 -> 657922 bytes tools/sdk/esp32s2/lib/libesp_event.a | Bin 515716 -> 516100 bytes tools/sdk/esp32s2/lib/libesp_gdbstub.a | Bin 123540 -> 123540 bytes tools/sdk/esp32s2/lib/libesp_hid.a | Bin 267334 -> 267330 bytes tools/sdk/esp32s2/lib/libesp_http_client.a | Bin 365648 -> 365648 bytes tools/sdk/esp32s2/lib/libesp_http_server.a | Bin 492448 -> 492448 bytes tools/sdk/esp32s2/lib/libesp_https_ota.a | Bin 78612 -> 78612 bytes tools/sdk/esp32s2/lib/libesp_https_server.a | Bin 77156 -> 77156 bytes tools/sdk/esp32s2/lib/libesp_ipc.a | Bin 32008 -> 32120 bytes tools/sdk/esp32s2/lib/libesp_littlefs.a | Bin 0 -> 754482 bytes tools/sdk/esp32s2/lib/libesp_local_ctrl.a | Bin 318312 -> 318312 bytes tools/sdk/esp32s2/lib/libesp_netif.a | Bin 995426 -> 995766 bytes tools/sdk/esp32s2/lib/libesp_pm.a | Bin 112178 -> 111998 bytes tools/sdk/esp32s2/lib/libesp_ringbuf.a | Bin 166102 -> 166410 bytes tools/sdk/esp32s2/lib/libesp_rom.a | Bin 57738 -> 57738 bytes .../esp32s2/lib/libesp_serial_slave_link.a | Bin 246812 -> 246812 bytes tools/sdk/esp32s2/lib/libesp_system.a | Bin 1024748 -> 1025852 bytes tools/sdk/esp32s2/lib/libesp_timer.a | Bin 135750 -> 135790 bytes .../sdk/esp32s2/lib/libesp_websocket_client.a | Bin 192162 -> 192202 bytes tools/sdk/esp32s2/lib/libesp_wifi.a | Bin 894568 -> 894372 bytes tools/sdk/esp32s2/lib/libespcoredump.a | Bin 168044 -> 168092 bytes tools/sdk/esp32s2/lib/libespnow.a | Bin 47726 -> 47726 bytes tools/sdk/esp32s2/lib/libexpat.a | Bin 1841318 -> 1841318 bytes tools/sdk/esp32s2/lib/libfatfs.a | Bin 1001308 -> 1001440 bytes tools/sdk/esp32s2/lib/libfb_gfx.a | Bin 44544 -> 44544 bytes tools/sdk/esp32s2/lib/libfreemodbus.a | Bin 2052046 -> 2052438 bytes tools/sdk/esp32s2/lib/libfreertos.a | Bin 700350 -> 821172 bytes tools/sdk/esp32s2/lib/libhal.a | Bin 2205952 -> 2208220 bytes tools/sdk/esp32s2/lib/libheap.a | Bin 355814 -> 518580 bytes tools/sdk/esp32s2/lib/libjsmn.a | Bin 31678 -> 31678 bytes tools/sdk/esp32s2/lib/libjson.a | Bin 407854 -> 407854 bytes tools/sdk/esp32s2/lib/liblibsodium.a | Bin 4340164 -> 4340164 bytes tools/sdk/esp32s2/lib/liblog.a | Bin 95304 -> 95320 bytes tools/sdk/esp32s2/lib/liblwip.a | Bin 6219052 -> 6219332 bytes tools/sdk/esp32s2/lib/libmbedcrypto.a | Bin 3626984 -> 3627024 bytes tools/sdk/esp32s2/lib/libmbedtls.a | Bin 1181744 -> 1181744 bytes tools/sdk/esp32s2/lib/libmbedx509.a | Bin 673488 -> 673488 bytes tools/sdk/esp32s2/lib/libmdns.a | Bin 1067062 -> 1067950 bytes tools/sdk/esp32s2/lib/libmesh.a | Bin 1036042 -> 1036042 bytes tools/sdk/esp32s2/lib/libmqtt.a | Bin 490888 -> 490924 bytes tools/sdk/esp32s2/lib/libnet80211.a | Bin 946238 -> 947612 bytes tools/sdk/esp32s2/lib/libnewlib.a | Bin 272176 -> 272084 bytes tools/sdk/esp32s2/lib/libnghttp.a | Bin 2082916 -> 2082916 bytes tools/sdk/esp32s2/lib/libnvs_flash.a | Bin 1751898 -> 1751338 bytes tools/sdk/esp32s2/lib/libopenssl.a | Bin 438722 -> 438722 bytes tools/sdk/esp32s2/lib/libperfmon.a | Bin 76596 -> 76596 bytes tools/sdk/esp32s2/lib/libpp.a | Bin 491486 -> 491450 bytes tools/sdk/esp32s2/lib/libprotobuf-c.a | Bin 420936 -> 420936 bytes tools/sdk/esp32s2/lib/libprotocomm.a | Bin 442164 -> 442204 bytes tools/sdk/esp32s2/lib/libpthread.a | Bin 186428 -> 186892 bytes tools/sdk/esp32s2/lib/libsdmmc.a | Bin 446466 -> 446466 bytes tools/sdk/esp32s2/lib/libsmartconfig.a | Bin 105990 -> 105982 bytes tools/sdk/esp32s2/lib/libsoc.a | Bin 498092 -> 501100 bytes tools/sdk/esp32s2/lib/libsoc_esp32s2.a | Bin 477826 -> 496780 bytes tools/sdk/esp32s2/lib/libspi_flash.a | Bin 874732 -> 874732 bytes tools/sdk/esp32s2/lib/libspiffs.a | Bin 781850 -> 781914 bytes tools/sdk/esp32s2/lib/libtcp_transport.a | Bin 353588 -> 353588 bytes tools/sdk/esp32s2/lib/libtcpip_adapter.a | Bin 218756 -> 218756 bytes tools/sdk/esp32s2/lib/libtinyusb.a | Bin 789092 -> 789424 bytes tools/sdk/esp32s2/lib/libulp.a | Bin 55294 -> 55294 bytes tools/sdk/esp32s2/lib/libunity.a | Bin 265918 -> 265918 bytes tools/sdk/esp32s2/lib/libvfs.a | Bin 419846 -> 419902 bytes tools/sdk/esp32s2/lib/libwear_levelling.a | Bin 335200 -> 335200 bytes tools/sdk/esp32s2/lib/libwifi_provisioning.a | Bin 965740 -> 965224 bytes tools/sdk/esp32s2/lib/libwpa_supplicant.a | Bin 6066946 -> 6068482 bytes tools/sdk/esp32s2/lib/libxtensa.a | Bin 195452 -> 195444 bytes tools/sdk/esp32s2/sdkconfig | 18 + 450 files changed, 11779 insertions(+), 4835 deletions(-) create mode 100644 tools/sdk/esp32/include/esp_littlefs/include/esp_littlefs.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_filebd.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_rambd.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_testbd.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs_util.h create mode 100644 tools/sdk/esp32/include/esp_littlefs/src/littlefs_api.h create mode 100644 tools/sdk/esp32/include/freertos/include/freertos/atomic.h create mode 100644 tools/sdk/esp32/include/freertos/include/freertos/message_buffer.h delete mode 100644 tools/sdk/esp32/include/freertos/include/freertos/porttrace.h rename tools/sdk/esp32/include/freertos/include/freertos/{StackMacros.h => stack_macros.h} (59%) create mode 100644 tools/sdk/esp32/include/freertos/include/freertos/stream_buffer.h rename tools/sdk/{esp32s2/include/soc/soc/esp32s2/include/soc/brownout_caps.h => esp32/include/hal/esp32/include/hal/adc_hal_conf.h} (54%) delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/adc_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/dac_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_caps.h rename tools/sdk/{esp32s2/include/soc/soc/esp32s2/include/soc/ledc_caps.h => esp32/include/soc/soc/esp32/include/soc/gpio_pins.h} (88%) delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2c_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2s_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/mcpwm_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/mpu_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/pcnt_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/rmt_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc_io_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/sigmadelta_caps.h rename tools/sdk/esp32/include/soc/soc/esp32/include/soc/{cpu_caps.h => soc_pins.h} (61%) rename tools/sdk/esp32/include/soc/soc/esp32/include/soc/{spi_caps.h => spi_pins.h} (71%) delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/timer_group_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/touch_sensor_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/twai_caps.h delete mode 100644 tools/sdk/esp32/include/soc/soc/esp32/include/soc/uart_caps.h rename tools/sdk/esp32/include/soc/soc/esp32/{i2c_apll.h => private_include/regi2c_apll.h} (97%) rename tools/sdk/esp32/include/soc/soc/esp32/{i2c_bbpll.h => private_include/regi2c_bbpll.h} (98%) rename tools/sdk/esp32/include/soc/src/esp32/{i2c_rtc_clk.h => regi2c_ctrl.h} (85%) create mode 100644 tools/sdk/esp32/lib/libesp_littlefs.a create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/include/esp_littlefs.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs/bd/lfs_filebd.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs/bd/lfs_rambd.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs/bd/lfs_testbd.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs/lfs.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs/lfs_util.h create mode 100644 tools/sdk/esp32s2/include/esp_littlefs/src/littlefs_api.h create mode 100644 tools/sdk/esp32s2/include/freertos/include/freertos/atomic.h create mode 100644 tools/sdk/esp32s2/include/freertos/include/freertos/message_buffer.h delete mode 100644 tools/sdk/esp32s2/include/freertos/include/freertos/porttrace.h rename tools/sdk/esp32s2/include/freertos/include/freertos/{StackMacros.h => stack_macros.h} (59%) create mode 100644 tools/sdk/esp32s2/include/freertos/include/freertos/stream_buffer.h rename tools/sdk/{esp32/include/soc/soc/esp32/include/soc/brownout_caps.h => esp32s2/include/hal/esp32s2/include/hal/adc_hal_conf.h} (55%) delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/adc_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/dac_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/gpio_caps.h rename tools/sdk/{esp32/include/soc/soc/esp32/include/soc/ledc_caps.h => esp32s2/include/soc/soc/esp32s2/include/soc/gpio_pins.h} (88%) delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/i2c_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/i2s_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/mpu_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/pcnt_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/rmt_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/rtc_io_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/sigmadelta_caps.h rename tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/{cpu_caps.h => soc_pins.h} (61%) delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/spi_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/systimer_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/timer_group_caps.h rename tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/{touch_sensor_caps.h => touch_sensor_pins.h} (70%) delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/twai_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/uart_caps.h delete mode 100644 tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/usb_caps.h rename tools/sdk/esp32s2/include/soc/soc/esp32s2/{i2c_apll.h => private_include/regi2c_apll.h} (97%) rename tools/sdk/esp32s2/include/soc/soc/esp32s2/{i2c_bbpll.h => private_include/regi2c_bbpll.h} (98%) rename tools/sdk/esp32s2/include/soc/{src/esp32s2/i2c_brownout.h => soc/esp32s2/private_include/regi2c_brownout.h} (90%) rename tools/sdk/esp32s2/include/soc/soc/esp32s2/{i2c_saradc.h => private_include/regi2c_saradc.h} (90%) rename tools/sdk/esp32s2/include/soc/soc/esp32s2/{i2c_ulp.h => private_include/regi2c_ulp.h} (92%) rename tools/sdk/esp32s2/include/soc/src/esp32s2/{i2c_rtc_clk.h => regi2c_ctrl.h} (78%) create mode 100644 tools/sdk/esp32s2/lib/libesp_littlefs.a diff --git a/cores/esp32/esp32-hal-gpio.c b/cores/esp32/esp32-hal-gpio.c index c8393591..6ed48ee7 100644 --- a/cores/esp32/esp32-hal-gpio.c +++ b/cores/esp32/esp32-hal-gpio.c @@ -50,7 +50,7 @@ const int8_t esp32_adc2gpio[20] = {36, 37, 38, 39, 32, 33, 34, 35, -1, -1, 4, 0, const int8_t esp32_adc2gpio[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; #endif -const DRAM_ATTR esp32_gpioMux_t esp32_gpioMux[GPIO_PIN_COUNT]={ +const DRAM_ATTR esp32_gpioMux_t esp32_gpioMux[SOC_GPIO_PIN_COUNT]={ #if CONFIG_IDF_TARGET_ESP32 {0x44, 11, 11, 1}, {0x88, -1, -1, -1}, @@ -151,7 +151,7 @@ typedef struct { void* arg; bool functional; } InterruptHandle_t; -static InterruptHandle_t __pinInterruptHandlers[GPIO_PIN_COUNT] = {0,}; +static InterruptHandle_t __pinInterruptHandlers[SOC_GPIO_PIN_COUNT] = {0,}; #include "driver/rtc_io.h" @@ -172,7 +172,7 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode) SENS.sar_io_mux_conf.iomux_clk_gate_en = 1; #endif SET_PERI_REG_MASK(rtc_io_desc[rtc_io].reg, (rtc_io_desc[rtc_io].mux)); - SET_PERI_REG_BITS(rtc_io_desc[rtc_io].reg, RTC_IO_TOUCH_PAD1_FUN_SEL_V, SOC_PIN_FUNC_RTC_IO, rtc_io_desc[rtc_io].func); + SET_PERI_REG_BITS(rtc_io_desc[rtc_io].reg, RTC_IO_TOUCH_PAD1_FUN_SEL_V, 0, rtc_io_desc[rtc_io].func); RTCIO.pin[rtc_io].pad_driver = 0;//OD = 1 RTCIO.enable_w1tc.w1tc = (1U << rtc_io); diff --git a/cores/esp32/esp32-hal-gpio.h b/cores/esp32/esp32-hal-gpio.h index b5f5b1fd..f3a61ff9 100644 --- a/cores/esp32/esp32-hal-gpio.h +++ b/cores/esp32/esp32-hal-gpio.h @@ -25,7 +25,7 @@ extern "C" { #endif #include "esp32-hal.h" -#include "soc/gpio_caps.h" +#include "soc/soc_caps.h" #if (CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3) #define NUM_OUPUT_PINS 45 @@ -75,14 +75,14 @@ typedef struct { int8_t touch; /*!< Touch Channel number (-1 if not Touch pin) */ } esp32_gpioMux_t; -extern const esp32_gpioMux_t esp32_gpioMux[GPIO_PIN_COUNT]; +extern const esp32_gpioMux_t esp32_gpioMux[SOC_GPIO_PIN_COUNT]; extern const int8_t esp32_adc2gpio[20]; -#define digitalPinIsValid(pin) ((pin) < GPIO_PIN_COUNT && esp32_gpioMux[(pin)].reg) +#define digitalPinIsValid(pin) ((pin) < SOC_GPIO_PIN_COUNT && esp32_gpioMux[(pin)].reg) #define digitalPinCanOutput(pin) ((pin) < NUM_OUPUT_PINS && esp32_gpioMux[(pin)].reg) -#define digitalPinToRtcPin(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].rtc:-1) -#define digitalPinToAnalogChannel(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].adc:-1) -#define digitalPinToTouchChannel(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].touch:-1) +#define digitalPinToRtcPin(pin) (((pin) < SOC_GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].rtc:-1) +#define digitalPinToAnalogChannel(pin) (((pin) < SOC_GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].adc:-1) +#define digitalPinToTouchChannel(pin) (((pin) < SOC_GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].touch:-1) #define digitalPinToDacChannel(pin) (((pin) == PIN_DAC1)?0:((pin) == PIN_DAC2)?1:-1) void pinMode(uint8_t pin, uint8_t mode); diff --git a/platform.txt b/platform.txt index 8dffa1b2..7ecf54ab 100644 --- a/platform.txt +++ b/platform.txt @@ -22,8 +22,8 @@ compiler.prefix=xtensa-{build.mcu}-elf- # # ESP32 Support Start # -compiler.cpreprocessor.flags.esp32=-DHAVE_CONFIG_H -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE -DIDF_VER="v4.3-dev-1472-g0b71a0a46-dirty" -DESP_PLATFORM "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/newlib/platform_include" "-I{compiler.sdk.path}/include/freertos/include" "-I{compiler.sdk.path}/include/freertos/xtensa/include" "-I{compiler.sdk.path}/include/heap/include" "-I{compiler.sdk.path}/include/log/include" "-I{compiler.sdk.path}/include/lwip/include/apps" "-I{compiler.sdk.path}/include/lwip/include/apps/sntp" "-I{compiler.sdk.path}/include/lwip/lwip/src/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include/arch" "-I{compiler.sdk.path}/include/soc/include" "-I{compiler.sdk.path}/include/soc/src/esp32" "-I{compiler.sdk.path}/include/hal/esp32/include" "-I{compiler.sdk.path}/include/hal/include" "-I{compiler.sdk.path}/include/esp_rom/include" "-I{compiler.sdk.path}/include/esp_common/include" "-I{compiler.sdk.path}/include/esp_system/include" "-I{compiler.sdk.path}/include/xtensa/include" "-I{compiler.sdk.path}/include/xtensa/esp32/include" "-I{compiler.sdk.path}/include/esp32/include" "-I{compiler.sdk.path}/include/driver/include" "-I{compiler.sdk.path}/include/driver/esp32/include" "-I{compiler.sdk.path}/include/esp_ringbuf/include" "-I{compiler.sdk.path}/include/efuse/include" "-I{compiler.sdk.path}/include/efuse/esp32/include" "-I{compiler.sdk.path}/include/espcoredump/include" "-I{compiler.sdk.path}/include/esp_timer/include" "-I{compiler.sdk.path}/include/esp_ipc/include" "-I{compiler.sdk.path}/include/esp_pm/include" "-I{compiler.sdk.path}/include/soc/soc/esp32" "-I{compiler.sdk.path}/include/soc/soc/esp32/include" "-I{compiler.sdk.path}/include/soc/soc/include" "-I{compiler.sdk.path}/include/vfs/include" "-I{compiler.sdk.path}/include/esp_wifi/include" "-I{compiler.sdk.path}/include/esp_wifi/esp32/include" "-I{compiler.sdk.path}/include/esp_event/include" "-I{compiler.sdk.path}/include/esp_netif/include" "-I{compiler.sdk.path}/include/esp_eth/include" "-I{compiler.sdk.path}/include/tcpip_adapter/include" "-I{compiler.sdk.path}/include/app_trace/include" "-I{compiler.sdk.path}/include/mbedtls/port/include" "-I{compiler.sdk.path}/include/mbedtls/mbedtls/include" "-I{compiler.sdk.path}/include/mbedtls/esp_crt_bundle/include" "-I{compiler.sdk.path}/include/bootloader_support/include" "-I{compiler.sdk.path}/include/app_update/include" "-I{compiler.sdk.path}/include/spi_flash/include" "-I{compiler.sdk.path}/include/nvs_flash/include" "-I{compiler.sdk.path}/include/pthread/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include" "-I{compiler.sdk.path}/include/wpa_supplicant/port/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include/esp_supplicant" "-I{compiler.sdk.path}/include/perfmon/include" "-I{compiler.sdk.path}/include/asio/asio/asio/include" "-I{compiler.sdk.path}/include/asio/port/include" "-I{compiler.sdk.path}/include/bt/include" "-I{compiler.sdk.path}/include/bt/common/osi/include" "-I{compiler.sdk.path}/include/bt/host/bluedroid/api/include/api" "-I{compiler.sdk.path}/include/cbor/port/include" "-I{compiler.sdk.path}/include/unity/include" "-I{compiler.sdk.path}/include/unity/unity/src" "-I{compiler.sdk.path}/include/unity/unity/extras/fixture/src" "-I{compiler.sdk.path}/include/cmock/CMock/src" "-I{compiler.sdk.path}/include/coap/port/include" "-I{compiler.sdk.path}/include/coap/port/include/coap" "-I{compiler.sdk.path}/include/coap/libcoap/include" "-I{compiler.sdk.path}/include/coap/libcoap/include/coap2" "-I{compiler.sdk.path}/include/console" "-I{compiler.sdk.path}/include/nghttp/port/include" "-I{compiler.sdk.path}/include/nghttp/nghttp2/lib/includes" "-I{compiler.sdk.path}/include/esp-tls" "-I{compiler.sdk.path}/include/esp_adc_cal/include" "-I{compiler.sdk.path}/include/esp_gdbstub/include" "-I{compiler.sdk.path}/include/esp_hid/include" "-I{compiler.sdk.path}/include/tcp_transport/include" "-I{compiler.sdk.path}/include/esp_http_client/include" "-I{compiler.sdk.path}/include/esp_http_server/include" "-I{compiler.sdk.path}/include/esp_https_ota/include" "-I{compiler.sdk.path}/include/protobuf-c/protobuf-c" "-I{compiler.sdk.path}/include/protocomm/include/common" "-I{compiler.sdk.path}/include/protocomm/include/security" "-I{compiler.sdk.path}/include/protocomm/include/transports" "-I{compiler.sdk.path}/include/mdns/include" "-I{compiler.sdk.path}/include/esp_local_ctrl/include" "-I{compiler.sdk.path}/include/sdmmc/include" "-I{compiler.sdk.path}/include/esp_serial_slave_link/include" "-I{compiler.sdk.path}/include/esp_websocket_client/include" "-I{compiler.sdk.path}/include/expat/expat/expat/lib" "-I{compiler.sdk.path}/include/expat/port/include" "-I{compiler.sdk.path}/include/wear_levelling/include" "-I{compiler.sdk.path}/include/fatfs/diskio" "-I{compiler.sdk.path}/include/fatfs/vfs" "-I{compiler.sdk.path}/include/fatfs/src" "-I{compiler.sdk.path}/include/freemodbus/common/include" "-I{compiler.sdk.path}/include/idf_test/include" "-I{compiler.sdk.path}/include/idf_test/include/esp32" "-I{compiler.sdk.path}/include/jsmn/include" "-I{compiler.sdk.path}/include/json/cJSON" "-I{compiler.sdk.path}/include/libsodium/libsodium/src/libsodium/include" "-I{compiler.sdk.path}/include/libsodium/port_include" "-I{compiler.sdk.path}/include/mqtt/esp-mqtt/include" "-I{compiler.sdk.path}/include/openssl/include" "-I{compiler.sdk.path}/include/spiffs/include" "-I{compiler.sdk.path}/include/ulp/include" "-I{compiler.sdk.path}/include/wifi_provisioning/include" "-I{compiler.sdk.path}/include/esp-face/face_detection/include" "-I{compiler.sdk.path}/include/esp-face/face_recognition/include" "-I{compiler.sdk.path}/include/esp-face/object_detection/include" "-I{compiler.sdk.path}/include/esp-face/image_util/include" "-I{compiler.sdk.path}/include/esp-face/pose_estimation/include" "-I{compiler.sdk.path}/include/esp-face/lib/include" "-I{compiler.sdk.path}/include/esp32-camera/driver/include" "-I{compiler.sdk.path}/include/esp32-camera/conversions/include" "-I{compiler.sdk.path}/include/fb_gfx/include" -compiler.c.elf.libs.esp32=-lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lasio -lbt -lcbor -lunity -lcmock -lcoap -lconsole -lnghttp -lesp-tls -lesp_adc_cal -lesp_gdbstub -lesp_hid -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lprotobuf-c -lprotocomm -lmdns -lesp_local_ctrl -lsdmmc -lesp_serial_slave_link -lesp_websocket_client -lexpat -lwear_levelling -lfatfs -lfreemodbus -ljsmn -ljson -llibsodium -lmqtt -lopenssl -lspiffs -lulp -lwifi_provisioning -lesp-face -lesp32-camera -lfb_gfx -lasio -lcbor -lcmock -lunity -lcoap -lesp_gdbstub -lesp_hid -lesp_local_ctrl -lesp_websocket_client -lexpat -lfreemodbus -ljsmn -llibsodium -lmqtt -lwifi_provisioning -lprotocomm -lprotobuf-c -ljson -lesp-face -lpe -lfd -lfr -ldetection_cat_face -ldetection -ldl -lesp32-camera -lfb_gfx -lbt -lbtdm_app -lesp_adc_cal -lmdns -lconsole -lfatfs -lwear_levelling -lopenssl -lspiffs -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxt_hal -lm -lnewlib -lgcc -lstdc++ -lpthread -lapp_trace -lgcov -lapp_trace -lgcov -lc +compiler.cpreprocessor.flags.esp32=-DHAVE_CONFIG_H -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE -DIDF_VER="v4.3-dev-1561-g357a27760-dirty" -DESP_PLATFORM "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/newlib/platform_include" "-I{compiler.sdk.path}/include/freertos/include" "-I{compiler.sdk.path}/include/freertos/xtensa/include" "-I{compiler.sdk.path}/include/heap/include" "-I{compiler.sdk.path}/include/log/include" "-I{compiler.sdk.path}/include/lwip/include/apps" "-I{compiler.sdk.path}/include/lwip/include/apps/sntp" "-I{compiler.sdk.path}/include/lwip/lwip/src/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include/arch" "-I{compiler.sdk.path}/include/soc/include" "-I{compiler.sdk.path}/include/soc/src/esp32" "-I{compiler.sdk.path}/include/hal/esp32/include" "-I{compiler.sdk.path}/include/hal/include" "-I{compiler.sdk.path}/include/esp_rom/include" "-I{compiler.sdk.path}/include/esp_common/include" "-I{compiler.sdk.path}/include/esp_system/include" "-I{compiler.sdk.path}/include/xtensa/include" "-I{compiler.sdk.path}/include/xtensa/esp32/include" "-I{compiler.sdk.path}/include/esp32/include" "-I{compiler.sdk.path}/include/driver/include" "-I{compiler.sdk.path}/include/driver/esp32/include" "-I{compiler.sdk.path}/include/esp_ringbuf/include" "-I{compiler.sdk.path}/include/efuse/include" "-I{compiler.sdk.path}/include/efuse/esp32/include" "-I{compiler.sdk.path}/include/espcoredump/include" "-I{compiler.sdk.path}/include/esp_timer/include" "-I{compiler.sdk.path}/include/esp_ipc/include" "-I{compiler.sdk.path}/include/esp_pm/include" "-I{compiler.sdk.path}/include/soc/soc/esp32/include" "-I{compiler.sdk.path}/include/soc/soc/include" "-I{compiler.sdk.path}/include/soc/soc/esp32/private_include" "-I{compiler.sdk.path}/include/vfs/include" "-I{compiler.sdk.path}/include/esp_wifi/include" "-I{compiler.sdk.path}/include/esp_wifi/esp32/include" "-I{compiler.sdk.path}/include/esp_event/include" "-I{compiler.sdk.path}/include/esp_netif/include" "-I{compiler.sdk.path}/include/esp_eth/include" "-I{compiler.sdk.path}/include/tcpip_adapter/include" "-I{compiler.sdk.path}/include/app_trace/include" "-I{compiler.sdk.path}/include/mbedtls/port/include" "-I{compiler.sdk.path}/include/mbedtls/mbedtls/include" "-I{compiler.sdk.path}/include/mbedtls/esp_crt_bundle/include" "-I{compiler.sdk.path}/include/bootloader_support/include" "-I{compiler.sdk.path}/include/app_update/include" "-I{compiler.sdk.path}/include/spi_flash/include" "-I{compiler.sdk.path}/include/nvs_flash/include" "-I{compiler.sdk.path}/include/pthread/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include" "-I{compiler.sdk.path}/include/wpa_supplicant/port/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include/esp_supplicant" "-I{compiler.sdk.path}/include/perfmon/include" "-I{compiler.sdk.path}/include/asio/asio/asio/include" "-I{compiler.sdk.path}/include/asio/port/include" "-I{compiler.sdk.path}/include/bt/include" "-I{compiler.sdk.path}/include/bt/common/osi/include" "-I{compiler.sdk.path}/include/bt/host/bluedroid/api/include/api" "-I{compiler.sdk.path}/include/cbor/port/include" "-I{compiler.sdk.path}/include/unity/include" "-I{compiler.sdk.path}/include/unity/unity/src" "-I{compiler.sdk.path}/include/unity/unity/extras/fixture/src" "-I{compiler.sdk.path}/include/cmock/CMock/src" "-I{compiler.sdk.path}/include/coap/port/include" "-I{compiler.sdk.path}/include/coap/port/include/coap" "-I{compiler.sdk.path}/include/coap/libcoap/include" "-I{compiler.sdk.path}/include/coap/libcoap/include/coap2" "-I{compiler.sdk.path}/include/console" "-I{compiler.sdk.path}/include/nghttp/port/include" "-I{compiler.sdk.path}/include/nghttp/nghttp2/lib/includes" "-I{compiler.sdk.path}/include/esp-tls" "-I{compiler.sdk.path}/include/esp_adc_cal/include" "-I{compiler.sdk.path}/include/esp_gdbstub/include" "-I{compiler.sdk.path}/include/esp_hid/include" "-I{compiler.sdk.path}/include/tcp_transport/include" "-I{compiler.sdk.path}/include/esp_http_client/include" "-I{compiler.sdk.path}/include/esp_http_server/include" "-I{compiler.sdk.path}/include/esp_https_ota/include" "-I{compiler.sdk.path}/include/protobuf-c/protobuf-c" "-I{compiler.sdk.path}/include/protocomm/include/common" "-I{compiler.sdk.path}/include/protocomm/include/security" "-I{compiler.sdk.path}/include/protocomm/include/transports" "-I{compiler.sdk.path}/include/mdns/include" "-I{compiler.sdk.path}/include/esp_local_ctrl/include" "-I{compiler.sdk.path}/include/sdmmc/include" "-I{compiler.sdk.path}/include/esp_serial_slave_link/include" "-I{compiler.sdk.path}/include/esp_websocket_client/include" "-I{compiler.sdk.path}/include/expat/expat/expat/lib" "-I{compiler.sdk.path}/include/expat/port/include" "-I{compiler.sdk.path}/include/wear_levelling/include" "-I{compiler.sdk.path}/include/fatfs/diskio" "-I{compiler.sdk.path}/include/fatfs/vfs" "-I{compiler.sdk.path}/include/fatfs/src" "-I{compiler.sdk.path}/include/freemodbus/common/include" "-I{compiler.sdk.path}/include/idf_test/include" "-I{compiler.sdk.path}/include/idf_test/include/esp32" "-I{compiler.sdk.path}/include/jsmn/include" "-I{compiler.sdk.path}/include/json/cJSON" "-I{compiler.sdk.path}/include/libsodium/libsodium/src/libsodium/include" "-I{compiler.sdk.path}/include/libsodium/port_include" "-I{compiler.sdk.path}/include/mqtt/esp-mqtt/include" "-I{compiler.sdk.path}/include/openssl/include" "-I{compiler.sdk.path}/include/spiffs/include" "-I{compiler.sdk.path}/include/ulp/include" "-I{compiler.sdk.path}/include/wifi_provisioning/include" "-I{compiler.sdk.path}/include/esp-face/face_detection/include" "-I{compiler.sdk.path}/include/esp-face/face_recognition/include" "-I{compiler.sdk.path}/include/esp-face/object_detection/include" "-I{compiler.sdk.path}/include/esp-face/image_util/include" "-I{compiler.sdk.path}/include/esp-face/pose_estimation/include" "-I{compiler.sdk.path}/include/esp-face/lib/include" "-I{compiler.sdk.path}/include/esp32-camera/driver/include" "-I{compiler.sdk.path}/include/esp32-camera/conversions/include" "-I{compiler.sdk.path}/include/esp_littlefs/src" "-I{compiler.sdk.path}/include/esp_littlefs/include" "-I{compiler.sdk.path}/include/fb_gfx/include" +compiler.c.elf.libs.esp32=-lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lasio -lbt -lcbor -lunity -lcmock -lcoap -lconsole -lnghttp -lesp-tls -lesp_adc_cal -lesp_gdbstub -lesp_hid -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lprotobuf-c -lprotocomm -lmdns -lesp_local_ctrl -lsdmmc -lesp_serial_slave_link -lesp_websocket_client -lexpat -lwear_levelling -lfatfs -lfreemodbus -ljsmn -ljson -llibsodium -lmqtt -lopenssl -lspiffs -lulp -lwifi_provisioning -lesp-face -lesp32-camera -lesp_littlefs -lfb_gfx -lasio -lcbor -lcmock -lunity -lcoap -lesp_gdbstub -lesp_hid -lesp_local_ctrl -lesp_websocket_client -lexpat -lfreemodbus -ljsmn -llibsodium -lmqtt -lwifi_provisioning -lprotocomm -lprotobuf-c -ljson -lesp-face -lpe -lfd -lfr -ldetection_cat_face -ldetection -ldl -lesp32-camera -lesp_littlefs -lfb_gfx -lbt -lbtdm_app -lesp_adc_cal -lmdns -lconsole -lfatfs -lwear_levelling -lopenssl -lspiffs -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lperfmon -lesp32 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxt_hal -lm -lnewlib -lgcc -lstdc++ -lpthread -lapp_trace -lgcov -lapp_trace -lgcov -lc compiler.c.flags.esp32=-mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -O2 -fstack-protector -std=gnu99 -Wno-old-style-declaration -MMD -c compiler.cpp.flags.esp32=-mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -O2 -fstack-protector -std=gnu++11 -fexceptions -fno-rtti -MMD -c compiler.S.flags.esp32=-ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -O2 -fstack-protector -x assembler-with-cpp -MMD -c @@ -37,8 +37,8 @@ build.extra_flags.esp32=-DARDUINO_SERIAL_PORT=0 # # ESP32S2 Support Start # -compiler.cpreprocessor.flags.esp32s2=-DHAVE_CONFIG_H -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE -DIDF_VER="v4.3-dev-1472-g0b71a0a46-dirty" -DESP_PLATFORM "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/newlib/platform_include" "-I{compiler.sdk.path}/include/freertos/include" "-I{compiler.sdk.path}/include/freertos/xtensa/include" "-I{compiler.sdk.path}/include/heap/include" "-I{compiler.sdk.path}/include/log/include" "-I{compiler.sdk.path}/include/lwip/include/apps" "-I{compiler.sdk.path}/include/lwip/include/apps/sntp" "-I{compiler.sdk.path}/include/lwip/lwip/src/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include/arch" "-I{compiler.sdk.path}/include/soc/include" "-I{compiler.sdk.path}/include/soc/src/esp32s2" "-I{compiler.sdk.path}/include/soc/src/esp32s2/include" "-I{compiler.sdk.path}/include/hal/esp32s2/include" "-I{compiler.sdk.path}/include/hal/include" "-I{compiler.sdk.path}/include/esp_rom/include" "-I{compiler.sdk.path}/include/esp_common/include" "-I{compiler.sdk.path}/include/esp_system/include" "-I{compiler.sdk.path}/include/xtensa/include" "-I{compiler.sdk.path}/include/xtensa/esp32s2/include" "-I{compiler.sdk.path}/include/esp32s2/include" "-I{compiler.sdk.path}/include/driver/include" "-I{compiler.sdk.path}/include/driver/esp32s2/include" "-I{compiler.sdk.path}/include/esp_ringbuf/include" "-I{compiler.sdk.path}/include/efuse/include" "-I{compiler.sdk.path}/include/efuse/esp32s2/include" "-I{compiler.sdk.path}/include/espcoredump/include" "-I{compiler.sdk.path}/include/esp_timer/include" "-I{compiler.sdk.path}/include/esp_ipc/include" "-I{compiler.sdk.path}/include/esp_pm/include" "-I{compiler.sdk.path}/include/soc/soc/esp32s2" "-I{compiler.sdk.path}/include/soc/soc/esp32s2/include" "-I{compiler.sdk.path}/include/soc/soc/include" "-I{compiler.sdk.path}/include/vfs/include" "-I{compiler.sdk.path}/include/esp_wifi/include" "-I{compiler.sdk.path}/include/esp_wifi/esp32s2/include" "-I{compiler.sdk.path}/include/esp_event/include" "-I{compiler.sdk.path}/include/esp_netif/include" "-I{compiler.sdk.path}/include/esp_eth/include" "-I{compiler.sdk.path}/include/tcpip_adapter/include" "-I{compiler.sdk.path}/include/app_trace/include" "-I{compiler.sdk.path}/include/mbedtls/port/include" "-I{compiler.sdk.path}/include/mbedtls/mbedtls/include" "-I{compiler.sdk.path}/include/mbedtls/esp_crt_bundle/include" "-I{compiler.sdk.path}/include/bootloader_support/include" "-I{compiler.sdk.path}/include/app_update/include" "-I{compiler.sdk.path}/include/spi_flash/include" "-I{compiler.sdk.path}/include/nvs_flash/include" "-I{compiler.sdk.path}/include/pthread/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include" "-I{compiler.sdk.path}/include/wpa_supplicant/port/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include/esp_supplicant" "-I{compiler.sdk.path}/include/asio/asio/asio/include" "-I{compiler.sdk.path}/include/asio/port/include" "-I{compiler.sdk.path}/include/cbor/port/include" "-I{compiler.sdk.path}/include/unity/include" "-I{compiler.sdk.path}/include/unity/unity/src" "-I{compiler.sdk.path}/include/unity/unity/extras/fixture/src" "-I{compiler.sdk.path}/include/cmock/CMock/src" "-I{compiler.sdk.path}/include/coap/port/include" "-I{compiler.sdk.path}/include/coap/port/include/coap" "-I{compiler.sdk.path}/include/coap/libcoap/include" "-I{compiler.sdk.path}/include/coap/libcoap/include/coap2" "-I{compiler.sdk.path}/include/console" "-I{compiler.sdk.path}/include/nghttp/port/include" "-I{compiler.sdk.path}/include/nghttp/nghttp2/lib/includes" "-I{compiler.sdk.path}/include/esp-tls" "-I{compiler.sdk.path}/include/esp_adc_cal/include" "-I{compiler.sdk.path}/include/esp_gdbstub/include" "-I{compiler.sdk.path}/include/esp_hid/include" "-I{compiler.sdk.path}/include/tcp_transport/include" "-I{compiler.sdk.path}/include/esp_http_client/include" "-I{compiler.sdk.path}/include/esp_http_server/include" "-I{compiler.sdk.path}/include/esp_https_ota/include" "-I{compiler.sdk.path}/include/esp_https_server/include" "-I{compiler.sdk.path}/include/protobuf-c/protobuf-c" "-I{compiler.sdk.path}/include/protocomm/include/common" "-I{compiler.sdk.path}/include/protocomm/include/security" "-I{compiler.sdk.path}/include/protocomm/include/transports" "-I{compiler.sdk.path}/include/mdns/include" "-I{compiler.sdk.path}/include/esp_local_ctrl/include" "-I{compiler.sdk.path}/include/sdmmc/include" "-I{compiler.sdk.path}/include/esp_serial_slave_link/include" "-I{compiler.sdk.path}/include/esp_websocket_client/include" "-I{compiler.sdk.path}/include/expat/expat/expat/lib" "-I{compiler.sdk.path}/include/expat/port/include" "-I{compiler.sdk.path}/include/wear_levelling/include" "-I{compiler.sdk.path}/include/fatfs/diskio" "-I{compiler.sdk.path}/include/fatfs/vfs" "-I{compiler.sdk.path}/include/fatfs/src" "-I{compiler.sdk.path}/include/freemodbus/common/include" "-I{compiler.sdk.path}/include/idf_test/include" "-I{compiler.sdk.path}/include/idf_test/include/esp32s2" "-I{compiler.sdk.path}/include/jsmn/include" "-I{compiler.sdk.path}/include/json/cJSON" "-I{compiler.sdk.path}/include/libsodium/libsodium/src/libsodium/include" "-I{compiler.sdk.path}/include/libsodium/port_include" "-I{compiler.sdk.path}/include/mqtt/esp-mqtt/include" "-I{compiler.sdk.path}/include/openssl/include" "-I{compiler.sdk.path}/include/perfmon/include" "-I{compiler.sdk.path}/include/spiffs/include" "-I{compiler.sdk.path}/include/freertos/include/freertos" "-I{compiler.sdk.path}/include/tinyusb/tinyusb/src" "-I{compiler.sdk.path}/include/tinyusb/additions/include" "-I{compiler.sdk.path}/include/ulp/include" "-I{compiler.sdk.path}/include/wifi_provisioning/include" "-I{compiler.sdk.path}/include/esp-face/face_detection/include" "-I{compiler.sdk.path}/include/esp-face/face_recognition/include" "-I{compiler.sdk.path}/include/esp-face/object_detection/include" "-I{compiler.sdk.path}/include/esp-face/image_util/include" "-I{compiler.sdk.path}/include/esp-face/pose_estimation/include" "-I{compiler.sdk.path}/include/esp-face/lib/include" "-I{compiler.sdk.path}/include/fb_gfx/include" -compiler.c.elf.libs.esp32s2=-lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lasio -lcbor -lunity -lcmock -lcoap -lconsole -lnghttp -lesp-tls -lesp_adc_cal -lesp_gdbstub -lesp_hid -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lesp_https_server -lprotobuf-c -lprotocomm -lmdns -lesp_local_ctrl -lsdmmc -lesp_serial_slave_link -lesp_websocket_client -lexpat -lwear_levelling -lfatfs -lfreemodbus -ljsmn -ljson -llibsodium -lmqtt -lopenssl -lperfmon -lspiffs -lulp -lwifi_provisioning -lesp-face -lfb_gfx -lasio -lcbor -lcmock -lunity -lcoap -lesp_gdbstub -lesp_hid -lesp_local_ctrl -lesp_https_server -lesp_websocket_client -lexpat -lfreemodbus -ljsmn -llibsodium -lmqtt -lperfmon -lwifi_provisioning -lprotocomm -lprotobuf-c -ljson -lesp-face -lpe -lfd -lfr -ldetection_cat_face -ldetection -ldl -lfb_gfx -lesp_adc_cal -lmdns -lconsole -lfatfs -lwear_levelling -lopenssl -lspiffs -ltinyusb -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxt_hal -lesp32s2 -lm -lnewlib -lgcc -lstdc++ -lpthread -lapp_trace -lgcov -lapp_trace -lgcov -lc +compiler.cpreprocessor.flags.esp32s2=-DHAVE_CONFIG_H -DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -D_GNU_SOURCE -DIDF_VER="v4.3-dev-1561-g357a27760-dirty" -DESP_PLATFORM "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/newlib/platform_include" "-I{compiler.sdk.path}/include/freertos/include" "-I{compiler.sdk.path}/include/freertos/xtensa/include" "-I{compiler.sdk.path}/include/heap/include" "-I{compiler.sdk.path}/include/log/include" "-I{compiler.sdk.path}/include/lwip/include/apps" "-I{compiler.sdk.path}/include/lwip/include/apps/sntp" "-I{compiler.sdk.path}/include/lwip/lwip/src/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include" "-I{compiler.sdk.path}/include/lwip/port/esp32/include/arch" "-I{compiler.sdk.path}/include/soc/include" "-I{compiler.sdk.path}/include/soc/src/esp32s2" "-I{compiler.sdk.path}/include/soc/src/esp32s2/include" "-I{compiler.sdk.path}/include/hal/esp32s2/include" "-I{compiler.sdk.path}/include/hal/include" "-I{compiler.sdk.path}/include/esp_rom/include" "-I{compiler.sdk.path}/include/esp_common/include" "-I{compiler.sdk.path}/include/esp_system/include" "-I{compiler.sdk.path}/include/xtensa/include" "-I{compiler.sdk.path}/include/xtensa/esp32s2/include" "-I{compiler.sdk.path}/include/esp32s2/include" "-I{compiler.sdk.path}/include/driver/include" "-I{compiler.sdk.path}/include/driver/esp32s2/include" "-I{compiler.sdk.path}/include/esp_ringbuf/include" "-I{compiler.sdk.path}/include/efuse/include" "-I{compiler.sdk.path}/include/efuse/esp32s2/include" "-I{compiler.sdk.path}/include/espcoredump/include" "-I{compiler.sdk.path}/include/esp_timer/include" "-I{compiler.sdk.path}/include/esp_ipc/include" "-I{compiler.sdk.path}/include/esp_pm/include" "-I{compiler.sdk.path}/include/soc/soc/esp32s2/include" "-I{compiler.sdk.path}/include/soc/soc/include" "-I{compiler.sdk.path}/include/soc/soc/esp32s2/private_include" "-I{compiler.sdk.path}/include/vfs/include" "-I{compiler.sdk.path}/include/esp_wifi/include" "-I{compiler.sdk.path}/include/esp_wifi/esp32s2/include" "-I{compiler.sdk.path}/include/esp_event/include" "-I{compiler.sdk.path}/include/esp_netif/include" "-I{compiler.sdk.path}/include/esp_eth/include" "-I{compiler.sdk.path}/include/tcpip_adapter/include" "-I{compiler.sdk.path}/include/app_trace/include" "-I{compiler.sdk.path}/include/mbedtls/port/include" "-I{compiler.sdk.path}/include/mbedtls/mbedtls/include" "-I{compiler.sdk.path}/include/mbedtls/esp_crt_bundle/include" "-I{compiler.sdk.path}/include/bootloader_support/include" "-I{compiler.sdk.path}/include/app_update/include" "-I{compiler.sdk.path}/include/spi_flash/include" "-I{compiler.sdk.path}/include/nvs_flash/include" "-I{compiler.sdk.path}/include/pthread/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include" "-I{compiler.sdk.path}/include/wpa_supplicant/port/include" "-I{compiler.sdk.path}/include/wpa_supplicant/include/esp_supplicant" "-I{compiler.sdk.path}/include/asio/asio/asio/include" "-I{compiler.sdk.path}/include/asio/port/include" "-I{compiler.sdk.path}/include/cbor/port/include" "-I{compiler.sdk.path}/include/unity/include" "-I{compiler.sdk.path}/include/unity/unity/src" "-I{compiler.sdk.path}/include/unity/unity/extras/fixture/src" "-I{compiler.sdk.path}/include/cmock/CMock/src" "-I{compiler.sdk.path}/include/coap/port/include" "-I{compiler.sdk.path}/include/coap/port/include/coap" "-I{compiler.sdk.path}/include/coap/libcoap/include" "-I{compiler.sdk.path}/include/coap/libcoap/include/coap2" "-I{compiler.sdk.path}/include/console" "-I{compiler.sdk.path}/include/nghttp/port/include" "-I{compiler.sdk.path}/include/nghttp/nghttp2/lib/includes" "-I{compiler.sdk.path}/include/esp-tls" "-I{compiler.sdk.path}/include/esp_adc_cal/include" "-I{compiler.sdk.path}/include/esp_gdbstub/include" "-I{compiler.sdk.path}/include/esp_hid/include" "-I{compiler.sdk.path}/include/tcp_transport/include" "-I{compiler.sdk.path}/include/esp_http_client/include" "-I{compiler.sdk.path}/include/esp_http_server/include" "-I{compiler.sdk.path}/include/esp_https_ota/include" "-I{compiler.sdk.path}/include/esp_https_server/include" "-I{compiler.sdk.path}/include/protobuf-c/protobuf-c" "-I{compiler.sdk.path}/include/protocomm/include/common" "-I{compiler.sdk.path}/include/protocomm/include/security" "-I{compiler.sdk.path}/include/protocomm/include/transports" "-I{compiler.sdk.path}/include/mdns/include" "-I{compiler.sdk.path}/include/esp_local_ctrl/include" "-I{compiler.sdk.path}/include/sdmmc/include" "-I{compiler.sdk.path}/include/esp_serial_slave_link/include" "-I{compiler.sdk.path}/include/esp_websocket_client/include" "-I{compiler.sdk.path}/include/expat/expat/expat/lib" "-I{compiler.sdk.path}/include/expat/port/include" "-I{compiler.sdk.path}/include/wear_levelling/include" "-I{compiler.sdk.path}/include/fatfs/diskio" "-I{compiler.sdk.path}/include/fatfs/vfs" "-I{compiler.sdk.path}/include/fatfs/src" "-I{compiler.sdk.path}/include/freemodbus/common/include" "-I{compiler.sdk.path}/include/idf_test/include" "-I{compiler.sdk.path}/include/idf_test/include/esp32s2" "-I{compiler.sdk.path}/include/jsmn/include" "-I{compiler.sdk.path}/include/json/cJSON" "-I{compiler.sdk.path}/include/libsodium/libsodium/src/libsodium/include" "-I{compiler.sdk.path}/include/libsodium/port_include" "-I{compiler.sdk.path}/include/mqtt/esp-mqtt/include" "-I{compiler.sdk.path}/include/openssl/include" "-I{compiler.sdk.path}/include/perfmon/include" "-I{compiler.sdk.path}/include/spiffs/include" "-I{compiler.sdk.path}/include/freertos/include/freertos" "-I{compiler.sdk.path}/include/tinyusb/tinyusb/src" "-I{compiler.sdk.path}/include/tinyusb/additions/include" "-I{compiler.sdk.path}/include/ulp/include" "-I{compiler.sdk.path}/include/wifi_provisioning/include" "-I{compiler.sdk.path}/include/esp-face/face_detection/include" "-I{compiler.sdk.path}/include/esp-face/face_recognition/include" "-I{compiler.sdk.path}/include/esp-face/object_detection/include" "-I{compiler.sdk.path}/include/esp-face/image_util/include" "-I{compiler.sdk.path}/include/esp-face/pose_estimation/include" "-I{compiler.sdk.path}/include/esp-face/lib/include" "-I{compiler.sdk.path}/include/esp_littlefs/src" "-I{compiler.sdk.path}/include/esp_littlefs/include" "-I{compiler.sdk.path}/include/fb_gfx/include" +compiler.c.elf.libs.esp32s2=-lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lasio -lcbor -lunity -lcmock -lcoap -lconsole -lnghttp -lesp-tls -lesp_adc_cal -lesp_gdbstub -lesp_hid -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lesp_https_server -lprotobuf-c -lprotocomm -lmdns -lesp_local_ctrl -lsdmmc -lesp_serial_slave_link -lesp_websocket_client -lexpat -lwear_levelling -lfatfs -lfreemodbus -ljsmn -ljson -llibsodium -lmqtt -lopenssl -lperfmon -lspiffs -lulp -lwifi_provisioning -lesp-face -lesp_littlefs -lfb_gfx -lasio -lcbor -lcmock -lunity -lcoap -lesp_gdbstub -lesp_hid -lesp_local_ctrl -lesp_https_server -lesp_websocket_client -lexpat -lfreemodbus -ljsmn -llibsodium -lmqtt -lperfmon -lwifi_provisioning -lprotocomm -lprotobuf-c -ljson -lesp-face -lpe -lfd -lfr -ldetection_cat_face -ldetection -ldl -lesp_littlefs -lfb_gfx -lesp_adc_cal -lmdns -lconsole -lfatfs -lwear_levelling -lopenssl -lspiffs -ltinyusb -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxtensa -lesp_pm -lmbedtls -lefuse -lbootloader_support -lapp_update -lesp_ipc -lspi_flash -lnvs_flash -lpthread -lesp_system -lesp_rom -lhal -lsoc -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -llwip -llog -lheap -lesp_ringbuf -ldriver -lespcoredump -lesp32s2 -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls -lmbedcrypto -lmbedx509 -lsoc_esp32s2 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lrtc -lsmartconfig -lphy -lxt_hal -lesp32s2 -lm -lnewlib -lgcc -lstdc++ -lpthread -lapp_trace -lgcov -lapp_trace -lgcov -lc compiler.c.flags.esp32s2=-mlongcalls -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -fstack-protector -std=gnu99 -Wno-old-style-declaration -MMD -c compiler.cpp.flags.esp32s2=-mlongcalls -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -fstack-protector -std=gnu++11 -fexceptions -fno-rtti -MMD -c compiler.S.flags.esp32s2=-ffunction-sections -fdata-sections -fstrict-volatile-bitfields -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -O2 -fstack-protector -x assembler-with-cpp -MMD -c diff --git a/tools/platformio-build-esp32.py b/tools/platformio-build-esp32.py index 877f18f3..ddad225a 100644 --- a/tools/platformio-build-esp32.py +++ b/tools/platformio-build-esp32.py @@ -137,9 +137,9 @@ env.Append( join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_timer", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_ipc", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_pm", "include"), - join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "soc", "soc", "esp32"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "soc", "soc", "esp32", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "soc", "soc", "include"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "soc", "soc", "esp32", "private_include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "vfs", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_wifi", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_wifi", "esp32", "include"), @@ -220,6 +220,8 @@ env.Append( join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp-face", "lib", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp32-camera", "driver", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp32-camera", "conversions", "include"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_littlefs", "src"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "esp_littlefs", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32", "include", "fb_gfx", "include"), join(FRAMEWORK_DIR, "cores", env.BoardConfig().get("build.core")) ], @@ -230,7 +232,7 @@ env.Append( ], LIBS=[ - "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lasio", "-lbt", "-lcbor", "-lunity", "-lcmock", "-lcoap", "-lconsole", "-lnghttp", "-lesp-tls", "-lesp_adc_cal", "-lesp_gdbstub", "-lesp_hid", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lprotobuf-c", "-lprotocomm", "-lmdns", "-lesp_local_ctrl", "-lsdmmc", "-lesp_serial_slave_link", "-lesp_websocket_client", "-lexpat", "-lwear_levelling", "-lfatfs", "-lfreemodbus", "-ljsmn", "-ljson", "-llibsodium", "-lmqtt", "-lopenssl", "-lspiffs", "-lulp", "-lwifi_provisioning", "-lesp-face", "-lesp32-camera", "-lfb_gfx", "-lasio", "-lcbor", "-lcmock", "-lunity", "-lcoap", "-lesp_gdbstub", "-lesp_hid", "-lesp_local_ctrl", "-lesp_websocket_client", "-lexpat", "-lfreemodbus", "-ljsmn", "-llibsodium", "-lmqtt", "-lwifi_provisioning", "-lprotocomm", "-lprotobuf-c", "-ljson", "-lesp-face", "-lpe", "-lfd", "-lfr", "-ldetection_cat_face", "-ldetection", "-ldl", "-lesp32-camera", "-lfb_gfx", "-lbt", "-lbtdm_app", "-lesp_adc_cal", "-lmdns", "-lconsole", "-lfatfs", "-lwear_levelling", "-lopenssl", "-lspiffs", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxt_hal", "-lm", "-lnewlib", "-lgcc", "-lstdc++", "-lpthread", "-lapp_trace", "-lgcov", "-lapp_trace", "-lgcov", "-lc" + "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lasio", "-lbt", "-lcbor", "-lunity", "-lcmock", "-lcoap", "-lconsole", "-lnghttp", "-lesp-tls", "-lesp_adc_cal", "-lesp_gdbstub", "-lesp_hid", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lprotobuf-c", "-lprotocomm", "-lmdns", "-lesp_local_ctrl", "-lsdmmc", "-lesp_serial_slave_link", "-lesp_websocket_client", "-lexpat", "-lwear_levelling", "-lfatfs", "-lfreemodbus", "-ljsmn", "-ljson", "-llibsodium", "-lmqtt", "-lopenssl", "-lspiffs", "-lulp", "-lwifi_provisioning", "-lesp-face", "-lesp32-camera", "-lesp_littlefs", "-lfb_gfx", "-lasio", "-lcbor", "-lcmock", "-lunity", "-lcoap", "-lesp_gdbstub", "-lesp_hid", "-lesp_local_ctrl", "-lesp_websocket_client", "-lexpat", "-lfreemodbus", "-ljsmn", "-llibsodium", "-lmqtt", "-lwifi_provisioning", "-lprotocomm", "-lprotobuf-c", "-ljson", "-lesp-face", "-lpe", "-lfd", "-lfr", "-ldetection_cat_face", "-ldetection", "-ldl", "-lesp32-camera", "-lesp_littlefs", "-lfb_gfx", "-lbt", "-lbtdm_app", "-lesp_adc_cal", "-lmdns", "-lconsole", "-lfatfs", "-lwear_levelling", "-lopenssl", "-lspiffs", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lperfmon", "-lesp32", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxt_hal", "-lm", "-lnewlib", "-lgcc", "-lstdc++", "-lpthread", "-lapp_trace", "-lgcov", "-lapp_trace", "-lgcov", "-lc" ], CPPDEFINES=[ @@ -239,7 +241,7 @@ env.Append( "UNITY_INCLUDE_CONFIG_H", "WITH_POSIX", "_GNU_SOURCE", - ("IDF_VER", '\\"v4.3-dev-1472-g0b71a0a46-dirty\\"'), + ("IDF_VER", '\\"v4.3-dev-1561-g357a27760-dirty\\"'), "ESP_PLATFORM", "ARDUINO_ARCH_ESP32", "ESP32", diff --git a/tools/platformio-build-esp32s2.py b/tools/platformio-build-esp32s2.py index f62fc09e..6dd2b73e 100644 --- a/tools/platformio-build-esp32s2.py +++ b/tools/platformio-build-esp32s2.py @@ -132,9 +132,9 @@ env.Append( join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_timer", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_ipc", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_pm", "include"), - join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "soc", "soc", "esp32s2"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "soc", "soc", "esp32s2", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "soc", "soc", "include"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "soc", "soc", "esp32s2", "private_include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "vfs", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_wifi", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_wifi", "esp32s2", "include"), @@ -214,6 +214,8 @@ env.Append( join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp-face", "image_util", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp-face", "pose_estimation", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp-face", "lib", "include"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_littlefs", "src"), + join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "esp_littlefs", "include"), join(FRAMEWORK_DIR, "tools", "sdk", "esp32s2", "include", "fb_gfx", "include"), join(FRAMEWORK_DIR, "cores", env.BoardConfig().get("build.core")) ], @@ -224,7 +226,7 @@ env.Append( ], LIBS=[ - "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lasio", "-lcbor", "-lunity", "-lcmock", "-lcoap", "-lconsole", "-lnghttp", "-lesp-tls", "-lesp_adc_cal", "-lesp_gdbstub", "-lesp_hid", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lesp_https_server", "-lprotobuf-c", "-lprotocomm", "-lmdns", "-lesp_local_ctrl", "-lsdmmc", "-lesp_serial_slave_link", "-lesp_websocket_client", "-lexpat", "-lwear_levelling", "-lfatfs", "-lfreemodbus", "-ljsmn", "-ljson", "-llibsodium", "-lmqtt", "-lopenssl", "-lperfmon", "-lspiffs", "-lulp", "-lwifi_provisioning", "-lesp-face", "-lfb_gfx", "-lasio", "-lcbor", "-lcmock", "-lunity", "-lcoap", "-lesp_gdbstub", "-lesp_hid", "-lesp_local_ctrl", "-lesp_https_server", "-lesp_websocket_client", "-lexpat", "-lfreemodbus", "-ljsmn", "-llibsodium", "-lmqtt", "-lperfmon", "-lwifi_provisioning", "-lprotocomm", "-lprotobuf-c", "-ljson", "-lesp-face", "-lpe", "-lfd", "-lfr", "-ldetection_cat_face", "-ldetection", "-ldl", "-lfb_gfx", "-lesp_adc_cal", "-lmdns", "-lconsole", "-lfatfs", "-lwear_levelling", "-lopenssl", "-lspiffs", "-ltinyusb", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxt_hal", "-lesp32s2", "-lm", "-lnewlib", "-lgcc", "-lstdc++", "-lpthread", "-lapp_trace", "-lgcov", "-lapp_trace", "-lgcov", "-lc" + "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lasio", "-lcbor", "-lunity", "-lcmock", "-lcoap", "-lconsole", "-lnghttp", "-lesp-tls", "-lesp_adc_cal", "-lesp_gdbstub", "-lesp_hid", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lesp_https_server", "-lprotobuf-c", "-lprotocomm", "-lmdns", "-lesp_local_ctrl", "-lsdmmc", "-lesp_serial_slave_link", "-lesp_websocket_client", "-lexpat", "-lwear_levelling", "-lfatfs", "-lfreemodbus", "-ljsmn", "-ljson", "-llibsodium", "-lmqtt", "-lopenssl", "-lperfmon", "-lspiffs", "-lulp", "-lwifi_provisioning", "-lesp-face", "-lesp_littlefs", "-lfb_gfx", "-lasio", "-lcbor", "-lcmock", "-lunity", "-lcoap", "-lesp_gdbstub", "-lesp_hid", "-lesp_local_ctrl", "-lesp_https_server", "-lesp_websocket_client", "-lexpat", "-lfreemodbus", "-ljsmn", "-llibsodium", "-lmqtt", "-lperfmon", "-lwifi_provisioning", "-lprotocomm", "-lprotobuf-c", "-ljson", "-lesp-face", "-lpe", "-lfd", "-lfr", "-ldetection_cat_face", "-ldetection", "-ldl", "-lesp_littlefs", "-lfb_gfx", "-lesp_adc_cal", "-lmdns", "-lconsole", "-lfatfs", "-lwear_levelling", "-lopenssl", "-lspiffs", "-ltinyusb", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxtensa", "-lesp_pm", "-lmbedtls", "-lefuse", "-lbootloader_support", "-lapp_update", "-lesp_ipc", "-lspi_flash", "-lnvs_flash", "-lpthread", "-lesp_system", "-lesp_rom", "-lhal", "-lsoc", "-lvfs", "-lesp_eth", "-ltcpip_adapter", "-lesp_netif", "-lesp_event", "-lwpa_supplicant", "-lesp_wifi", "-llwip", "-llog", "-lheap", "-lesp_ringbuf", "-ldriver", "-lespcoredump", "-lesp32s2", "-lesp_common", "-lesp_timer", "-lfreertos", "-lnewlib", "-lcxx", "-lapp_trace", "-lnghttp", "-lesp-tls", "-ltcp_transport", "-lesp_http_client", "-lesp_http_server", "-lesp_https_ota", "-lsdmmc", "-lesp_serial_slave_link", "-lulp", "-lmbedtls", "-lmbedcrypto", "-lmbedx509", "-lsoc_esp32s2", "-lcoexist", "-lcore", "-lespnow", "-lmesh", "-lnet80211", "-lpp", "-lrtc", "-lsmartconfig", "-lphy", "-lxt_hal", "-lesp32s2", "-lm", "-lnewlib", "-lgcc", "-lstdc++", "-lpthread", "-lapp_trace", "-lgcov", "-lapp_trace", "-lgcov", "-lc" ], CPPDEFINES=[ @@ -233,7 +235,7 @@ env.Append( "UNITY_INCLUDE_CONFIG_H", "WITH_POSIX", "_GNU_SOURCE", - ("IDF_VER", '\\"v4.3-dev-1472-g0b71a0a46-dirty\\"'), + ("IDF_VER", '\\"v4.3-dev-1561-g357a27760-dirty\\"'), "ESP_PLATFORM", "ARDUINO_ARCH_ESP32", "ESP32", diff --git a/tools/sdk/esp32/bin/bootloader_dio_40m.bin b/tools/sdk/esp32/bin/bootloader_dio_40m.bin index f3566bf369b238964dba431f9af01fc986e0d520..8773a5416bff52eab6291ec6525410050d28fb9a 100644 GIT binary patch delta 8494 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 delta 8560 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 Q`I)a?elKO_?fcp_0G4Bq8UO$Q diff --git a/tools/sdk/esp32/bin/bootloader_dio_80m.bin b/tools/sdk/esp32/bin/bootloader_dio_80m.bin index dac47a10a3731d3c6c32363dd3dd88d2118a08d8..c382db85bcf78e78bb4e0ccea5944634a86f8d64 100644 GIT binary patch delta 8430 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 diff --git a/tools/sdk/esp32/bin/bootloader_dout_40m.bin b/tools/sdk/esp32/bin/bootloader_dout_40m.bin index f3566bf369b238964dba431f9af01fc986e0d520..8773a5416bff52eab6291ec6525410050d28fb9a 100644 GIT binary patch delta 8494 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 delta 8560 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 Q`I)a?elKO_?fcp_0G4Bq8UO$Q diff --git a/tools/sdk/esp32/bin/bootloader_dout_80m.bin b/tools/sdk/esp32/bin/bootloader_dout_80m.bin index dac47a10a3731d3c6c32363dd3dd88d2118a08d8..c382db85bcf78e78bb4e0ccea5944634a86f8d64 100644 GIT binary patch delta 8430 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 diff --git a/tools/sdk/esp32/bin/bootloader_qio_40m.bin b/tools/sdk/esp32/bin/bootloader_qio_40m.bin index f3566bf369b238964dba431f9af01fc986e0d520..8773a5416bff52eab6291ec6525410050d28fb9a 100644 GIT binary patch delta 8494 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 delta 8560 zcmaFR&bXkRk@Y1DlS0l$R(Ce09^=h^Y+Q^2XBa-%Gc+(TtZ4XR|NsAg`^gV168LZb z|Nr~{|Ihy!7&sV?FnpLio!xZu1@;`K3DYLqaRf1SZ=O7fBWm&o4w=mYoGOfyEx1BN zpZ>Gqf3%)ohPQ_2fC57Y=Z6l3g%2k$ zErEeYEPNJ|TO32<`F{^M7<9S9Zb{zdI?Kfq&9kfVG)U+!(^;myY&=zsCqO(X`xuA~ zmSN@TYCH(yon_h!V($mBK{7nvJgXXagLr3|!0eqM_Fbm>vrKzgcxE+j0db-1O(6Eg zW&aY41rI1NXz(^J_}8E$@Nm(;2TBSD7yUb+z@W(slHh4j5_q7buyGz(2;@l(Zivvr zSzsYS(8TFrAuf;*CqxKjkUghj2T0-tQ$wGCWBWgc4ut~>44q7%5My#|`RC9f zU|^x(*a=c&$>hOe*#6I4go#aw0i=M}uywK@Pe^?-%&8oXN&g&_1RN9pIVge5(c}PG z$Kegox#DwaXnL=$D;kGQe)!3hE9P!850x!EldPS zc5p7}5Lg)hZvn(%oIDbXn3xwVFj=snWMcHcZ`LvltN4_~RNh*G`{}( zfP-NzOXDjL{qf0Pg@7-=jH5n(`0&;6@n0Xlv&?&0*0Nl@|M$WrfyPH5H9fo5vNS#b zv3Qt{F*EQ8HQohrl-xjJYNdKWfdLdeW{wPs=l?b_F^E+#En2|PcoC$AhfAvQ0))|c z2~2Y|If1m*{7^hQc`mdwwM1I7$QNj)VLbNZ(RGgt34p%KnH6=_<^Wk@A6L8 z0}2dmPyRC~EK+Ek4^jeR%mXnDq&F*^Wm(I%w3*SCYb{gbY>?nKV4G|gfNTk+T7h{9gxwM=tZQ_C5@S)Kf_N^sS(rdbSZAO16_ zW;3>dqRY&YVJ*|sM8=v=->kSA>p-f|&vb6dV|4Rvb`Zm{GB?2qFOI=l@+W6O=w7@-r6ZfaDiu!$fC* zbj?^8J~>)YDl_S?!YY9St3b+ERve7~J6)88d+LFi0wAQouwn;~tYS1s$%I)TB{O&M za5~&<4!FyBK!IUJg<>d3>H<{vbP*QrDFDEj?X06CCh#R^3qkb()b6cn{5-xHK) zbea55P=(QYva*m8qvm8cAr~3dzdRggxi6~zHJ>3M`{APe-%Sg256b;rDEC)&{^Vss zuKpAG{~lToiun%Cg}i@ZS!W{m--SG&kb&f>AAevHpuEhv@HdDr1Ik97oQ=#Nbu%~? z%v9LO_;>OxTjTm~eaBO_?XTwZ^O^X;d%v9LO^ytszK08^C+kY<16u5Z% z&*aT^Iu;keoC_emGr@XzAD;d5V5Y#Mr3?=sCV>jd85|c+{<$zyq2?_pL2xu4|1(+K z-c)KANLvRd%w6Do2P%`c{F(et$dGB-pUH~Cmi0|wRa_G~1V9euTG;kyV z1M=(&jtR3sj+)8Q81`qO3rHRmVGtoua^+YU_y?To8Nh)9Dpf#*t|Hj6E0`9nXHiTC z>tdQPh4sTsLB&)MuY-w)siB|sL5JXi4uuJl9SYnX-zqpJ#{X&PY*6BWXSj&Tg(C8d z0h1?+=<|C0nRG}-t2~xjm-(XSx(AsG#vt)&2i+A#oldC75V-LvU#;)HJy(hmB4`VEx>?~ozm^8UU z!caNlw-XD4*psh&ncbfL2Up@v3mVLK@Ldf3y=k%e!O-6eLnoh+h)8z?8KG$Rn}-A3 zn1Cd{M24_S3>U3`>&!lA{d=MH?^JOH2L%xaC&x335>0-~a1u$lNb*9%-=K8O73TT>!6d;4TLl;DPVSbJjZ_B-SAyCsZ7=_? zVD>idRGi7U6V!NWR026;2ICIFm7Lx)J3tBQ*xUaLWxyIhMV;GSkS8GS;{P3EeNg=O zLjK>WJPcyZT#lTR8KopN_X`IA@$?`NelQpSQ;8krc3Z#^{)r;e75lAueYpsna?uqWodj45@-AWAC!q3 zpZjL=EAd{u{Y%ID z;O$=vZ~t2Q>wmZk*Tq}EbfOPl|8?xwe;x^Q6-FKo9?5VeMjp-y8k5bWh3hZ<+O)9s z;Kg4HFaBEk?SJ9LUsaPEFaDaogQ-oCp{k^O2h%ZghP8|v&;Gj0a+Z0~t%jvP{?~Ga z?c&>b@|VLEg|o~HPy9;#{y%ILZ8j=q*9{#m) z>#uYR4g>Q88@K%0u(^Rp?k=n0-d|SrCW#w|_&;h4hqWz1)}_p+^J zTKe^WE|)Hw?1#dwzX~QdG;aDe-NK@vq@mm*a^ps@O$#^tTKfKf*elksw7(nIfrWU) z7Owr3`tHA&*Ppj+cUcdv{0tkyPIe3fB&WhK77PkLd zwP^WHfrV|8&&s%Im;Vai#>B?RcxWNRS{6`>FbCOVq$up2a+gV_XD{0d=0z!>KdhkmwiXF8_KkaUcr zf|Kxx%DGX^^|N{REZkiqdO2Q=k5u>?p6nq$)BwTi%T6>d(oG z<;|Fm|D1eVUY03!*W_RFYD`aWO;%FyX8QYMa=wCGi0a0FVO*>_JbSs;GB!qn3|h;& zmoat9|ASM0>Ts`RT-xwohucWSd>`6jS7Z6;0L^KN?s3n7lwmjAiBz#k$G6R5bEMemM4l)q?s67A#@KpaM|#!_trc!&Wf{ z_Wy8N#IQ+`VS@{(`c+b8XzcmXprqjT_&<*j+gC`rcKZ9oU*ExjG67O)b2PU6n0N~= zG_mQ&1Y=O}SaKMaPYzVo5qkZ-K}n!78)U5}M`Owl#fZuMs*-U`>G3 z_pE_QKN5Gqg%aa`BtW{UtX(0BA(QW__Ay#c&QVilG@Lv^O;$x46fP?mb-BR75vcIv zpgPEs6|4uM1R4{+Z=CskV#VZ(YT|Z%-vgk{vW22Q0<%FDbZ`Z92n0&}2!J$%xtcf` zC#`3&?r3Nz0d-BdCd?L?(4i10@FP)hvYNVfJ^PP<-5_7>mP$m=mgb@9h`x7AoW2Dc0;Y;)N0|8TzKYtgjD-hCN^*trn>gO z&A*9&g;A%nGRa)gGc)xPh62fw@j;s`wO{rM}VzyseGe))Dl0n#7s z;0n}&yMN)D?}1EUv%n#}>igv78cv~H@PL|l{afH%uskQs3lk@N4}1nPt%DO3e0?yp zI0GksPn-@?%hvE80n?FhlXvN;Gj0Di`LT`~)4Feyxph^UmVTRTq^ra<;oIaeT_vU$ zUnf`TRx(yj{-Wz2^W-Zi(Q-6Q6XmIx&~boAb7RuCfDVv5W^!*#_;xS>6pJ&s56l#3 z=v0^(2jX>tio6cajRD^_bO>xb_!ZWzYYhK3F&v~|QU)k$8$&10*Hf&&@^#Tt2XNk6 zFjE2CNtnqo(ev9%&WRo%wKF)&EBV3F3nzbtjthXgT##0*BSWLZw*yLyAHd^tGdLF7 zenaYJ&EQyQ^$khS43357AbEwE3Nl@wz7NL%g~|5%%1krAPEOHR4Uzk{P!Vh=2dW{m zAWcy944~2x+}Lj9`KF*yVqgF&MP_g;6!|9B#IkAq{tbxYVFuSmfysCE)fihQvlu8u z{QEkgLtxTUh6&Ju=zs!)8)z66G`{o-9L!8SLJe&!3K|A5-zh?ZA0*z6EI#qx*G&sS zf!M*h&|-3pfkA!LS4c}0WY`&yVH!*ddZOUsQt3Q zWN=#Opj3b8Mc|sR?!ruMRv>42uqLkhn&2Xkcann~Vmm(I1z)fGZLLJwC)pD7*;j5OW6AMESD}xdfgO4rG9v<&S z3(`74gEoz;LGHM;poM1+Sg>(9h~L3jKjDhtfpWouy9y0=6)s#T;n9IeF91p3W#h4d zaOZ%y3oZ!;KorGnTEMbsL0aQ9kg#I?*BCCR1q(pqq@b`C*5nyR3Np!{00&3lf-emdzD}RT z%ROV!`oGhySQTR@UopyH)Shf>EW>C!Im%d>QDSnPu@Q^v*M;hnw-}p9GJ^DiM}NVI zVJ%bRKae9P3QuM|iqJ5HLLb*`Pzg@E}N_lc{M9$TAJ)25|D$WL8}C#c(=E3Zj8j#t zr7sE^O`!a0=E&f<;fwhezKiR>fJOn=e_6QxORE3B!1l@KOttHmd`VpLB>_B8HG?&A z(U*jopk@cCxd=)*9juA-pt9gW-452o*&secvS0$lb*zEeV3)8SJn~shNjYc%W6}Z! zg|NvDeWC#YC20~&=~MX*wtP_&;z-kA3R7h`*z|>mcVX3+1)CQwSlo0#Q-Pte3lvhe zTnn-ko*w#thD)a_u;t5w&_m&7N<2)mAJl}H+^+s_44S;qOv1M0%UV$Dvx9Y_>6Zy$ zM?*TxO{xqNCw_*MU=WeUGoK%DfC9LK_4^B^uws@#+sWU|%ot-Q>zeD;2Z5}FHro_E zzD)E7`+*5!BzQQYgK45S)Cw5i0gZ2m#*czJpp%J53Y4p+!d$@gJ>w0iOlxFdU|`{J zn7}#tmifEM4wilO4}a|CI<#QHTE@l&|3Q-kj7v}c5UcvPmQnS}kEZo=7g#B@OWjmh zr0|rPVK4Jq#?%Kt%p4h1vl)0Y8oC71G?bdwu{CrFOj`JJLWjb{3I7`!zD!sp(6CD3 zX%Pd@s>WWBnIMZD!6WfqATHF?PYoCx+yB=qw*PnEBzUp?|E7hx2iyKHZ2vDHsIZjn zr()}W!?yqGoB1xb{@=7P?_k4!w;!MZAX`RvW8RC6|2HixI9UB3TurDO^IWX^ziDCN z!Lt8s@BcHT>N7n3`k#lZaR$gb9;wD@V4ACODwvjPoD8P98YlgKV8X$mSnwYlS{6)> z`Trdtc^6cwHG*9W%KA)>ng1P(1#&=9WXWWhKFM0Xe)f`G z@L=Il`4-IH==a~s!igC)9+?7i-GMEPj}|f*`u_ju`TwHl|AU_YS1>mwfMj^M8e{%H zkmdj>jRgs)`v2hJYSaZWZMk@)8nq|yw05i42lZ+!m<{!yv@Vp^fzsMgS_?{RLTL>s ztq!HtptLHKR)NyWP+AE}D?(`n2rX_X4`CR}foLOT2B(FLhBE&rPqmS+PZefZD$M|{ zA{Q-Sc>3|Xq9{mFlM;i{f`IQYgeNWd&?p2F>ELK+5NSH`uR*hUY1gktzW>WDLK>6= zC-VMp(qxz+Ia6>V_x}kU0ty-mnxHyR)%w?h1tJ%;7#rFCuV8FgC7`fMVI@dnsr|17 z3s@d#F*Y*(U%^-pk=Y@*2t4zoD#sxEfrqQ{IA~HWZPol^zyF&xGVm}dBnof*{!hkd zEo0+1kd!T>FViAr28S&Q(n_k%4Bp0RLGO8_*K(&i!3Lb43NSRD`nM9&3Nv$LSh)Eg z5BI^%{}!A%(6|O<1f(>qXV|#=-=zhNhZaaEEnrx<=igGsA3PEZG$t!3BtY_tYTA#5 zoBnNDz_9ei_ofAmJWMc2vqT2NEB|i4AuzYcEsx0j2DYw3;e5RdTi$n+lAqp)bf{HN?c8rS_}&=PD=auHb2P}-oR(75_v z!zzIVN(xXzRV99i29*MQzj#*jNU65}Qe5~?Vb>ysRZToh2N(RiIQ?Ja zjLBylRO_exQ_vFVVbW=m{b06`!E&PEB+zv14(1KJMKv20G^V6Uv+ID`vroN$P3-+= z#Hg$QZVq>FI(C6(jT?*=8rwiREI}=~85~B8Dj$p)K{LuT1z;U`i$()eRR^%P861vv z{~QofhV?c79BV-OJD8z!(%`Cr*|7p-I;aL?Heyt0Ed3W2464d3I1C!T7&v@&pJC2z zTyw?T#NdDeL#iGqmKHEP-T&QSvBFcEUkkJUEm+*7YX57|L4l zy7tG?*Z*y~!e0H6S?u=dKf~nrjtWAmF25Qh{&5>0P++j+@cCgF_HVMHlUOu(7J0!d z;YP!M4Mu_*jSWfy21*Ks-v11Y1RA~nDJ62WPv%&(0F*mY-~UuE;@{~0Z_xtAUB*1z z2D_S7KmAL8{4dhQb3o^DT Q`I)a?elKO_?fcp_0G4Bq8UO$Q diff --git a/tools/sdk/esp32/bin/bootloader_qio_80m.bin b/tools/sdk/esp32/bin/bootloader_qio_80m.bin index dac47a10a3731d3c6c32363dd3dd88d2118a08d8..c382db85bcf78e78bb4e0ccea5944634a86f8d64 100644 GIT binary patch delta 8430 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 diff --git a/tools/sdk/esp32/bin/bootloader_qout_40m.bin b/tools/sdk/esp32/bin/bootloader_qout_40m.bin index f3566bf369b238964dba431f9af01fc986e0d520..8773a5416bff52eab6291ec6525410050d28fb9a 100644 GIT binary patch delta 8494 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 delta 8560 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 Q`I)a?elKO_?fcp_0G4Bq8UO$Q diff --git a/tools/sdk/esp32/bin/bootloader_qout_80m.bin b/tools/sdk/esp32/bin/bootloader_qout_80m.bin index dac47a10a3731d3c6c32363dd3dd88d2118a08d8..c382db85bcf78e78bb4e0ccea5944634a86f8d64 100644 GIT binary patch delta 8430 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 diff --git a/tools/sdk/esp32/include/config/sdkconfig.h b/tools/sdk/esp32/include/config/sdkconfig.h index 216a2f70..e1dd7393 100644 --- a/tools/sdk/esp32/include/config/sdkconfig.h +++ b/tools/sdk/esp32/include/config/sdkconfig.h @@ -462,11 +462,22 @@ #define CONFIG_HD_NANO1 1 #define CONFIG_HP_NANO1 1 #define CONFIG_OV7670_SUPPORT 1 +#define CONFIG_NT99141_SUPPORT 1 #define CONFIG_OV2640_SUPPORT 1 #define CONFIG_OV3660_SUPPORT 1 #define CONFIG_OV5640_SUPPORT 1 #define CONFIG_SCCB_HARDWARE_I2C_PORT1 1 #define CONFIG_CAMERA_CORE0 1 +#define CONFIG_LITTLEFS_MAX_PARTITIONS 3 +#define CONFIG_LITTLEFS_PAGE_SIZE 256 +#define CONFIG_LITTLEFS_OBJ_NAME_LEN 64 +#define CONFIG_LITTLEFS_READ_SIZE 128 +#define CONFIG_LITTLEFS_WRITE_SIZE 128 +#define CONFIG_LITTLEFS_LOOKAHEAD_SIZE 128 +#define CONFIG_LITTLEFS_CACHE_SIZE 512 +#define CONFIG_LITTLEFS_BLOCK_CYCLES 512 +#define CONFIG_LITTLEFS_USE_MTIME 1 +#define CONFIG_LITTLEFS_MTIME_USE_SECONDS 1 /* List of deprecated options */ #define CONFIG_A2DP_ENABLE CONFIG_BT_A2DP_ENABLE @@ -581,5 +592,5 @@ #define CONFIG_ULP_COPROC_ENABLED CONFIG_ESP32_ULP_COPROC_ENABLED #define CONFIG_ULP_COPROC_RESERVE_MEM CONFIG_ESP32_ULP_COPROC_RESERVE_MEM #define CONFIG_WARN_WRITE_STRINGS CONFIG_COMPILER_WARN_WRITE_STRINGS -#define CONFIG_ARDUINO_IDF_COMMIT "" -#define CONFIG_ARDUINO_IDF_BRANCH "release/v4.2" +#define CONFIG_ARDUINO_IDF_COMMIT "357a27760" +#define CONFIG_ARDUINO_IDF_BRANCH "master" diff --git a/tools/sdk/esp32/include/driver/include/driver/gpio.h b/tools/sdk/esp32/include/driver/include/driver/gpio.h index bc3c56cd..28a5337e 100644 --- a/tools/sdk/esp32/include/driver/include/driver/gpio.h +++ b/tools/sdk/esp32/include/driver/include/driver/gpio.h @@ -19,6 +19,7 @@ #include #include "esp_attr.h" #include "esp_intr_alloc.h" +#include "soc/soc_caps.h" #include "soc/gpio_periph.h" #include "hal/gpio_types.h" @@ -40,6 +41,13 @@ extern "C" { #endif +#define GPIO_PIN_COUNT (SOC_GPIO_PIN_COUNT) +/// Check whether it is a valid GPIO number +#define GPIO_IS_VALID_GPIO(gpio_num) (((1ULL << (gpio_num)) & SOC_GPIO_VALID_GPIO_MASK) != 0) +/// Check whether it can be a valid GPIO number of output mode +#define GPIO_IS_VALID_OUTPUT_GPIO(gpio_num) (((1ULL << (gpio_num)) & SOC_GPIO_VALID_OUTPUT_GPIO_MASK) != 0) + + typedef intr_handle_t gpio_isr_handle_t; /** @@ -419,7 +427,7 @@ void gpio_iomux_in(uint32_t gpio_num, uint32_t signal_idx); */ void gpio_iomux_out(uint8_t gpio_num, int func, bool oen_inv); -#if GPIO_SUPPORTS_FORCE_HOLD +#if SOC_GPIO_SUPPORT_FORCE_HOLD /** * @brief Force hold digital and rtc gpio pad. * @note GPIO force hold, whether the chip in sleep mode or wakeup mode. diff --git a/tools/sdk/esp32/include/driver/include/driver/i2c.h b/tools/sdk/esp32/include/driver/include/driver/i2c.h index 8a1084c2..3cd9f3b7 100644 --- a/tools/sdk/esp32/include/driver/include/driver/i2c.h +++ b/tools/sdk/esp32/include/driver/include/driver/i2c.h @@ -29,8 +29,8 @@ extern "C" { #include "freertos/queue.h" #include "freertos/ringbuf.h" #include "driver/gpio.h" +#include "soc/soc_caps.h" #include "hal/i2c_types.h" -#include "soc/i2c_caps.h" #define I2C_APB_CLK_FREQ APB_CLK_FREQ /*!< I2C source clock is APB clock, 80MHz */ diff --git a/tools/sdk/esp32/include/driver/include/driver/i2s.h b/tools/sdk/esp32/include/driver/include/driver/i2s.h index 2a35a215..e5968ad3 100644 --- a/tools/sdk/esp32/include/driver/include/driver/i2s.h +++ b/tools/sdk/esp32/include/driver/include/driver/i2s.h @@ -20,7 +20,7 @@ #include "freertos/semphr.h" #include "soc/i2s_periph.h" #include "soc/rtc_periph.h" -#include "soc/i2s_caps.h" +#include "soc/soc_caps.h" #include "hal/i2s_hal.h" #include "hal/i2s_types.h" #include "driver/periph_ctrl.h" @@ -299,6 +299,7 @@ float i2s_get_clk(i2s_port_t i2s_num); /** * @brief Set built-in ADC mode for I2S DMA, this function will initialize ADC pad, * and set ADC parameters. + * @note In this mode, the ADC maximum sampling rate is 150KHz. Set the sampling rate through ``i2s_config_t``. * @param adc_unit SAR ADC unit index * @param adc_channel ADC channel index * @return diff --git a/tools/sdk/esp32/include/driver/include/driver/mcpwm.h b/tools/sdk/esp32/include/driver/include/driver/mcpwm.h index 7f5b71fe..19f26b21 100644 --- a/tools/sdk/esp32/include/driver/include/driver/mcpwm.h +++ b/tools/sdk/esp32/include/driver/include/driver/mcpwm.h @@ -12,13 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef _DRIVER_MCPWM_H_ -#define _DRIVER_MCPWM_H_ +#pragma once #include "soc/soc_caps.h" -#ifndef SOC_MCPWM_SUPPORTED -#error MCPWM is not supported in this chip target -#endif +#if SOC_MCPWM_SUPPORTED #include "esp_err.h" #include "soc/soc.h" @@ -26,7 +23,6 @@ #include "driver/periph_ctrl.h" #include "esp_intr_alloc.h" #include "hal/mcpwm_types.h" -#include "soc/mcpwm_caps.h" #ifdef __cplusplus extern "C" { @@ -665,4 +661,5 @@ esp_err_t mcpwm_isr_register(mcpwm_unit_t mcpwm_num, void (*fn)(void *), void *a } #endif -#endif /*_DRIVER_MCPWM_H_*/ +#endif //SOC_MCPWM_SUPPORTED + diff --git a/tools/sdk/esp32/include/driver/include/driver/pcnt.h b/tools/sdk/esp32/include/driver/include/driver/pcnt.h index 00f3626a..6236e540 100644 --- a/tools/sdk/esp32/include/driver/include/driver/pcnt.h +++ b/tools/sdk/esp32/include/driver/include/driver/pcnt.h @@ -175,6 +175,19 @@ esp_err_t pcnt_set_event_value(pcnt_unit_t unit, pcnt_evt_type_t evt_type, int16 */ esp_err_t pcnt_get_event_value(pcnt_unit_t unit, pcnt_evt_type_t evt_type, int16_t *value); +/** + * @brief Get PCNT event status of PCNT unit + * + * @param unit PCNT unit number + * @param status Pointer to accept event status word + * @return + * + * - ESP_OK Success + * - ESP_ERR_INVALID_STATE pcnt driver has not been initialized + * - ESP_ERR_INVALID_ARG Parameter error + */ +esp_err_t pcnt_get_event_status(pcnt_unit_t unit, uint32_t *status); + /** * @brief Unregister PCNT interrupt handler (registered by pcnt_isr_register), the handler is an ISR. * The handler will be attached to the same CPU core that this function is running on. diff --git a/tools/sdk/esp32/include/driver/include/driver/rmt.h b/tools/sdk/esp32/include/driver/include/driver/rmt.h index 4fb9730a..4764a976 100644 --- a/tools/sdk/esp32/include/driver/include/driver/rmt.h +++ b/tools/sdk/esp32/include/driver/include/driver/rmt.h @@ -21,10 +21,10 @@ extern "C" { #include #include #include "esp_err.h" +#include "soc/soc_caps.h" #include "driver/gpio.h" #include "freertos/FreeRTOS.h" #include "freertos/ringbuf.h" -#include "soc/rmt_caps.h" #include "soc/rmt_struct.h" #include "hal/rmt_types.h" diff --git a/tools/sdk/esp32/include/driver/include/driver/sdmmc_host.h b/tools/sdk/esp32/include/driver/include/driver/sdmmc_host.h index e1d0766a..48c4c5e5 100644 --- a/tools/sdk/esp32/include/driver/include/driver/sdmmc_host.h +++ b/tools/sdk/esp32/include/driver/include/driver/sdmmc_host.h @@ -15,9 +15,7 @@ #pragma once #include "soc/soc_caps.h" -#ifndef SOC_SDMMC_HOST_SUPPORTED -#error SDMMC host is not supported in this chip target -#endif +#if SOC_SDMMC_HOST_SUPPORTED #include #include @@ -245,3 +243,5 @@ esp_err_t sdmmc_host_pullup_en(int slot, int width); #ifdef __cplusplus } #endif + +#endif //SOC_SDMMC_HOST_SUPPORTED \ No newline at end of file diff --git a/tools/sdk/esp32/include/driver/include/driver/sigmadelta.h b/tools/sdk/esp32/include/driver/include/driver/sigmadelta.h index 6a6aa487..d7e7eef1 100644 --- a/tools/sdk/esp32/include/driver/include/driver/sigmadelta.h +++ b/tools/sdk/esp32/include/driver/include/driver/sigmadelta.h @@ -14,8 +14,8 @@ #pragma once #include +#include "soc/soc_caps.h" #include "soc/sigmadelta_periph.h" -#include "soc/sigmadelta_caps.h" #include "driver/gpio.h" #include "hal/sigmadelta_types.h" diff --git a/tools/sdk/esp32/include/driver/include/driver/spi_slave_hd.h b/tools/sdk/esp32/include/driver/include/driver/spi_slave_hd.h index f096f34c..cea9cd2a 100644 --- a/tools/sdk/esp32/include/driver/include/driver/spi_slave_hd.h +++ b/tools/sdk/esp32/include/driver/include/driver/spi_slave_hd.h @@ -15,7 +15,7 @@ #pragma once #include "esp_types.h" -#include "soc/spi_caps.h" +#include "soc/soc_caps.h" #include "freertos/FreeRTOS.h" #include "hal/spi_types.h" diff --git a/tools/sdk/esp32/include/driver/include/driver/twai.h b/tools/sdk/esp32/include/driver/include/driver/twai.h index ef240a38..d369ad23 100644 --- a/tools/sdk/esp32/include/driver/include/driver/twai.h +++ b/tools/sdk/esp32/include/driver/include/driver/twai.h @@ -19,16 +19,13 @@ extern "C" { #endif #include "soc/soc_caps.h" -#ifndef SOC_TWAI_SUPPORTED -#error TWAI is not supported in this chip target -#endif +#if SOC_TWAI_SUPPORTED #include "freertos/FreeRTOS.h" #include "esp_types.h" #include "esp_intr_alloc.h" #include "esp_err.h" #include "gpio.h" -#include "soc/twai_caps.h" #include "hal/twai_types.h" /* -------------------- Default initializers and flags ---------------------- */ @@ -347,3 +344,5 @@ esp_err_t twai_clear_receive_queue(void); #ifdef __cplusplus } #endif + +#endif //SOC_TWAI_SUPPORTED \ No newline at end of file diff --git a/tools/sdk/esp32/include/driver/include/driver/uart.h b/tools/sdk/esp32/include/driver/include/driver/uart.h index 7be0fb02..45564a0a 100644 --- a/tools/sdk/esp32/include/driver/include/driver/uart.h +++ b/tools/sdk/esp32/include/driver/include/driver/uart.h @@ -20,6 +20,7 @@ extern "C" { #include "esp_err.h" #include "esp_intr_alloc.h" +#include "soc/soc_caps.h" #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" #include "freertos/xtensa_api.h" @@ -27,7 +28,6 @@ extern "C" { #include "freertos/queue.h" #include "freertos/ringbuf.h" #include "hal/uart_types.h" -#include "soc/uart_caps.h" // Valid UART port number #define UART_NUM_0 (0) /*!< UART port 0 */ @@ -39,6 +39,9 @@ extern "C" { #define UART_PIN_NO_CHANGE (-1) /*!< Constant for uart_set_pin function which indicates that UART pin should not be changed */ +#define UART_FIFO_LEN SOC_UART_FIFO_LEN ///< Length of the UART HW FIFO +#define UART_BITRATE_MAX SOC_UART_BITRATE_MAX ///< Maximum configurable bitrate + /** * @brief UART interrupt configuration parameters for uart_intr_config function */ @@ -224,7 +227,7 @@ esp_err_t uart_get_baudrate(uart_port_t uart_num, uint32_t* baudrate); * @brief Set UART line inverse mode * * @param uart_num UART port number, the max port number is (UART_NUM_MAX -1). - * @param inverse_mask Choose the wires that need to be inverted. Using the ORred mask of `uart_signal_inv_t` + * @param inverse_mask Choose the wires that need to be inverted. Using the ORred mask of `uart_signal_inv_t` * * @return * - ESP_OK Success diff --git a/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h b/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h index b899118a..ad6cd890 100755 --- a/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h +++ b/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h @@ -11,6 +11,7 @@ #include #include +#define NT99141_PID (0x14) #define OV9650_PID (0x96) #define OV7725_PID (0x77) #define OV2640_PID (0x26) diff --git a/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h b/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h index d9d464e2..6c1600b6 100644 --- a/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h +++ b/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h @@ -49,6 +49,39 @@ #define BIT0 0x00000001 //}} +#define BIT63 (0x80000000ULL << 32) +#define BIT62 (0x40000000ULL << 32) +#define BIT61 (0x20000000ULL << 32) +#define BIT60 (0x10000000ULL << 32) +#define BIT59 (0x08000000ULL << 32) +#define BIT58 (0x04000000ULL << 32) +#define BIT57 (0x02000000ULL << 32) +#define BIT56 (0x01000000ULL << 32) +#define BIT55 (0x00800000ULL << 32) +#define BIT54 (0x00400000ULL << 32) +#define BIT53 (0x00200000ULL << 32) +#define BIT52 (0x00100000ULL << 32) +#define BIT51 (0x00080000ULL << 32) +#define BIT50 (0x00040000ULL << 32) +#define BIT49 (0x00020000ULL << 32) +#define BIT48 (0x00010000ULL << 32) +#define BIT47 (0x00008000ULL << 32) +#define BIT46 (0x00004000ULL << 32) +#define BIT45 (0x00002000ULL << 32) +#define BIT44 (0x00001000ULL << 32) +#define BIT43 (0x00000800ULL << 32) +#define BIT42 (0x00000400ULL << 32) +#define BIT41 (0x00000200ULL << 32) +#define BIT40 (0x00000100ULL << 32) +#define BIT39 (0x00000080ULL << 32) +#define BIT38 (0x00000040ULL << 32) +#define BIT37 (0x00000020ULL << 32) +#define BIT36 (0x00000010ULL << 32) +#define BIT35 (0x00000008ULL << 32) +#define BIT34 (0x00000004ULL << 32) +#define BIT33 (0x00000002ULL << 32) +#define BIT32 (0x00000001ULL << 32) + #ifndef __ASSEMBLER__ #ifndef BIT #define BIT(nr) (1UL << (nr)) diff --git a/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h b/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h index bf910010..f57325c2 100644 --- a/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h +++ b/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h @@ -41,6 +41,8 @@ extern "C" { ESP_IDF_VERSION_MINOR, \ ESP_IDF_VERSION_PATCH) +#ifndef __ASSEMBLER__ + /** * Return full IDF version string, same as 'git describe' output. * @@ -53,6 +55,8 @@ extern "C" { */ const char* esp_get_idf_version(void); +#endif + #ifdef __cplusplus } #endif diff --git a/tools/sdk/esp32/include/esp_littlefs/include/esp_littlefs.h b/tools/sdk/esp32/include/esp_littlefs/include/esp_littlefs.h new file mode 100644 index 00000000..79c8fc8e --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/include/esp_littlefs.h @@ -0,0 +1,119 @@ +#ifndef ESP_LITTLEFS_H__ +#define ESP_LITTLEFS_H__ + +#include +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "esp_err.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "sdkconfig.h" + +#include "littlefs/lfs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Last Modified Time + * + * Use 't' for LITTLEFS_ATTR_MTIME to match example: + * https://github.com/ARMmbed/littlefs/issues/23#issuecomment-482293539 + * And to match other external tools such as: + * https://github.com/earlephilhower/mklittlefs + */ +#define LITTLEFS_ATTR_MTIME ((uint8_t) 't') + +/** + *Configuration structure for esp_vfs_littlefs_register. + */ +typedef struct { + const char *base_path; /**< Mounting point. */ + const char *partition_label; /**< Label of partition to use. */ + uint8_t format_if_mount_failed:1; /**< Format the file system if it fails to mount. */ + uint8_t dont_mount:1; /**< Don't attempt to mount or format. Overrides format_if_mount_failed */ +} esp_vfs_littlefs_conf_t; + +/** + * Register and mount littlefs to VFS with given path prefix. + * + * @param conf Pointer to esp_vfs_littlefs_conf_t configuration structure + * + * @return + * - ESP_OK if success + * - ESP_ERR_NO_MEM if objects could not be allocated + * - ESP_ERR_INVALID_STATE if already mounted or partition is encrypted + * - ESP_ERR_NOT_FOUND if partition for littlefs was not found + * - ESP_FAIL if mount or format fails + */ +esp_err_t esp_vfs_littlefs_register(const esp_vfs_littlefs_conf_t * conf); + +/** + * Unregister and unmount littlefs from VFS + * + * @param partition_label Label of the partition to unregister. + * + * @return + * - ESP_OK if successful + * - ESP_ERR_INVALID_STATE already unregistered + */ +esp_err_t esp_vfs_littlefs_unregister(const char* partition_label); + +/** + * Check if littlefs is mounted + * + * @param partition_label Label of the partition to check. + * + * @return + * - true if mounted + * - false if not mounted + */ +bool esp_littlefs_mounted(const char* partition_label); + +/** + * Format the littlefs partition + * + * @param partition_label Label of the partition to format. + * @return + * - ESP_OK if successful + * - ESP_FAIL on error + */ +esp_err_t esp_littlefs_format(const char* partition_label); + +/** + * Get information for littlefs + * + * @param partition_label Optional, label of the partition to get info for. + * @param[out] total_bytes Size of the file system + * @param[out] used_bytes Current used bytes in the file system + * + * @return + * - ESP_OK if success + * - ESP_ERR_INVALID_STATE if not mounted + */ +esp_err_t esp_littlefs_info(const char* partition_label, size_t *total_bytes, size_t *used_bytes); + +#if CONFIG_LITTLEFS_HUMAN_READABLE +/** + * @brief converts an enumerated lfs error into a string. + * @param lfs_errno The enumerated littlefs error. + */ +const char * esp_littlefs_errno(enum lfs_error lfs_errno); +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_filebd.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_filebd.h new file mode 100644 index 00000000..0d56434a --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_filebd.h @@ -0,0 +1,73 @@ +/* + * Block device emulated in a file + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_FILEBD_H +#define LFS_FILEBD_H + +#include "lfs.h" +#include "lfs_util.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_FILEBD_YES_TRACE +#define LFS_FILEBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_FILEBD_TRACE(...) +#endif + +// filebd config (optional) +struct lfs_filebd_config { + // 8-bit erase value to use for simulating erases. -1 does not simulate + // erases, which can speed up testing by avoiding all the extra block-device + // operations to store the erase value. + int32_t erase_value; +}; + +// filebd state +typedef struct lfs_filebd { + int fd; + const struct lfs_filebd_config *cfg; +} lfs_filebd_t; + + +// Create a file block device using the geometry in lfs_config +int lfs_filebd_create(const struct lfs_config *cfg, const char *path); +int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_filebd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_filebd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_filebd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_filebd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_filebd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_filebd_sync(const struct lfs_config *cfg); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_rambd.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_rambd.h new file mode 100644 index 00000000..56a45ce9 --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_rambd.h @@ -0,0 +1,75 @@ +/* + * Block device emulated in RAM + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_RAMBD_H +#define LFS_RAMBD_H + +#include "lfs.h" +#include "lfs_util.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_RAMBD_YES_TRACE +#define LFS_RAMBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_RAMBD_TRACE(...) +#endif + +// rambd config (optional) +struct lfs_rambd_config { + // 8-bit erase value to simulate erasing with. -1 indicates no erase + // occurs, which is still a valid block device + int32_t erase_value; + + // Optional statically allocated buffer for the block device. + void *buffer; +}; + +// rambd state +typedef struct lfs_rambd { + uint8_t *buffer; + const struct lfs_rambd_config *cfg; +} lfs_rambd_t; + + +// Create a RAM block device using the geometry in lfs_config +int lfs_rambd_create(const struct lfs_config *cfg); +int lfs_rambd_createcfg(const struct lfs_config *cfg, + const struct lfs_rambd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_rambd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_rambd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_rambd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_rambd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_rambd_sync(const struct lfs_config *cfg); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_testbd.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_testbd.h new file mode 100644 index 00000000..b1fb2e92 --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/bd/lfs_testbd.h @@ -0,0 +1,141 @@ +/* + * Testing block device, wraps filebd and rambd while providing a bunch + * of hooks for testing littlefs in various conditions. + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_TESTBD_H +#define LFS_TESTBD_H + +#include "lfs.h" +#include "lfs_util.h" +#include "bd/lfs_rambd.h" +#include "bd/lfs_filebd.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_TESTBD_YES_TRACE +#define LFS_TESTBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_TESTBD_TRACE(...) +#endif + +// Mode determining how "bad blocks" behave during testing. This simulates +// some real-world circumstances such as progs not sticking (prog-noop), +// a readonly disk (erase-noop), and ECC failures (read-error). +// +// Not that read-noop is not allowed. Read _must_ return a consistent (but +// may be arbitrary) value on every read. +enum lfs_testbd_badblock_behavior { + LFS_TESTBD_BADBLOCK_PROGERROR, + LFS_TESTBD_BADBLOCK_ERASEERROR, + LFS_TESTBD_BADBLOCK_READERROR, + LFS_TESTBD_BADBLOCK_PROGNOOP, + LFS_TESTBD_BADBLOCK_ERASENOOP, +}; + +// Type for measuring wear +typedef uint32_t lfs_testbd_wear_t; +typedef int32_t lfs_testbd_swear_t; + +// testbd config, this is required for testing +struct lfs_testbd_config { + // 8-bit erase value to use for simulating erases. -1 does not simulate + // erases, which can speed up testing by avoiding all the extra block-device + // operations to store the erase value. + int32_t erase_value; + + // Number of erase cycles before a block becomes "bad". The exact behavior + // of bad blocks is controlled by the badblock_mode. + uint32_t erase_cycles; + + // The mode determining how bad blocks fail + uint8_t badblock_behavior; + + // Number of write operations (erase/prog) before forcefully killing + // the program with exit. Simulates power-loss. 0 disables. + uint32_t power_cycles; + + // Optional buffer for RAM block device. + void *buffer; + + // Optional buffer for wear + void *wear_buffer; +}; + +// testbd state +typedef struct lfs_testbd { + union { + struct { + lfs_filebd_t bd; + struct lfs_filebd_config cfg; + } file; + struct { + lfs_rambd_t bd; + struct lfs_rambd_config cfg; + } ram; + } u; + + bool persist; + uint32_t power_cycles; + lfs_testbd_wear_t *wear; + + const struct lfs_testbd_config *cfg; +} lfs_testbd_t; + + +/// Block device API /// + +// Create a test block device using the geometry in lfs_config +// +// Note that filebd is used if a path is provided, if path is NULL +// testbd will use rambd which can be much faster. +int lfs_testbd_create(const struct lfs_config *cfg, const char *path); +int lfs_testbd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_testbd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_testbd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_testbd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_testbd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_testbd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_testbd_sync(const struct lfs_config *cfg); + + +/// Additional extended API for driving test features /// + +// Get simulated wear on a given block +lfs_testbd_swear_t lfs_testbd_getwear(const struct lfs_config *cfg, + lfs_block_t block); + +// Manually set simulated wear on a given block +int lfs_testbd_setwear(const struct lfs_config *cfg, + lfs_block_t block, lfs_testbd_wear_t wear); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs.h new file mode 100644 index 00000000..35bbbabf --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs.h @@ -0,0 +1,655 @@ +/* + * The little filesystem + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_H +#define LFS_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/// Version info /// + +// Software library version +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_VERSION 0x00020002 +#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) +#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0)) + +// Version of On-disk data structures +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_DISK_VERSION 0x00020000 +#define LFS_DISK_VERSION_MAJOR (0xffff & (LFS_DISK_VERSION >> 16)) +#define LFS_DISK_VERSION_MINOR (0xffff & (LFS_DISK_VERSION >> 0)) + + +/// Definitions /// + +// Type definitions +typedef uint32_t lfs_size_t; +typedef uint32_t lfs_off_t; + +typedef int32_t lfs_ssize_t; +typedef int32_t lfs_soff_t; + +typedef uint32_t lfs_block_t; + +// Maximum name size in bytes, may be redefined to reduce the size of the +// info struct. Limited to <= 1022. Stored in superblock and must be +// respected by other littlefs drivers. +#ifndef LFS_NAME_MAX +#define LFS_NAME_MAX 255 +#endif + +// Maximum size of a file in bytes, may be redefined to limit to support other +// drivers. Limited on disk to <= 4294967296. However, above 2147483647 the +// functions lfs_file_seek, lfs_file_size, and lfs_file_tell will return +// incorrect values due to using signed integers. Stored in superblock and +// must be respected by other littlefs drivers. +#ifndef LFS_FILE_MAX +#define LFS_FILE_MAX 2147483647 +#endif + +// Maximum size of custom attributes in bytes, may be redefined, but there is +// no real benefit to using a smaller LFS_ATTR_MAX. Limited to <= 1022. +#ifndef LFS_ATTR_MAX +#define LFS_ATTR_MAX 1022 +#endif + +// Possible error codes, these are negative to allow +// valid positive return values +enum lfs_error { + LFS_ERR_OK = 0, // No error + LFS_ERR_IO = -5, // Error during device operation + LFS_ERR_CORRUPT = -84, // Corrupted + LFS_ERR_NOENT = -2, // No directory entry + LFS_ERR_EXIST = -17, // Entry already exists + LFS_ERR_NOTDIR = -20, // Entry is not a dir + LFS_ERR_ISDIR = -21, // Entry is a dir + LFS_ERR_NOTEMPTY = -39, // Dir is not empty + LFS_ERR_BADF = -9, // Bad file number + LFS_ERR_FBIG = -27, // File too large + LFS_ERR_INVAL = -22, // Invalid parameter + LFS_ERR_NOSPC = -28, // No space left on device + LFS_ERR_NOMEM = -12, // No more memory available + LFS_ERR_NOATTR = -61, // No data/attr available + LFS_ERR_NAMETOOLONG = -36, // File name too long +}; + +// File types +enum lfs_type { + // file types + LFS_TYPE_REG = 0x001, + LFS_TYPE_DIR = 0x002, + + // internally used types + LFS_TYPE_SPLICE = 0x400, + LFS_TYPE_NAME = 0x000, + LFS_TYPE_STRUCT = 0x200, + LFS_TYPE_USERATTR = 0x300, + LFS_TYPE_FROM = 0x100, + LFS_TYPE_TAIL = 0x600, + LFS_TYPE_GLOBALS = 0x700, + LFS_TYPE_CRC = 0x500, + + // internally used type specializations + LFS_TYPE_CREATE = 0x401, + LFS_TYPE_DELETE = 0x4ff, + LFS_TYPE_SUPERBLOCK = 0x0ff, + LFS_TYPE_DIRSTRUCT = 0x200, + LFS_TYPE_CTZSTRUCT = 0x202, + LFS_TYPE_INLINESTRUCT = 0x201, + LFS_TYPE_SOFTTAIL = 0x600, + LFS_TYPE_HARDTAIL = 0x601, + LFS_TYPE_MOVESTATE = 0x7ff, + + // internal chip sources + LFS_FROM_NOOP = 0x000, + LFS_FROM_MOVE = 0x101, + LFS_FROM_USERATTRS = 0x102, +}; + +// File open flags +enum lfs_open_flags { + // open flags + LFS_O_RDONLY = 1, // Open a file as read only + LFS_O_WRONLY = 2, // Open a file as write only + LFS_O_RDWR = 3, // Open a file as read and write + LFS_O_CREAT = 0x0100, // Create a file if it does not exist + LFS_O_EXCL = 0x0200, // Fail if a file already exists + LFS_O_TRUNC = 0x0400, // Truncate the existing file to zero size + LFS_O_APPEND = 0x0800, // Move to end of file on every write + + // internally used flags + LFS_F_DIRTY = 0x010000, // File does not match storage + LFS_F_WRITING = 0x020000, // File has been written since last flush + LFS_F_READING = 0x040000, // File has been read since last flush + LFS_F_ERRED = 0x080000, // An error occured during write + LFS_F_INLINE = 0x100000, // Currently inlined in directory entry + LFS_F_OPENED = 0x200000, // File has been opened +}; + +// File seek flags +enum lfs_whence_flags { + LFS_SEEK_SET = 0, // Seek relative to an absolute position + LFS_SEEK_CUR = 1, // Seek relative to the current file position + LFS_SEEK_END = 2, // Seek relative to the end of the file +}; + + +// Configuration provided during initialization of the littlefs +struct lfs_config { + // Opaque user provided context that can be used to pass + // information to the block device operations + void *context; + + // Read a region in a block. Negative error codes are propogated + // to the user. + int (*read)(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + + // Program a region in a block. The block must have previously + // been erased. Negative error codes are propogated to the user. + // May return LFS_ERR_CORRUPT if the block should be considered bad. + int (*prog)(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + + // Erase a block. A block must be erased before being programmed. + // The state of an erased block is undefined. Negative error codes + // are propogated to the user. + // May return LFS_ERR_CORRUPT if the block should be considered bad. + int (*erase)(const struct lfs_config *c, lfs_block_t block); + + // Sync the state of the underlying block device. Negative error codes + // are propogated to the user. + int (*sync)(const struct lfs_config *c); + + // Minimum size of a block read. All read operations will be a + // multiple of this value. + lfs_size_t read_size; + + // Minimum size of a block program. All program operations will be a + // multiple of this value. + lfs_size_t prog_size; + + // Size of an erasable block. This does not impact ram consumption and + // may be larger than the physical erase size. However, non-inlined files + // take up at minimum one block. Must be a multiple of the read + // and program sizes. + lfs_size_t block_size; + + // Number of erasable blocks on the device. + lfs_size_t block_count; + + // Number of erase cycles before littlefs evicts metadata logs and moves + // the metadata to another block. Suggested values are in the + // range 100-1000, with large values having better performance at the cost + // of less consistent wear distribution. + // + // Set to -1 to disable block-level wear-leveling. + int32_t block_cycles; + + // Size of block caches. Each cache buffers a portion of a block in RAM. + // The littlefs needs a read cache, a program cache, and one additional + // cache per file. Larger caches can improve performance by storing more + // data and reducing the number of disk accesses. Must be a multiple of + // the read and program sizes, and a factor of the block size. + lfs_size_t cache_size; + + // Size of the lookahead buffer in bytes. A larger lookahead buffer + // increases the number of blocks found during an allocation pass. The + // lookahead buffer is stored as a compact bitmap, so each byte of RAM + // can track 8 blocks. Must be a multiple of 8. + lfs_size_t lookahead_size; + + // Optional statically allocated read buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *read_buffer; + + // Optional statically allocated program buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *prog_buffer; + + // Optional statically allocated lookahead buffer. Must be lookahead_size + // and aligned to a 32-bit boundary. By default lfs_malloc is used to + // allocate this buffer. + void *lookahead_buffer; + + // Optional upper limit on length of file names in bytes. No downside for + // larger names except the size of the info struct which is controlled by + // the LFS_NAME_MAX define. Defaults to LFS_NAME_MAX when zero. Stored in + // superblock and must be respected by other littlefs drivers. + lfs_size_t name_max; + + // Optional upper limit on files in bytes. No downside for larger files + // but must be <= LFS_FILE_MAX. Defaults to LFS_FILE_MAX when zero. Stored + // in superblock and must be respected by other littlefs drivers. + lfs_size_t file_max; + + // Optional upper limit on custom attributes in bytes. No downside for + // larger attributes size but must be <= LFS_ATTR_MAX. Defaults to + // LFS_ATTR_MAX when zero. + lfs_size_t attr_max; +}; + +// File info structure +struct lfs_info { + // Type of the file, either LFS_TYPE_REG or LFS_TYPE_DIR + uint8_t type; + + // Size of the file, only valid for REG files. Limited to 32-bits. + lfs_size_t size; + + // Name of the file stored as a null-terminated string. Limited to + // LFS_NAME_MAX+1, which can be changed by redefining LFS_NAME_MAX to + // reduce RAM. LFS_NAME_MAX is stored in superblock and must be + // respected by other littlefs drivers. + char name[LFS_NAME_MAX+1]; +}; + +// Custom attribute structure, used to describe custom attributes +// committed atomically during file writes. +struct lfs_attr { + // 8-bit type of attribute, provided by user and used to + // identify the attribute + uint8_t type; + + // Pointer to buffer containing the attribute + void *buffer; + + // Size of attribute in bytes, limited to LFS_ATTR_MAX + lfs_size_t size; +}; + +// Optional configuration provided during lfs_file_opencfg +struct lfs_file_config { + // Optional statically allocated file buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *buffer; + + // Optional list of custom attributes related to the file. If the file + // is opened with read access, these attributes will be read from disk + // during the open call. If the file is opened with write access, the + // attributes will be written to disk every file sync or close. This + // write occurs atomically with update to the file's contents. + // + // Custom attributes are uniquely identified by an 8-bit type and limited + // to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller + // than the buffer, it will be padded with zeros. If the stored attribute + // is larger, then it will be silently truncated. If the attribute is not + // found, it will be created implicitly. + struct lfs_attr *attrs; + + // Number of custom attributes in the list + lfs_size_t attr_count; +}; + + +/// internal littlefs data structures /// +typedef struct lfs_cache { + lfs_block_t block; + lfs_off_t off; + lfs_size_t size; + uint8_t *buffer; +} lfs_cache_t; + +typedef struct lfs_mdir { + lfs_block_t pair[2]; + uint32_t rev; + lfs_off_t off; + uint32_t etag; + uint16_t count; + bool erased; + bool split; + lfs_block_t tail[2]; +} lfs_mdir_t; + +// littlefs directory type +typedef struct lfs_dir { + struct lfs_dir *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + + lfs_off_t pos; + lfs_block_t head[2]; +} lfs_dir_t; + +// littlefs file type +typedef struct lfs_file { + struct lfs_file *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + + struct lfs_ctz { + lfs_block_t head; + lfs_size_t size; + } ctz; + + uint32_t flags; + lfs_off_t pos; + lfs_block_t block; + lfs_off_t off; + lfs_cache_t cache; + + const struct lfs_file_config *cfg; +} lfs_file_t; + +typedef struct lfs_superblock { + uint32_t version; + lfs_size_t block_size; + lfs_size_t block_count; + lfs_size_t name_max; + lfs_size_t file_max; + lfs_size_t attr_max; +} lfs_superblock_t; + +typedef struct lfs_gstate { + uint32_t tag; + lfs_block_t pair[2]; +} lfs_gstate_t; + +// The littlefs filesystem type +typedef struct lfs { + lfs_cache_t rcache; + lfs_cache_t pcache; + + lfs_block_t root[2]; + struct lfs_mlist { + struct lfs_mlist *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + } *mlist; + uint32_t seed; + + lfs_gstate_t gstate; + lfs_gstate_t gdisk; + lfs_gstate_t gdelta; + + struct lfs_free { + lfs_block_t off; + lfs_block_t size; + lfs_block_t i; + lfs_block_t ack; + uint32_t *buffer; + } free; + + const struct lfs_config *cfg; + lfs_size_t name_max; + lfs_size_t file_max; + lfs_size_t attr_max; + +#ifdef LFS_MIGRATE + struct lfs1 *lfs1; +#endif +} lfs_t; + + +/// Filesystem functions /// + +// Format a block device with the littlefs +// +// Requires a littlefs object and config struct. This clobbers the littlefs +// object, and does not leave the filesystem mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_format(lfs_t *lfs, const struct lfs_config *config); + +// Mounts a littlefs +// +// Requires a littlefs object and config struct. Multiple filesystems +// may be mounted simultaneously with multiple littlefs objects. Both +// lfs and config must be allocated while mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_mount(lfs_t *lfs, const struct lfs_config *config); + +// Unmounts a littlefs +// +// Does nothing besides releasing any allocated resources. +// Returns a negative error code on failure. +int lfs_unmount(lfs_t *lfs); + +/// General operations /// + +// Removes a file or directory +// +// If removing a directory, the directory must be empty. +// Returns a negative error code on failure. +int lfs_remove(lfs_t *lfs, const char *path); + +// Rename or move a file or directory +// +// If the destination exists, it must match the source in type. +// If the destination is a directory, the directory must be empty. +// +// Returns a negative error code on failure. +int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath); + +// Find info about a file or directory +// +// Fills out the info structure, based on the specified file or directory. +// Returns a negative error code on failure. +int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info); + +// Get a custom attribute +// +// Custom attributes are uniquely identified by an 8-bit type and limited +// to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller than +// the buffer, it will be padded with zeros. If the stored attribute is larger, +// then it will be silently truncated. If no attribute is found, the error +// LFS_ERR_NOATTR is returned and the buffer is filled with zeros. +// +// Returns the size of the attribute, or a negative error code on failure. +// Note, the returned size is the size of the attribute on disk, irrespective +// of the size of the buffer. This can be used to dynamically allocate a buffer +// or check for existance. +lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, + uint8_t type, void *buffer, lfs_size_t size); + +// Set custom attributes +// +// Custom attributes are uniquely identified by an 8-bit type and limited +// to LFS_ATTR_MAX bytes. If an attribute is not found, it will be +// implicitly created. +// +// Returns a negative error code on failure. +int lfs_setattr(lfs_t *lfs, const char *path, + uint8_t type, const void *buffer, lfs_size_t size); + +// Removes a custom attribute +// +// If an attribute is not found, nothing happens. +// +// Returns a negative error code on failure. +int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type); + + +/// File operations /// + +// Open a file +// +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. +// +// Returns a negative error code on failure. +int lfs_file_open(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags); + +// Open a file with extra configuration +// +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. +// +// The config struct provides additional config options per file as described +// above. The config struct must be allocated while the file is open, and the +// config struct must be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags, + const struct lfs_file_config *config); + +// Close a file +// +// Any pending writes are written out to storage as though +// sync had been called and releases any allocated resources. +// +// Returns a negative error code on failure. +int lfs_file_close(lfs_t *lfs, lfs_file_t *file); + +// Synchronize a file on storage +// +// Any pending writes are written out to storage. +// Returns a negative error code on failure. +int lfs_file_sync(lfs_t *lfs, lfs_file_t *file); + +// Read data from file +// +// Takes a buffer and size indicating where to store the read data. +// Returns the number of bytes read, or a negative error code on failure. +lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, + void *buffer, lfs_size_t size); + +// Write data to file +// +// Takes a buffer and size indicating the data to write. The file will not +// actually be updated on the storage until either sync or close is called. +// +// Returns the number of bytes written, or a negative error code on failure. +lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, + const void *buffer, lfs_size_t size); + +// Change the position of the file +// +// The change in position is determined by the offset and whence flag. +// Returns the new position of the file, or a negative error code on failure. +lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, + lfs_soff_t off, int whence); + +// Truncates the size of the file to the specified size +// +// Returns a negative error code on failure. +int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size); + +// Return the position of the file +// +// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_CUR) +// Returns the position of the file, or a negative error code on failure. +lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file); + +// Change the position of the file to the beginning of the file +// +// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_SET) +// Returns a negative error code on failure. +int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file); + +// Return the size of the file +// +// Similar to lfs_file_seek(lfs, file, 0, LFS_SEEK_END) +// Returns the size of the file, or a negative error code on failure. +lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file); + + +/// Directory operations /// + +// Create a directory +// +// Returns a negative error code on failure. +int lfs_mkdir(lfs_t *lfs, const char *path); + +// Open a directory +// +// Once open a directory can be used with read to iterate over files. +// Returns a negative error code on failure. +int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path); + +// Close a directory +// +// Releases any allocated resources. +// Returns a negative error code on failure. +int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir); + +// Read an entry in the directory +// +// Fills out the info structure, based on the specified file or directory. +// Returns a positive value on success, 0 at the end of directory, +// or a negative error code on failure. +int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info); + +// Change the position of the directory +// +// The new off must be a value previous returned from tell and specifies +// an absolute offset in the directory seek. +// +// Returns a negative error code on failure. +int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off); + +// Return the position of the directory +// +// The returned offset is only meant to be consumed by seek and may not make +// sense, but does indicate the current position in the directory iteration. +// +// Returns the position of the directory, or a negative error code on failure. +lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir); + +// Change the position of the directory to the beginning of the directory +// +// Returns a negative error code on failure. +int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir); + + +/// Filesystem-level filesystem operations + +// Finds the current size of the filesystem +// +// Note: Result is best effort. If files share COW structures, the returned +// size may be larger than the filesystem actually is. +// +// Returns the number of allocated blocks, or a negative error code on failure. +lfs_ssize_t lfs_fs_size(lfs_t *lfs); + +// Traverse through all blocks in use by the filesystem +// +// The provided callback will be called with each block address that is +// currently in use by the filesystem. This can be used to determine which +// blocks are in use or how much of the storage is available. +// +// Returns a negative error code on failure. +int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data); + +#ifdef LFS_MIGRATE +// Attempts to migrate a previous version of littlefs +// +// Behaves similarly to the lfs_format function. Attempts to mount +// the previous version of littlefs and update the filesystem so it can be +// mounted with the current version of littlefs. +// +// Requires a littlefs object and config struct. This clobbers the littlefs +// object, and does not leave the filesystem mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg); +#endif + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs_util.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs_util.h new file mode 100644 index 00000000..dbb4c5ba --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs/lfs_util.h @@ -0,0 +1,234 @@ +/* + * lfs utility functions + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_UTIL_H +#define LFS_UTIL_H + +// Users can override lfs_util.h with their own configuration by defining +// LFS_CONFIG as a header file to include (-DLFS_CONFIG=lfs_config.h). +// +// If LFS_CONFIG is used, none of the default utils will be emitted and must be +// provided by the config file. To start, I would suggest copying lfs_util.h +// and modifying as needed. +#ifdef LFS_CONFIG +#define LFS_STRINGIZE(x) LFS_STRINGIZE2(x) +#define LFS_STRINGIZE2(x) #x +#include LFS_STRINGIZE(LFS_CONFIG) +#else + +// System includes +#include +#include +#include +#include + +#ifndef LFS_NO_MALLOC +#include +#endif +#ifndef LFS_NO_ASSERT +#include +#endif +#if !defined(LFS_NO_DEBUG) || \ + !defined(LFS_NO_WARN) || \ + !defined(LFS_NO_ERROR) || \ + defined(LFS_YES_TRACE) +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Macros, may be replaced by system specific wrappers. Arguments to these +// macros must not have side-effects as the macros can be removed for a smaller +// code footprint + +// Logging functions +#ifdef LFS_YES_TRACE +#define LFS_TRACE_(fmt, ...) \ + printf("%s:%d:trace: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_TRACE(...) LFS_TRACE_(__VA_ARGS__, "") +#else +#define LFS_TRACE(...) +#endif + +#ifndef LFS_NO_DEBUG +#define LFS_DEBUG_(fmt, ...) \ + printf("%s:%d:debug: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_DEBUG(...) LFS_DEBUG_(__VA_ARGS__, "") +#else +#define LFS_DEBUG(...) +#endif + +#ifndef LFS_NO_WARN +#define LFS_WARN_(fmt, ...) \ + printf("%s:%d:warn: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_WARN(...) LFS_WARN_(__VA_ARGS__, "") +#else +#define LFS_WARN(...) +#endif + +#ifndef LFS_NO_ERROR +#define LFS_ERROR_(fmt, ...) \ + printf("%s:%d:error: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_ERROR(...) LFS_ERROR_(__VA_ARGS__, "") +#else +#define LFS_ERROR(...) +#endif + +// Runtime assertions +#ifndef LFS_NO_ASSERT +#define LFS_ASSERT(test) assert(test) +#else +#define LFS_ASSERT(test) +#endif + + +// Builtin functions, these may be replaced by more efficient +// toolchain-specific implementations. LFS_NO_INTRINSICS falls back to a more +// expensive basic C implementation for debugging purposes + +// Min/max functions for unsigned 32-bit numbers +static inline uint32_t lfs_max(uint32_t a, uint32_t b) { + return (a > b) ? a : b; +} + +static inline uint32_t lfs_min(uint32_t a, uint32_t b) { + return (a < b) ? a : b; +} + +// Align to nearest multiple of a size +static inline uint32_t lfs_aligndown(uint32_t a, uint32_t alignment) { + return a - (a % alignment); +} + +static inline uint32_t lfs_alignup(uint32_t a, uint32_t alignment) { + return lfs_aligndown(a + alignment-1, alignment); +} + +// Find the smallest power of 2 greater than or equal to a +static inline uint32_t lfs_npw2(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) + return 32 - __builtin_clz(a-1); +#else + uint32_t r = 0; + uint32_t s; + a -= 1; + s = (a > 0xffff) << 4; a >>= s; r |= s; + s = (a > 0xff ) << 3; a >>= s; r |= s; + s = (a > 0xf ) << 2; a >>= s; r |= s; + s = (a > 0x3 ) << 1; a >>= s; r |= s; + return (r | (a >> 1)) + 1; +#endif +} + +// Count the number of trailing binary zeros in a +// lfs_ctz(0) may be undefined +static inline uint32_t lfs_ctz(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && defined(__GNUC__) + return __builtin_ctz(a); +#else + return lfs_npw2((a & -a) + 1) - 1; +#endif +} + +// Count the number of binary ones in a +static inline uint32_t lfs_popc(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) + return __builtin_popcount(a); +#else + a = a - ((a >> 1) & 0x55555555); + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); + return (((a + (a >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24; +#endif +} + +// Find the sequence comparison of a and b, this is the distance +// between a and b ignoring overflow +static inline int lfs_scmp(uint32_t a, uint32_t b) { + return (int)(unsigned)(a - b); +} + +// Convert between 32-bit little-endian and native order +static inline uint32_t lfs_fromle32(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + return a; +#elif !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + return __builtin_bswap32(a); +#else + return (((uint8_t*)&a)[0] << 0) | + (((uint8_t*)&a)[1] << 8) | + (((uint8_t*)&a)[2] << 16) | + (((uint8_t*)&a)[3] << 24); +#endif +} + +static inline uint32_t lfs_tole32(uint32_t a) { + return lfs_fromle32(a); +} + +// Convert between 32-bit big-endian and native order +static inline uint32_t lfs_frombe32(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + return __builtin_bswap32(a); +#elif !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + return a; +#else + return (((uint8_t*)&a)[0] << 24) | + (((uint8_t*)&a)[1] << 16) | + (((uint8_t*)&a)[2] << 8) | + (((uint8_t*)&a)[3] << 0); +#endif +} + +static inline uint32_t lfs_tobe32(uint32_t a) { + return lfs_frombe32(a); +} + +// Calculate CRC-32 with polynomial = 0x04c11db7 +uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size); + +// Allocate memory, only used if buffers are not provided to littlefs +// Note, memory must be 64-bit aligned +static inline void *lfs_malloc(size_t size) { +#ifndef LFS_NO_MALLOC + return malloc(size); +#else + (void)size; + return NULL; +#endif +} + +// Deallocate memory, only used if buffers are not provided to littlefs +static inline void lfs_free(void *p) { +#ifndef LFS_NO_MALLOC + free(p); +#else + (void)p; +#endif +} + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif +#endif diff --git a/tools/sdk/esp32/include/esp_littlefs/src/littlefs_api.h b/tools/sdk/esp32/include/esp_littlefs/src/littlefs_api.h new file mode 100644 index 00000000..135b0597 --- /dev/null +++ b/tools/sdk/esp32/include/esp_littlefs/src/littlefs_api.h @@ -0,0 +1,106 @@ +#ifndef ESP_LITTLEFS_API_H__ +#define ESP_LITTLEFS_API_H__ + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "esp_vfs.h" +#include "esp_partition.h" +#include "littlefs/lfs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief a file descriptor + * That's also a singly linked list used for keeping tracks of all opened file descriptor + * + * Shortcomings/potential issues of 32-bit hash (when CONFIG_LITTLEFS_USE_ONLY_HASH) listed here: + * * unlink - If a different file is open that generates a hash collision, it will report an + * error that it cannot unlink an open file. + * * rename - If a different file is open that generates a hash collision with + * src or dst, it will report an error that it cannot rename an open file. + * Potential consequences: + * 1. A file cannot be deleted while a collision-geneating file is open. + * Worst-case, if the other file is always open during the lifecycle + * of your app, it's collision file cannot be deleted, which in the + * worst-case could cause storage-capacity issues. + * 2. Same as (1), but for renames + */ +typedef struct _vfs_littlefs_file_t { + lfs_file_t file; + uint32_t hash; + struct _vfs_littlefs_file_t * next; /*!< Pointer to next file in Singly Linked List */ +#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH + char * path; +#endif +} vfs_littlefs_file_t; + +/** + * @brief littlefs definition structure + */ +typedef struct { + lfs_t *fs; /*!< Handle to the underlying littlefs */ + SemaphoreHandle_t lock; /*!< FS lock */ + const esp_partition_t* partition; /*!< The partition on which littlefs is located */ + char base_path[ESP_VFS_PATH_MAX+1]; /*!< Mount point */ + + struct lfs_config cfg; /*!< littlefs Mount configuration */ + + vfs_littlefs_file_t *file; /*!< Singly Linked List of files */ + + vfs_littlefs_file_t **cache; /*!< A cache of pointers to the opened files */ + uint16_t cache_size; /*!< The cache allocated size (in pointers) */ + uint16_t fd_count; /*!< The count of opened file descriptor used to speed up computation */ +} esp_littlefs_t; + +/** + * @brief Read a region in a block. + * + * Negative error codes are propogated to the user. + * + * @return errorcode. 0 on success. + */ +int littlefs_api_read(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +/** + * @brief Program a region in a block. + * + * The block must have previously been erased. + * Negative error codes are propogated to the user. + * May return LFS_ERR_CORRUPT if the block should be considered bad. + * + * @return errorcode. 0 on success. + */ +int littlefs_api_prog(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +/** + * @brief Erase a block. + * + * A block must be erased before being programmed. + * The state of an erased block is undefined. + * Negative error codes are propogated to the user. + * May return LFS_ERR_CORRUPT if the block should be considered bad. + * @return errorcode. 0 on success. + */ +int littlefs_api_erase(const struct lfs_config *c, lfs_block_t block); + +/** + * @brief Sync the state of the underlying block device. + * + * Negative error codes are propogated to the user. + * + * @return errorcode. 0 on success. + */ +int littlefs_api_sync(const struct lfs_config *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h b/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h index d9b3c298..ef6e3c51 100644 --- a/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h +++ b/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h @@ -24,7 +24,7 @@ #ifdef CONFIG_LEGACY_INCLUDE_COMMON_HEADERS #include "soc/gpio_reg.h" -#include "soc/gpio_caps.h" +#include "soc/soc_caps.h" #endif #ifdef __cplusplus diff --git a/tools/sdk/esp32/include/esp_rom/include/esp_rom_gpio.h b/tools/sdk/esp32/include/esp_rom/include/esp_rom_gpio.h index fc5f0d22..ce4bb765 100644 --- a/tools/sdk/esp32/include/esp_rom/include/esp_rom_gpio.h +++ b/tools/sdk/esp32/include/esp_rom/include/esp_rom_gpio.h @@ -20,6 +20,7 @@ extern "C" { #include #include +#include "soc/gpio_pins.h" //for GPIO_MATRIX_CONST_ONE_INPUT, GPIO_MATRIX_CONST_ZERO_INPUT /** * @brief Configure IO Pad as General Purpose IO, diff --git a/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h b/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h index 580c3731..46ec68c5 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef INC_FREERTOS_H #define INC_FREERTOS_H @@ -74,7 +32,6 @@ * Include the generic headers required for the FreeRTOS port being used. */ #include -#include "sys/reent.h" /* * If stdint.h cannot be located then: @@ -106,6 +63,15 @@ extern "C" { /* Definitions specific to the port being used. */ #include "portable.h" +/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */ +#ifndef configUSE_NEWLIB_REENTRANT + #define configUSE_NEWLIB_REENTRANT 0 +#endif + +/* Required if struct _reent is used. */ +#if ( configUSE_NEWLIB_REENTRANT == 1 ) + #include +#endif /* * Check all the required application specific macros have been defined. * These macros are application specific and (as downloaded) are defined @@ -120,6 +86,10 @@ extern "C" { #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details. #endif +#if configMAX_PRIORITIES < 1 + #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. +#endif + #ifndef configUSE_PREEMPTION #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif @@ -132,54 +102,44 @@ extern "C" { #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif -#ifndef configUSE_CO_ROUTINES - #error Missing definition: configUSE_CO_ROUTINES must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskPrioritySet - #error Missing definition: INCLUDE_vTaskPrioritySet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_uxTaskPriorityGet - #error Missing definition: INCLUDE_uxTaskPriorityGet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelete - #error Missing definition: INCLUDE_vTaskDelete must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskSuspend - #error Missing definition: INCLUDE_vTaskSuspend must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelayUntil - #error Missing definition: INCLUDE_vTaskDelayUntil must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef INCLUDE_vTaskDelay - #error Missing definition: INCLUDE_vTaskDelay must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - #ifndef configUSE_16_BIT_TICKS #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif -#if configUSE_CO_ROUTINES != 0 - #ifndef configMAX_CO_ROUTINE_PRIORITIES - #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. - #endif +#ifndef configUSE_CO_ROUTINES + #define configUSE_CO_ROUTINES 0 #endif -#ifndef configMAX_PRIORITIES - #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. +#ifndef INCLUDE_vTaskPrioritySet + #define INCLUDE_vTaskPrioritySet 0 +#endif + +#ifndef INCLUDE_uxTaskPriorityGet + #define INCLUDE_uxTaskPriorityGet 0 +#endif + +#ifndef INCLUDE_vTaskDelete + #define INCLUDE_vTaskDelete 0 +#endif + +#ifndef INCLUDE_vTaskSuspend + #define INCLUDE_vTaskSuspend 0 +#endif + +#ifndef INCLUDE_vTaskDelayUntil + #define INCLUDE_vTaskDelayUntil 0 +#endif + +#ifndef INCLUDE_vTaskDelay + #define INCLUDE_vTaskDelay 0 #endif #ifndef INCLUDE_xTaskGetIdleTaskHandle #define INCLUDE_xTaskGetIdleTaskHandle 0 #endif -#ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle - #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 +#ifndef INCLUDE_xTaskAbortDelay + #define INCLUDE_xTaskAbortDelay 0 #endif #ifndef INCLUDE_xQueueGetMutexHolder @@ -190,26 +150,56 @@ extern "C" { #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder #endif -#ifndef INCLUDE_pcTaskGetTaskName - #define INCLUDE_pcTaskGetTaskName 1 -#endif - -#ifndef configUSE_APPLICATION_TASK_TAG - #define configUSE_APPLICATION_TASK_TAG 0 +#ifndef INCLUDE_xTaskGetHandle + #define INCLUDE_xTaskGetHandle 0 #endif #ifndef INCLUDE_uxTaskGetStackHighWaterMark #define INCLUDE_uxTaskGetStackHighWaterMark 0 #endif -#ifndef INCLUDE_pxTaskGetStackStart - #define INCLUDE_pxTaskGetStackStart 0 +#ifndef INCLUDE_uxTaskGetStackHighWaterMark2 + #define INCLUDE_uxTaskGetStackHighWaterMark2 0 #endif #ifndef INCLUDE_eTaskGetState #define INCLUDE_eTaskGetState 0 #endif +#ifndef INCLUDE_xTaskResumeFromISR + #define INCLUDE_xTaskResumeFromISR 1 +#endif + +#ifndef INCLUDE_xTimerPendFunctionCall + #define INCLUDE_xTimerPendFunctionCall 0 +#endif + +#ifndef INCLUDE_xTaskGetSchedulerState + #define INCLUDE_xTaskGetSchedulerState 0 +#endif + +#ifndef INCLUDE_xTaskGetCurrentTaskHandle + #define INCLUDE_xTaskGetCurrentTaskHandle 0 +#endif + +#if configUSE_CO_ROUTINES != 0 + #ifndef configMAX_CO_ROUTINE_PRIORITIES + #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. + #endif +#endif + +#ifndef configUSE_DAEMON_TASK_STARTUP_HOOK + #define configUSE_DAEMON_TASK_STARTUP_HOOK 0 +#endif + +#ifndef configUSE_APPLICATION_TASK_TAG + #define configUSE_APPLICATION_TASK_TAG 0 +#endif + +#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS + #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0 +#endif + #ifndef configUSE_RECURSIVE_MUTEXES #define configUSE_RECURSIVE_MUTEXES 0 #endif @@ -246,18 +236,6 @@ extern "C" { #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h #endif -#ifndef INCLUDE_xTaskResumeFromISR - #define INCLUDE_xTaskResumeFromISR 1 -#endif - -#ifndef INCLUDE_xEventGroupSetBitFromISR - #define INCLUDE_xEventGroupSetBitFromISR 0 -#endif - -#ifndef INCLUDE_xTimerPendFunctionCall - #define INCLUDE_xTimerPendFunctionCall 0 -#endif - #ifndef configASSERT #define configASSERT( x ) #define configASSERT_DEFINED 0 @@ -265,6 +243,22 @@ extern "C" { #define configASSERT_DEFINED 1 #endif +/* configPRECONDITION should be resolve to configASSERT. + The CBMC proofs need a way to track assumptions and assertions. + A configPRECONDITION statement should express an implicit invariant or assumption made. + A configASSERT statement should express an invariant that must hold explicit before calling + the code. */ +#ifndef configPRECONDITION + #define configPRECONDITION( X ) configASSERT(X) + #define configPRECONDITION_DEFINED 0 +#else + #define configPRECONDITION_DEFINED 1 +#endif + +#ifndef portMEMORY_BARRIER + #define portMEMORY_BARRIER() +#endif + /* The timers module relies on xTaskGetSchedulerState(). */ #if configUSE_TIMERS == 1 @@ -282,15 +276,6 @@ extern "C" { #endif /* configUSE_TIMERS */ -#ifndef INCLUDE_xTaskGetSchedulerState - #define INCLUDE_xTaskGetSchedulerState 0 -#endif - -#ifndef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 0 -#endif - - #ifndef portSET_INTERRUPT_MASK_FROM_ISR #define portSET_INTERRUPT_MASK_FROM_ISR() 0 #endif @@ -318,6 +303,7 @@ extern "C" { #if ( configQUEUE_REGISTRY_SIZE < 1 ) #define vQueueAddToRegistry( xQueue, pcName ) #define vQueueUnregisterQueue( xQueue ) + #define pcQueueGetName( xQueue ) #endif #ifndef portPOINTER_SIZE_TYPE @@ -390,6 +376,14 @@ extern "C" { #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) #endif +#ifndef traceBLOCKING_ON_QUEUE_PEEK + /* Task is about to block because it cannot read from a + queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore + upon which the read was attempted. pxCurrentTCB points to the TCB of the + task that attempted the read. */ + #define traceBLOCKING_ON_QUEUE_PEEK( pxQueue ) +#endif + #ifndef traceBLOCKING_ON_QUEUE_SEND /* Task is about to block because it cannot write to a queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore @@ -402,26 +396,22 @@ extern "C" { #define configCHECK_FOR_STACK_OVERFLOW 0 #endif +#ifndef configRECORD_STACK_HIGH_ADDRESS + #define configRECORD_STACK_HIGH_ADDRESS 0 +#endif + +#ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H + #define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H 0 +#endif + /* The following event macros are embedded in the kernel API calls. */ #ifndef traceMOVED_TASK_TO_READY_STATE #define traceMOVED_TASK_TO_READY_STATE( pxTCB ) #endif -#ifndef traceREADDED_TASK_TO_READY_STATE - #define traceREADDED_TASK_TO_READY_STATE( pxTCB ) traceMOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - -#ifndef traceMOVED_TASK_TO_DELAYED_LIST - #define traceMOVED_TASK_TO_DELAYED_LIST() -#endif - -#ifndef traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST - #define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST() -#endif - -#ifndef traceMOVED_TASK_TO_SUSPENDED_LIST - #define traceMOVED_TASK_TO_SUSPENDED_LIST( pxTCB ) +#ifndef tracePOST_MOVED_TASK_TO_READY_STATE + #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) #endif #ifndef traceQUEUE_CREATE @@ -464,6 +454,10 @@ extern "C" { #define traceCREATE_COUNTING_SEMAPHORE_FAILED() #endif +#ifndef traceQUEUE_SEMAPHORE_RECEIVE + #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) +#endif + #ifndef traceQUEUE_SEND #define traceQUEUE_SEND( pxQueue ) #endif @@ -480,6 +474,10 @@ extern "C" { #define traceQUEUE_PEEK( pxQueue ) #endif +#ifndef traceQUEUE_PEEK_FAILED + #define traceQUEUE_PEEK_FAILED( pxQueue ) +#endif + #ifndef traceQUEUE_PEEK_FROM_ISR #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) #endif @@ -512,10 +510,6 @@ extern "C" { #define traceQUEUE_DELETE( pxQueue ) #endif -#ifndef traceTASK_CREATE - #define traceTASK_CREATE( pxNewTCB ) -#endif - #ifndef traceQUEUE_GIVE_FROM_ISR #define traceQUEUE_GIVE_FROM_ISR( pxQueue ) #endif @@ -524,6 +518,10 @@ extern "C" { #define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ) #endif +#ifndef traceTASK_CREATE + #define traceTASK_CREATE( pxNewTCB ) +#endif + #ifndef traceTASK_CREATE_FAILED #define traceTASK_CREATE_FAILED() #endif @@ -533,7 +531,7 @@ extern "C" { #endif #ifndef traceTASK_DELAY_UNTIL - #define traceTASK_DELAY_UNTIL() + #define traceTASK_DELAY_UNTIL( x ) #endif #ifndef traceTASK_DELAY @@ -644,10 +642,86 @@ extern "C" { #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName) #endif +#ifndef traceTASK_NOTIFY_TAKE_BLOCK + #define traceTASK_NOTIFY_TAKE_BLOCK() +#endif + +#ifndef traceTASK_NOTIFY_TAKE + #define traceTASK_NOTIFY_TAKE() +#endif + +#ifndef traceTASK_NOTIFY_WAIT_BLOCK + #define traceTASK_NOTIFY_WAIT_BLOCK() +#endif + +#ifndef traceTASK_NOTIFY_WAIT + #define traceTASK_NOTIFY_WAIT() +#endif + +#ifndef traceTASK_NOTIFY + #define traceTASK_NOTIFY() +#endif + +#ifndef traceTASK_NOTIFY_FROM_ISR + #define traceTASK_NOTIFY_FROM_ISR() +#endif + #ifndef traceTASK_NOTIFY_GIVE_FROM_ISR - #define traceTASK_NOTIFY_GIVE_FROM_ISR() - #endif - + #define traceTASK_NOTIFY_GIVE_FROM_ISR() +#endif + +#ifndef traceSTREAM_BUFFER_CREATE_FAILED + #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_CREATE_STATIC_FAILED + #define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_CREATE + #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_DELETE + #define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_RESET + #define traceSTREAM_BUFFER_RESET( xStreamBuffer ) +#endif + +#ifndef traceBLOCKING_ON_STREAM_BUFFER_SEND + #define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_SEND + #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) +#endif + +#ifndef traceSTREAM_BUFFER_SEND_FAILED + #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_SEND_FROM_ISR + #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) +#endif + +#ifndef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE + #define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_RECEIVE + #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) +#endif + +#ifndef traceSTREAM_BUFFER_RECEIVE_FAILED + #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) +#endif + +#ifndef traceSTREAM_BUFFER_RECEIVE_FROM_ISR + #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) +#endif + #ifndef traceISR_EXIT_TO_SCHEDULER #define traceISR_EXIT_TO_SCHEDULER() #endif @@ -694,14 +768,6 @@ extern "C" { #define portYIELD_WITHIN_API portYIELD #endif -#ifndef pvPortMallocAligned - #define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) ) -#endif - -#ifndef vPortFreeAligned - #define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree ) -#endif - #ifndef portSUPPRESS_TICKS_AND_SLEEP #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) #endif @@ -718,6 +784,10 @@ extern "C" { #define configUSE_TICKLESS_IDLE 0 #endif +#ifndef configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING + #define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x ) +#endif + #ifndef configPRE_SLEEP_PROCESSING #define configPRE_SLEEP_PROCESSING( x ) #endif @@ -734,6 +804,14 @@ extern "C" { #define portTASK_USES_FLOATING_POINT() #endif +#ifndef portALLOCATE_SECURE_CONTEXT + #define portALLOCATE_SECURE_CONTEXT( ulSecureStackSize ) +#endif + +#ifndef portDONT_DISCARD + #define portDONT_DISCARD +#endif + #ifndef configUSE_TIME_SLICING #define configUSE_TIME_SLICING 1 #endif @@ -742,18 +820,10 @@ extern "C" { #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 #endif -#ifndef configUSE_NEWLIB_REENTRANT - #define configUSE_NEWLIB_REENTRANT 0 -#endif - #ifndef configUSE_STATS_FORMATTING_FUNCTIONS #define configUSE_STATS_FORMATTING_FUNCTIONS 0 #endif -#ifndef configTASKLIST_INCLUDE_COREID - #define configTASKLIST_INCLUDE_COREID 0 -#endif - #ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() #endif @@ -766,6 +836,10 @@ extern "C" { #define mtCOVERAGE_TEST_MARKER() #endif +#ifndef mtCOVERAGE_TEST_DELAY + #define mtCOVERAGE_TEST_DELAY() +#endif + #ifndef portASSERT_IF_IN_ISR #define portASSERT_IF_IN_ISR() #endif @@ -782,6 +856,10 @@ extern "C" { #define configUSE_TASK_NOTIFICATIONS 1 #endif +#ifndef configUSE_POSIX_ERRNO + #define configUSE_POSIX_ERRNO 0 +#endif + #ifndef portTICK_TYPE_IS_ATOMIC #define portTICK_TYPE_IS_ATOMIC 0 #endif @@ -796,10 +874,38 @@ extern "C" { #define configSUPPORT_DYNAMIC_ALLOCATION 1 #endif +#ifndef configSTACK_DEPTH_TYPE + /* Defaults to uint16_t for backward compatibility, but can be overridden + in FreeRTOSConfig.h if uint16_t is too restrictive. */ + #define configSTACK_DEPTH_TYPE uint16_t +#endif + +#ifndef configMESSAGE_BUFFER_LENGTH_TYPE + /* Defaults to size_t for backward compatibility, but can be overridden + in FreeRTOSConfig.h if lengths will always be less than the number of bytes + in a size_t. */ + #define configMESSAGE_BUFFER_LENGTH_TYPE size_t +#endif + +/* Sanity check the configuration. */ +#if( configUSE_TICKLESS_IDLE != 0 ) + #if( INCLUDE_vTaskSuspend != 1 ) + #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0 + #endif /* INCLUDE_vTaskSuspend */ +#endif /* configUSE_TICKLESS_IDLE */ + #if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) ) #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1. #endif +#if( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) ) + #error configUSE_MUTEXES must be set to 1 to use recursive mutexes +#endif + +#ifndef configINITIAL_TICK_COUNT + #define configINITIAL_TICK_COUNT 0 +#endif + #if( portTICK_TYPE_IS_ATOMIC == 0 ) /* Either variables of tick type cannot be read atomically, or portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when @@ -823,6 +929,32 @@ V8 if desired. */ #define configENABLE_BACKWARD_COMPATIBILITY 1 #endif +#ifndef configPRINTF + /* configPRINTF() was not defined, so define it away to nothing. To use + configPRINTF() then define it as follows (where MyPrintFunction() is + provided by the application writer): + + void MyPrintFunction(const char *pcFormat, ... ); + #define configPRINTF( X ) MyPrintFunction X + + Then call like a standard printf() function, but placing brackets around + all parameters so they are passed as a single parameter. For example: + configPRINTF( ("Value = %d", MyVariable) ); */ + #define configPRINTF( X ) +#endif + +#ifndef configMAX + /* The application writer has not provided their own MAX macro, so define + the following generic implementation. */ + #define configMAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) +#endif + +#ifndef configMIN + /* The application writer has not provided their own MAX macro, so define + the following generic implementation. */ + #define configMIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) +#endif + #if configENABLE_BACKWARD_COMPATIBILITY == 1 #define eTaskStateGet eTaskGetState #define portTickType TickType_t @@ -839,6 +971,10 @@ V8 if desired. */ #define xCoRoutineHandle CoRoutineHandle_t #define pdTASK_HOOK_CODE TaskHookFunction_t #define portTICK_RATE_MS portTICK_PERIOD_MS + #define pcTaskGetTaskName pcTaskGetName + #define pcTimerGetTimerName pcTimerGetName + #define pcQueueGetQueueName pcQueueGetName + #define vTaskGetTaskInfo vTaskGetInfo /* Backward compatibility within the scheduler code only - these definitions are not really required but are included for completeness. */ @@ -846,12 +982,97 @@ V8 if desired. */ #define pdTASK_CODE TaskFunction_t #define xListItem ListItem_t #define xList List_t + + /* For libraries that break the list data hiding, and access list structure + members directly (which is not supposed to be done). */ + #define pxContainer pvContainer #endif /* configENABLE_BACKWARD_COMPATIBILITY */ #ifndef configESP32_PER_TASK_DATA #define configESP32_PER_TASK_DATA 1 #endif +#if( configUSE_ALTERNATIVE_API != 0 ) + #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0 +#endif + +/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even +if floating point hardware is otherwise supported by the FreeRTOS port in use. +This constant is not supported by all FreeRTOS ports that include floating +point support. */ +#ifndef configUSE_TASK_FPU_SUPPORT + #define configUSE_TASK_FPU_SUPPORT 1 +#endif + +/* Set configENABLE_MPU to 1 to enable MPU support and 0 to disable it. This is +currently used in ARMv8M ports. */ +#ifndef configENABLE_MPU + #define configENABLE_MPU 0 +#endif + +/* Set configENABLE_FPU to 1 to enable FPU support and 0 to disable it. This is +currently used in ARMv8M ports. */ +#ifndef configENABLE_FPU + #define configENABLE_FPU 1 +#endif + +/* Set configENABLE_TRUSTZONE to 1 enable TrustZone support and 0 to disable it. +This is currently used in ARMv8M ports. */ +#ifndef configENABLE_TRUSTZONE + #define configENABLE_TRUSTZONE 1 +#endif + +/* Set configRUN_FREERTOS_SECURE_ONLY to 1 to run the FreeRTOS ARMv8M port on +the Secure Side only. */ +#ifndef configRUN_FREERTOS_SECURE_ONLY + #define configRUN_FREERTOS_SECURE_ONLY 0 +#endif + +/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using + * dynamically allocated RAM, in which case when any task is deleted it is known + * that both the task's stack and TCB need to be freed. Sometimes the + * FreeRTOSConfig.h settings only allow a task to be created using statically + * allocated RAM, in which case when any task is deleted it is known that neither + * the task's stack or TCB should be freed. Sometimes the FreeRTOSConfig.h + * settings allow a task to be created using either statically or dynamically + * allocated RAM, in which case a member of the TCB is used to record whether the + * stack and/or TCB were allocated statically or dynamically, so when a task is + * deleted the RAM that was allocated dynamically is freed again and no attempt is + * made to free the RAM that was allocated statically. + * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a + * task to be created using either statically or dynamically allocated RAM. Note + * that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with + * a statically allocated stack and a dynamically allocated TCB. + * + * The following table lists various combinations of portUSING_MPU_WRAPPERS, + * configSUPPORT_DYNAMIC_ALLOCATION and configSUPPORT_STATIC_ALLOCATION and + * when it is possible to have both static and dynamic allocation: + * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ + * | MPU | Dynamic | Static | Available Functions | Possible Allocations | Both Dynamic and | Need Free | + * | | | | | | Static Possible | | + * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ + * | 0 | 0 | 1 | xTaskCreateStatic | TCB - Static, Stack - Static | No | No | + * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| + * | 0 | 1 | 0 | xTaskCreate | TCB - Dynamic, Stack - Dynamic | No | Yes | + * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| + * | 0 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | + * | | | | xTaskCreateStatic | 2. TCB - Static, Stack - Static | | | + * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| + * | 1 | 0 | 1 | xTaskCreateStatic, | TCB - Static, Stack - Static | No | No | + * | | | | xTaskCreateRestrictedStatic | | | | + * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| + * | 1 | 1 | 0 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | + * | | | | xTaskCreateRestricted | 2. TCB - Dynamic, Stack - Static | | | + * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| + * | 1 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | + * | | | | xTaskCreateStatic, | 2. TCB - Dynamic, Stack - Static | | | + * | | | | xTaskCreateRestricted, | 3. TCB - Static, Stack - Static | | | + * | | | | xTaskCreateRestrictedStatic | | | | + * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ + */ +#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( portUSING_MPU_WRAPPERS == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) || \ + ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) ) + /* * In line with software engineering best practice, FreeRTOS implements a strict * data hiding policy, so the real structures used by FreeRTOS to maintain the @@ -864,25 +1085,40 @@ V8 if desired. */ */ struct xSTATIC_LIST_ITEM { - TickType_t xDummy1; - void *pvDummy2[ 4 ]; + #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) + TickType_t xDummy1; + #endif + TickType_t xDummy2; + void *pvDummy3[ 4 ]; + #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) + TickType_t xDummy4; + #endif }; typedef struct xSTATIC_LIST_ITEM StaticListItem_t; /* See the comments above the struct xSTATIC_LIST_ITEM definition. */ struct xSTATIC_MINI_LIST_ITEM { - TickType_t xDummy1; - void *pvDummy2[ 2 ]; + #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) + TickType_t xDummy1; + #endif + TickType_t xDummy2; + void *pvDummy3[ 2 ]; }; typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t; /* See the comments above the struct xSTATIC_LIST_ITEM definition. */ typedef struct xSTATIC_LIST { - UBaseType_t uxDummy1; - void *pvDummy2; - StaticMiniListItem_t xDummy3; + #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) + TickType_t xDummy1; + #endif + UBaseType_t uxDummy2; + void *pvDummy3; + StaticMiniListItem_t xDummy4; + #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) + TickType_t xDummy5; + #endif } StaticList_t; /* @@ -908,13 +1144,12 @@ typedef struct xSTATIC_TCB UBaseType_t uxDummy5; void *pxDummy6; uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ]; - UBaseType_t uxDummyCoreId; - #if ( portSTACK_GROWTH > 0 || configENABLE_TASK_SNAPSHOT == 1 ) - void *pxDummy8; + BaseType_t xDummyCore; + #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) ) + void *pxDummy8; #endif #if ( portCRITICAL_NESTING_IN_TCB == 1 ) UBaseType_t uxDummy9; - uint32_t OldInterruptState; #endif #if ( configUSE_TRACE_FACILITY == 1 ) UBaseType_t uxDummy10[ 2 ]; @@ -927,7 +1162,7 @@ typedef struct xSTATIC_TCB #endif #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #if ( configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS ) + #if ( configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS ) void *pvDummyLocalStorageCallBack[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; #endif #endif @@ -939,13 +1174,18 @@ typedef struct xSTATIC_TCB #endif #if ( configUSE_TASK_NOTIFICATIONS == 1 ) uint32_t ulDummy18; - uint32_t ucDummy19; + uint8_t ucDummy19; #endif - #if( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) \ - || ( portUSING_MPU_WRAPPERS == 1 ) ) + #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) uint8_t uxDummy20; #endif + #if( INCLUDE_xTaskAbortDelay == 1 ) + uint8_t ucDummy21; + #endif + #if ( configUSE_POSIX_ERRNO == 1 ) + int iDummy22; + #endif } StaticTask_t; /* @@ -974,6 +1214,7 @@ typedef struct xSTATIC_QUEUE StaticList_t xDummy3[ 2 ]; UBaseType_t uxDummy4[ 3 ]; + uint8_t ucDummy5[ 2 ]; #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) uint8_t ucDummy6; @@ -988,7 +1229,7 @@ typedef struct xSTATIC_QUEUE uint8_t ucDummy9; #endif - portMUX_TYPE muxDummy; //Mutex required due to SMP + portMUX_TYPE xDummy10; } StaticQueue_t; typedef StaticQueue_t StaticSemaphore_t; @@ -1020,7 +1261,7 @@ typedef struct xSTATIC_EVENT_GROUP uint8_t ucDummy4; #endif - portMUX_TYPE muxDummy; //Mutex required due to SMP + portMUX_TYPE xDummy5; } StaticEventGroup_t; @@ -1043,18 +1284,44 @@ typedef struct xSTATIC_TIMER void *pvDummy1; StaticListItem_t xDummy2; TickType_t xDummy3; - UBaseType_t uxDummy4; - void *pvDummy5[ 2 ]; + void *pvDummy5; + TaskFunction_t pvDummy6; #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy6; + UBaseType_t uxDummy7; #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy7; - #endif - + uint8_t ucDummy8; } StaticTimer_t; +/* +* In line with software engineering best practice, especially when supplying a +* library that is likely to change in future versions, FreeRTOS implements a +* strict data hiding policy. This means the stream buffer structure used +* internally by FreeRTOS is not accessible to application code. However, if +* the application writer wants to statically allocate the memory required to +* create a stream buffer then the size of the stream buffer object needs to be +* know. The StaticStreamBuffer_t structure below is provided for this purpose. +* Its size and alignment requirements are guaranteed to match those of the +* genuine structure, no matter which architecture is being used, and no matter +* how the values in FreeRTOSConfig.h are set. Its contents are somewhat +* obfuscated in the hope users will recognise that it would be unwise to make +* direct use of the structure members. +*/ +typedef struct xSTATIC_STREAM_BUFFER +{ + size_t uxDummy1[ 4 ]; + void * pvDummy2[ 3 ]; + uint8_t ucDummy3; + #if ( configUSE_TRACE_FACILITY == 1 ) + UBaseType_t uxDummy4; + #endif + + portMUX_TYPE xDummy5; + +} StaticStreamBuffer_t; + +/* Message buffers are built on stream buffers. */ +typedef StaticStreamBuffer_t StaticMessageBuffer_t; + #ifdef __cplusplus } #endif diff --git a/tools/sdk/esp32/include/freertos/include/freertos/atomic.h b/tools/sdk/esp32/include/freertos/include/freertos/atomic.h new file mode 100644 index 00000000..2b388775 --- /dev/null +++ b/tools/sdk/esp32/include/freertos/include/freertos/atomic.h @@ -0,0 +1,418 @@ +/* + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ + +/** + * @file atomic.h + * @brief FreeRTOS atomic operation support. + * + * This file implements atomic by disabling interrupts globally. + * Implementation with architecture specific atomic instructions + * are to be provided under each compiler directory. + */ + +#ifndef ATOMIC_H +#define ATOMIC_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include atomic.h" +#endif + +/* Standard includes. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Port specific definitions -- entering/exiting critical section. + * Refer template -- ./lib/FreeRTOS/portable/Compiler/Arch/portmacro.h + * + * Every call to ATOMIC_EXIT_CRITICAL() must be closely paired with + * ATOMIC_ENTER_CRITICAL(). + * */ +#if defined( portSET_INTERRUPT_MASK_FROM_ISR ) + + /* Nested interrupt scheme is supported in this port. */ + #define ATOMIC_ENTER_CRITICAL() \ + UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR() + + #define ATOMIC_EXIT_CRITICAL() \ + portCLEAR_INTERRUPT_MASK_FROM_ISR( uxCriticalSectionType ) + +#else + + /* Nested interrupt scheme is NOT supported in this port. */ + #define ATOMIC_ENTER_CRITICAL() portENTER_CRITICAL() + #define ATOMIC_EXIT_CRITICAL() portEXIT_CRITICAL() + +#endif /* portSET_INTERRUPT_MASK_FROM_ISR() */ + +/* Port specific definition -- "always inline". + * Inline is compiler specific, and may not always get inlined depending on your optimization level. + * Also, inline is considerred as performance optimization for atomic. + * Thus, if portFORCE_INLINE is not provided by portmacro.h, instead of resulting error, + * simply define it. + */ +#ifndef portFORCE_INLINE + #define portFORCE_INLINE +#endif + +#define ATOMIC_COMPARE_AND_SWAP_SUCCESS 0x1U /**< Compare and swap succeeded, swapped. */ +#define ATOMIC_COMPARE_AND_SWAP_FAILURE 0x0U /**< Compare and swap failed, did not swap. */ + +/*----------------------------- Swap && CAS ------------------------------*/ + +/** + * Atomic compare-and-swap + * + * @brief Performs an atomic compare-and-swap operation on the specified values. + * + * @param[in, out] pDestination Pointer to memory location from where value is + * to be loaded and checked. + * @param[in] ulExchange If condition meets, write this value to memory. + * @param[in] ulComparand Swap condition. + * + * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped. + * + * @note This function only swaps *pDestination with ulExchange, if previous + * *pDestination value equals ulComparand. + */ +static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( + uint32_t volatile * pDestination, + uint32_t ulExchange, + uint32_t ulComparand ) +{ + + uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE; + + ATOMIC_ENTER_CRITICAL(); + + if ( *pDestination == ulComparand ) + { + *pDestination = ulExchange; + ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS; + } + + ATOMIC_EXIT_CRITICAL(); + + return ulReturnValue; + +} + +/** + * Atomic swap (pointers) + * + * @brief Atomically sets the address pointed to by *ppDestination to the value + * of *pExchange. + * + * @param[in, out] ppDestination Pointer to memory location from where a pointer + * value is to be loaded and written back to. + * @param[in] pExchange Pointer value to be written to *ppDestination. + * + * @return The initial value of *ppDestination. + */ +static portFORCE_INLINE void * Atomic_SwapPointers_p32( + void * volatile * ppDestination, + void * pExchange ) +{ + void * pReturnValue; + + ATOMIC_ENTER_CRITICAL(); + + pReturnValue = *ppDestination; + + *ppDestination = pExchange; + + ATOMIC_EXIT_CRITICAL(); + + return pReturnValue; +} + +/** + * Atomic compare-and-swap (pointers) + * + * @brief Performs an atomic compare-and-swap operation on the specified pointer + * values. + * + * @param[in, out] ppDestination Pointer to memory location from where a pointer + * value is to be loaded and checked. + * @param[in] pExchange If condition meets, write this value to memory. + * @param[in] pComparand Swap condition. + * + * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped. + * + * @note This function only swaps *ppDestination with pExchange, if previous + * *ppDestination value equals pComparand. + */ +static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32( + void * volatile * ppDestination, + void * pExchange, void * pComparand ) +{ + uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE; + + ATOMIC_ENTER_CRITICAL(); + + if ( *ppDestination == pComparand ) + { + *ppDestination = pExchange; + ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS; + } + + ATOMIC_EXIT_CRITICAL(); + + return ulReturnValue; +} + + +/*----------------------------- Arithmetic ------------------------------*/ + +/** + * Atomic add + * + * @brief Atomically adds count to the value of the specified pointer points to. + * + * @param[in,out] pAddend Pointer to memory location from where value is to be + * loaded and written back to. + * @param[in] ulCount Value to be added to *pAddend. + * + * @return previous *pAddend value. + */ +static portFORCE_INLINE uint32_t Atomic_Add_u32( + uint32_t volatile * pAddend, + uint32_t ulCount ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pAddend; + + *pAddend += ulCount; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic subtract + * + * @brief Atomically subtracts count from the value of the specified pointer + * pointers to. + * + * @param[in,out] pAddend Pointer to memory location from where value is to be + * loaded and written back to. + * @param[in] ulCount Value to be subtract from *pAddend. + * + * @return previous *pAddend value. + */ +static portFORCE_INLINE uint32_t Atomic_Subtract_u32( + uint32_t volatile * pAddend, + uint32_t ulCount ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pAddend; + + *pAddend -= ulCount; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic increment + * + * @brief Atomically increments the value of the specified pointer points to. + * + * @param[in,out] pAddend Pointer to memory location from where value is to be + * loaded and written back to. + * + * @return *pAddend value before increment. + */ +static portFORCE_INLINE uint32_t Atomic_Increment_u32( uint32_t volatile * pAddend ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pAddend; + + *pAddend += 1; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic decrement + * + * @brief Atomically decrements the value of the specified pointer points to + * + * @param[in,out] pAddend Pointer to memory location from where value is to be + * loaded and written back to. + * + * @return *pAddend value before decrement. + */ +static portFORCE_INLINE uint32_t Atomic_Decrement_u32( uint32_t volatile * pAddend ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pAddend; + + *pAddend -= 1; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/*----------------------------- Bitwise Logical ------------------------------*/ + +/** + * Atomic OR + * + * @brief Performs an atomic OR operation on the specified values. + * + * @param [in, out] pDestination Pointer to memory location from where value is + * to be loaded and written back to. + * @param [in] ulValue Value to be ORed with *pDestination. + * + * @return The original value of *pDestination. + */ +static portFORCE_INLINE uint32_t Atomic_OR_u32( + uint32_t volatile * pDestination, + uint32_t ulValue ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pDestination; + + *pDestination |= ulValue; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic AND + * + * @brief Performs an atomic AND operation on the specified values. + * + * @param [in, out] pDestination Pointer to memory location from where value is + * to be loaded and written back to. + * @param [in] ulValue Value to be ANDed with *pDestination. + * + * @return The original value of *pDestination. + */ +static portFORCE_INLINE uint32_t Atomic_AND_u32( + uint32_t volatile * pDestination, + uint32_t ulValue ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pDestination; + + *pDestination &= ulValue; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic NAND + * + * @brief Performs an atomic NAND operation on the specified values. + * + * @param [in, out] pDestination Pointer to memory location from where value is + * to be loaded and written back to. + * @param [in] ulValue Value to be NANDed with *pDestination. + * + * @return The original value of *pDestination. + */ +static portFORCE_INLINE uint32_t Atomic_NAND_u32( + uint32_t volatile * pDestination, + uint32_t ulValue ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pDestination; + + *pDestination = ~(ulCurrent & ulValue); + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +/** + * Atomic XOR + * + * @brief Performs an atomic XOR operation on the specified values. + * + * @param [in, out] pDestination Pointer to memory location from where value is + * to be loaded and written back to. + * @param [in] ulValue Value to be XORed with *pDestination. + * + * @return The original value of *pDestination. + */ +static portFORCE_INLINE uint32_t Atomic_XOR_u32( + uint32_t volatile * pDestination, + uint32_t ulValue ) +{ + uint32_t ulCurrent; + + ATOMIC_ENTER_CRITICAL(); + + ulCurrent = *pDestination; + + *pDestination ^= ulValue; + + ATOMIC_EXIT_CRITICAL(); + + return ulCurrent; +} + +#ifdef __cplusplus +} +#endif + +#endif /* ATOMIC_H */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/croutine.h b/tools/sdk/esp32/include/freertos/include/freertos/croutine.h index 7dfd4b8c..8b3b41b9 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/croutine.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/croutine.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef CO_ROUTINE_H #define CO_ROUTINE_H diff --git a/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h b/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h index dc061f33..9cece988 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef DEPRECATED_DEFINITIONS_H #define DEPRECATED_DEFINITIONS_H @@ -82,12 +40,12 @@ projects should not use them. */ #ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT #include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h" - typedef void ( __interrupt __far *pxISR )(void); + typedef void ( __interrupt __far *pxISR )(); #endif #ifdef OPEN_WATCOM_FLASH_LITE_186_PORT #include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h" - typedef void ( __interrupt __far *pxISR )(void); + typedef void ( __interrupt __far *pxISR )(); #endif #ifdef GCC_MEGA_AVR @@ -255,7 +213,7 @@ projects should not use them. */ FreeRTOSConfig.h when using the Borland compiler. */ #include "frconfig.h" #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(void); + typedef void ( __interrupt __far *pxISR )(); #endif #ifdef BCC_FLASH_LITE_186_PORT @@ -263,7 +221,7 @@ projects should not use them. */ FreeRTOSConfig.h when using the Borland compiler. */ #include "frconfig.h" #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" - typedef void ( __interrupt __far *pxISR )(void); + typedef void ( __interrupt __far *pxISR )(); #endif #ifdef __GNUC__ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h b/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h index eda24563..3aa839fc 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef EVENT_GROUPS_H #define EVENT_GROUPS_H @@ -74,6 +32,7 @@ #error "include FreeRTOS.h" must appear in source files before "include event_groups.h" #endif +/* FreeRTOS includes. */ #include "timers.h" #ifdef __cplusplus @@ -115,25 +74,31 @@ extern "C" { * xEventGroupCreate() returns an EventGroupHandle_t variable that can then * be used as a parameter to other event group functions. * + * \defgroup EventGroupHandle_t EventGroupHandle_t * \ingroup EventGroup */ +struct EventGroupDef_t; +//typedef struct EventGroupDef_t * EventGroupHandle_t; typedef void * EventGroupHandle_t; -/* +/* * The type that holds event bits always matches TickType_t - therefore the * number of bits it holds is set by configUSE_16_BIT_TICKS (16 bits if set to 1, - * 32 bits if set to 0. + * 32 bits if set to 0. * + * \defgroup EventBits_t EventBits_t * \ingroup EventGroup */ typedef TickType_t EventBits_t; /** + * + * * Create a new event group. * * Internally, within the FreeRTOS implementation, event groups use a [small] * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGroupCreate() then the required memory is + * groups is created using xEventGropuCreate() then the required memory is * automatically dynamically allocated inside the xEventGroupCreate() function. * (see http://www.freertos.org/a00111.html). If an event group is created * using xEventGropuCreateStatic() then the application writer must instead @@ -311,6 +276,7 @@ typedef TickType_t EventBits_t; EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** + * * Clear bits within an event group. This function cannot be called from an * interrupt. * @@ -362,6 +328,7 @@ EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; /** + * * A version of xEventGroupClearBits() that can be called from an interrupt. * * Setting bits in an event group is not a deterministic operation because there @@ -370,8 +337,8 @@ EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBit * while interrupts are disabled, so protects event groups that are accessed * from tasks by suspending the scheduler rather than disabling interrupts. As * a result event groups cannot be accessed directly from an interrupt service - * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the - * timer task to have the clear operation performed in the context of the timer + * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the + * timer task to have the clear operation performed in the context of the timer * task. * * @param xEventGroup The event group in which the bits are to be cleared. @@ -380,8 +347,8 @@ EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBit * For example, to clear bit 3 only, set uxBitsToClear to 0x08. To clear bit 3 * and bit 0 set uxBitsToClear to 0x09. * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned + * @return If the request to execute the function was posted successfully then + * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned * if the timer service queue was full. * * Example usage: @@ -409,12 +376,13 @@ EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBit * \ingroup EventGroup */ #if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ); + BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; #else #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ) #endif /** + * * Set bits within an event group. * This function cannot be called from an interrupt. xEventGroupSetBitsFromISR() * is a version that can be called from an interrupt. @@ -483,12 +451,13 @@ EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBit EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; /** + * * A version of xEventGroupSetBits() that can be called from an interrupt. * * Setting bits in an event group is not a deterministic operation because there * are an unknown number of tasks that may be waiting for the bit or bits being * set. FreeRTOS does not allow nondeterministic operations to be performed in - * interrupts or from critical sections. Therefore xEventGroupSetBitFromISR() + * interrupts or from critical sections. Therefore xEventGroupSetBitsFromISR() * sends a message to the timer task to have the set operation performed in the * context of the timer task - where a scheduler lock is used in place of a * critical section. @@ -509,8 +478,8 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_ * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the * example code below. * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned + * @return If the request to execute the function was posted successfully then + * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned * if the timer service queue was full. * * Example usage: @@ -549,12 +518,13 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_ * \ingroup EventGroup */ #if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ); + BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; #else #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ) #endif /** + * * Atomically set bits within an event group, then wait for a combination of * bits to be set within the same event group. This functionality is typically * used to synchronise multiple tasks, where each task has to wait for the other @@ -625,7 +595,7 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_ * // All three tasks reached the synchronisation point before the call * // to xEventGroupSync() timed out. * } - * } + * } * } * * void vTask1( void *pvParameters ) @@ -663,7 +633,7 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_ * // xEventGroupSync() was called with an indefinite block time, so * // this task will only reach here if the syncrhonisation was made by all * // three tasks, so there is no need to test the return value. - * } + * } * } * * @endcode @@ -673,6 +643,7 @@ EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t u /** + * * Returns the current value of the bits in an event group. This function * cannot be used from an interrupt. * @@ -685,6 +656,7 @@ EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t u #define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 ) /** + * * A version of xEventGroupGetBits() that can be called from an ISR. * * @param xEventGroup The event group being queried. @@ -693,26 +665,27 @@ EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t u * * \ingroup EventGroup */ -EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ); +EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; /** - * * Delete an event group that was previously created by a call to * xEventGroupCreate(). Tasks that are blocked on the event group will be * unblocked and obtain 0 as the event group's value. * * @param xEventGroup The event group being deleted. */ -void vEventGroupDelete( EventGroupHandle_t xEventGroup ); +void vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; /** @cond */ /* For internal use only. */ -void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ); -void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ); +void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION; +void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION; + #if (configUSE_TRACE_FACILITY == 1) - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ); + UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) PRIVILEGED_FUNCTION; + void vEventGroupSetNumber( void* xEventGroup, UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION; #endif /** @endcond */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/list.h b/tools/sdk/esp32/include/freertos/include/freertos/list.h index 8606deba..73b4f3aa 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/list.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/list.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ /* * This is the list implementation used by the scheduler. While it is tailored @@ -178,52 +136,40 @@ use of FreeRTOS.*/ /* * Definition of the only type of object that a list can contain. */ +struct xLIST; struct xLIST_ITEM { - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ - void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ - listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + struct xLIST * configLIST_VOLATILE pxContainer; /*< Pointer to the list in which this list item is placed (if any). */ + listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ }; typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ -#if __GNUC_PREREQ(4, 6) -_Static_assert(sizeof(StaticListItem_t) == sizeof(ListItem_t), "StaticListItem_t != ListItem_t"); -#endif - struct xMINI_LIST_ITEM { - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ configLIST_VOLATILE TickType_t xItemValue; struct xLIST_ITEM * configLIST_VOLATILE pxNext; struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; }; typedef struct xMINI_LIST_ITEM MiniListItem_t; -#if __GNUC_PREREQ(4, 6) -_Static_assert(sizeof(StaticMiniListItem_t) == sizeof(MiniListItem_t), "StaticMiniListItem_t != MiniListItem_t"); -#endif - - /* * Definition of the type of queue used by the scheduler. */ typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE UBaseType_t uxNumberOfItems; - ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ - MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ + volatile UBaseType_t uxNumberOfItems; + ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ + MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ } List_t; -#if __GNUC_PREREQ(4, 6) -_Static_assert(sizeof(StaticList_t) == sizeof(List_t), "StaticList_t != List_t"); -#endif - /* * Access macro to set the owner of a list item. The owner of a list item * is the object (usually a TCB) that contains the list item. @@ -237,7 +183,7 @@ _Static_assert(sizeof(StaticList_t) == sizeof(List_t), "StaticList_t != List_t") * Access macro to get the owner of a list item. The owner of a list item * is the object (usually a TCB) that contains the list item. * - * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER + * \page listGET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER * \ingroup LinkedList */ #define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner ) @@ -279,7 +225,7 @@ _Static_assert(sizeof(StaticList_t) == sizeof(List_t), "StaticList_t != List_t") #define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext ) /* - * Return the list item at the head of the list. + * Return the next list item. * * \page listGET_NEXT listGET_NEXT * \ingroup LinkedList @@ -301,7 +247,7 @@ _Static_assert(sizeof(StaticList_t) == sizeof(List_t), "StaticList_t != List_t") * \page listLIST_IS_EMPTY listLIST_IS_EMPTY * \ingroup LinkedList */ -#define listLIST_IS_EMPTY( pxList ) ( ( BaseType_t ) ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ) +#define listLIST_IS_EMPTY( pxList ) ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE ) /* * Access macro to return the number of items in the list. @@ -369,7 +315,7 @@ List_t * const pxConstList = ( pxList ); \ * @param pxListItem The list item we want to know if is in the list. * @return pdTRUE if the list item is in the list, otherwise pdFALSE. */ -#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( BaseType_t ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) ) +#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) ) /* * Return the list a list item is contained within (referenced from). @@ -377,7 +323,7 @@ List_t * const pxConstList = ( pxList ); \ * @param pxListItem The list item being queried. * @return A pointer to the List_t object that references the pxListItem */ -#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pvContainer ) +#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pxContainer ) /* * This provides a crude means of knowing if a list has been initialised, as @@ -396,7 +342,7 @@ List_t * const pxConstList = ( pxList ); \ * \page vListInitialise vListInitialise * \ingroup LinkedList */ -void vListInitialise( List_t * const pxList ); +void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION; /* * Must be called before a list item is used. This sets the list container to @@ -407,7 +353,7 @@ void vListInitialise( List_t * const pxList ); * \page vListInitialiseItem vListInitialiseItem * \ingroup LinkedList */ -void vListInitialiseItem( ListItem_t * const pxItem ); +void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION; /* * Insert a list item into a list. The item will be inserted into the list in @@ -420,19 +366,19 @@ void vListInitialiseItem( ListItem_t * const pxItem ); * \page vListInsert vListInsert * \ingroup LinkedList */ -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ); +void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; /* * Insert a list item into a list. The item will be inserted in a position * such that it will be the last item within the list returned by multiple * calls to listGET_OWNER_OF_NEXT_ENTRY. * - * The list member pvIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list. + * The list member pxIndex is used to walk through a list. Calling + * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list. * Placing an item in a list using vListInsertEnd effectively places the item - * in the list position pointed to by pvIndex. This means that every other + * in the list position pointed to by pxIndex. This means that every other * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before - * the pvIndex parameter again points to the item being inserted. + * the pxIndex parameter again points to the item being inserted. * * @param pxList The list into which the item is to be inserted. * @@ -441,7 +387,7 @@ void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ); * \page vListInsertEnd vListInsertEnd * \ingroup LinkedList */ -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ); +void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; /* * Remove an item from a list. The list item has a pointer to the list that @@ -456,7 +402,7 @@ void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ); * \page uxListRemove uxListRemove * \ingroup LinkedList */ -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ); +UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; #ifdef __cplusplus } diff --git a/tools/sdk/esp32/include/freertos/include/freertos/message_buffer.h b/tools/sdk/esp32/include/freertos/include/freertos/message_buffer.h new file mode 100644 index 00000000..83869582 --- /dev/null +++ b/tools/sdk/esp32/include/freertos/include/freertos/message_buffer.h @@ -0,0 +1,702 @@ +/* + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ + + +/* + * Message buffers build functionality on top of FreeRTOS stream buffers. + * Whereas stream buffers are used to send a continuous stream of data from one + * task or interrupt to another, message buffers are used to send variable + * length discrete messages from one task or interrupt to another. Their + * implementation is light weight, making them particularly suited for interrupt + * to task and core to core communication scenarios. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xMessageBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xMessageBufferRead()) inside a critical section and set the receive + * timeout to 0. + * + * Message buffers hold variable length messages. To enable that, when a + * message is written to the message buffer an additional sizeof( size_t ) bytes + * are also written to store the message's length (that happens internally, with + * the API function). sizeof( size_t ) is typically 4 bytes on a 32-bit + * architecture, so writing a 10 byte message to a message buffer on a 32-bit + * architecture will actually reduce the available space in the message buffer + * by 14 bytes (10 byte are used by the message, and 4 bytes to hold the length + * of the message). + */ + +#ifndef FREERTOS_MESSAGE_BUFFER_H +#define FREERTOS_MESSAGE_BUFFER_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include message_buffer.h" +#endif + +/* Message buffers are built onto of stream buffers. */ +#include "stream_buffer.h" + +#if defined( __cplusplus ) +extern "C" { +#endif + +/** + * Type by which message buffers are referenced. For example, a call to + * xMessageBufferCreate() returns an MessageBufferHandle_t variable that can + * then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(), + * etc. + */ +typedef void * MessageBufferHandle_t; + +/*-----------------------------------------------------------*/ + +/** + * Creates a new message buffer using dynamically allocated memory. See + * xMessageBufferCreateStatic() for a version that uses statically allocated + * memory (memory that is allocated at compile time). + * + * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in + * FreeRTOSConfig.h for xMessageBufferCreate() to be available. + * + * @param xBufferSizeBytes The total number of bytes (not messages) the message + * buffer will be able to hold at any one time. When a message is written to + * the message buffer an additional sizeof( size_t ) bytes are also written to + * store the message's length. sizeof( size_t ) is typically 4 bytes on a + * 32-bit architecture, so on most 32-bit architectures a 10 byte message will + * take up 14 bytes of message buffer space. + * + * @return If NULL is returned, then the message buffer cannot be created + * because there is insufficient heap memory available for FreeRTOS to allocate + * the message buffer data structures and storage area. A non-NULL value being + * returned indicates that the message buffer has been created successfully - + * the returned value should be stored as the handle to the created message + * buffer. + * + * Example use: + * @code{c} + * + * void vAFunction( void ) + * { + * MessageBufferHandle_t xMessageBuffer; + * const size_t xMessageBufferSizeBytes = 100; + * + * // Create a message buffer that can hold 100 bytes. The memory used to hold + * // both the message buffer structure and the messages themselves is allocated + * // dynamically. Each message added to the buffer consumes an additional 4 + * // bytes which are used to hold the lengh of the message. + * xMessageBuffer = xMessageBufferCreate( xMessageBufferSizeBytes ); + * + * if( xMessageBuffer == NULL ) + * { + * // There was not enough heap memory space available to create the + * // message buffer. + * } + * else + * { + * // The message buffer was created successfully and can now be used. + * } + * + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferCreate( xBufferSizeBytes ) ( MessageBufferHandle_t ) xStreamBufferGenericCreate( xBufferSizeBytes, ( size_t ) 0, pdTRUE ) + +/** + * Creates a new message buffer using statically allocated memory. See + * xMessageBufferCreate() for a version that uses dynamically allocated memory. + * + * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the + * pucMessageBufferStorageArea parameter. When a message is written to the + * message buffer an additional sizeof( size_t ) bytes are also written to store + * the message's length. sizeof( size_t ) is typically 4 bytes on a 32-bit + * architecture, so on most 32-bit architecture a 10 byte message will take up + * 14 bytes of message buffer space. The maximum number of bytes that can be + * stored in the message buffer is actually (xBufferSizeBytes - 1). + * + * @param pucMessageBufferStorageArea Must point to a uint8_t array that is at + * least xBufferSizeBytes + 1 big. This is the array to which messages are + * copied when they are written to the message buffer. + * + * @param pxStaticMessageBuffer Must point to a variable of type + * StaticMessageBuffer_t, which will be used to hold the message buffer's data + * structure. + * + * @return If the message buffer is created successfully then a handle to the + * created message buffer is returned. If either pucMessageBufferStorageArea or + * pxStaticmessageBuffer are NULL then NULL is returned. + * + * Example use: + * @code{c} + * + * // Used to dimension the array used to hold the messages. The available space + * // will actually be one less than this, so 999. + * #define STORAGE_SIZE_BYTES 1000 + * + * // Defines the memory that will actually hold the messages within the message + * // buffer. + * static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ]; + * + * // The variable used to hold the message buffer structure. + * StaticMessageBuffer_t xMessageBufferStruct; + * + * void MyFunction( void ) + * { + * MessageBufferHandle_t xMessageBuffer; + * + * xMessageBuffer = xMessageBufferCreateStatic( sizeof( ucBufferStorage ), + * ucBufferStorage, + * &xMessageBufferStruct ); + * + * // As neither the pucMessageBufferStorageArea or pxStaticMessageBuffer + * // parameters were NULL, xMessageBuffer will not be NULL, and can be used to + * // reference the created message buffer in other message buffer API calls. + * + * // Other code that uses the message buffer can go here. + * } + * + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer ) ( MessageBufferHandle_t ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer ) + +/** + * Sends a discrete message to the message buffer. The message can be any + * length that fits within the buffer's free space, and is copied into the + * buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xMessageBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xMessageBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xMessageBufferSend() to write to a message buffer from a task. Use + * xMessageBufferSendFromISR() to write to a message buffer from an interrupt + * service routine (ISR). + * + * @param xMessageBuffer The handle of the message buffer to which a message is + * being sent. + * + * @param pvTxData A pointer to the message that is to be copied into the + * message buffer. + * + * @param xDataLengthBytes The length of the message. That is, the number of + * bytes to copy from pvTxData into the message buffer. When a message is + * written to the message buffer an additional sizeof( size_t ) bytes are also + * written to store the message's length. sizeof( size_t ) is typically 4 bytes + * on a 32-bit architecture, so on most 32-bit architecture setting + * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24 + * bytes (20 bytes of message data and 4 bytes to hold the message length). + * + * @param xTicksToWait The maximum amount of time the calling task should remain + * in the Blocked state to wait for enough space to become available in the + * message buffer, should the message buffer have insufficient space when + * xMessageBufferSend() is called. The calling task will never block if + * xTicksToWait is zero. The block time is specified in tick periods, so the + * absolute time it represents is dependent on the tick frequency. The macro + * pdMS_TO_TICKS() can be used to convert a time specified in milliseconds into + * a time specified in ticks. Setting xTicksToWait to portMAX_DELAY will cause + * the task to wait indefinitely (without timing out), provided + * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h. Tasks do not use any + * CPU time when they are in the Blocked state. + * + * @return The number of bytes written to the message buffer. If the call to + * xMessageBufferSend() times out before there was enough space to write the + * message into the message buffer then zero is returned. If the call did not + * time out then xDataLengthBytes is returned. + * + * Example use: + * @code{c} + * void vAFunction( MessageBufferHandle_t xMessageBuffer ) + * { + * size_t xBytesSent; + * uint8_t ucArrayToSend[] = { 0, 1, 2, 3 }; + * char *pcStringToSend = "String to send"; + * const TickType_t x100ms = pdMS_TO_TICKS( 100 ); + * + * // Send an array to the message buffer, blocking for a maximum of 100ms to + * // wait for enough space to be available in the message buffer. + * xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms ); + * + * if( xBytesSent != sizeof( ucArrayToSend ) ) + * { + * // The call to xMessageBufferSend() times out before there was enough + * // space in the buffer for the data to be written. + * } + * + * // Send the string to the message buffer. Return immediately if there is + * // not enough space in the buffer. + * xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 ); + * + * if( xBytesSent != strlen( pcStringToSend ) ) + * { + * // The string could not be added to the message buffer because there was + * // not enough free space in the buffer. + * } + * } + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferSend( xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) xStreamBufferSend( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) + +/** + * Interrupt safe version of the API function that sends a discrete message to + * the message buffer. The message can be any length that fits within the + * buffer's free space, and is copied into the buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xMessageBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xMessageBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xMessageBufferSend() to write to a message buffer from a task. Use + * xMessageBufferSendFromISR() to write to a message buffer from an interrupt + * service routine (ISR). + * + * @param xMessageBuffer The handle of the message buffer to which a message is + * being sent. + * + * @param pvTxData A pointer to the message that is to be copied into the + * message buffer. + * + * @param xDataLengthBytes The length of the message. That is, the number of + * bytes to copy from pvTxData into the message buffer. When a message is + * written to the message buffer an additional sizeof( size_t ) bytes are also + * written to store the message's length. sizeof( size_t ) is typically 4 bytes + * on a 32-bit architecture, so on most 32-bit architecture setting + * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24 + * bytes (20 bytes of message data and 4 bytes to hold the message length). + * + * @param pxHigherPriorityTaskWoken It is possible that a message buffer will + * have a task blocked on it waiting for data. Calling + * xMessageBufferSendFromISR() can make data available, and so cause a task that + * was waiting for data to leave the Blocked state. If calling + * xMessageBufferSendFromISR() causes a task to leave the Blocked state, and the + * unblocked task has a priority higher than the currently executing task (the + * task that was interrupted), then, internally, xMessageBufferSendFromISR() + * will set *pxHigherPriorityTaskWoken to pdTRUE. If + * xMessageBufferSendFromISR() sets this value to pdTRUE, then normally a + * context switch should be performed before the interrupt is exited. This will + * ensure that the interrupt returns directly to the highest priority Ready + * state task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it + * is passed into the function. See the code example below for an example. + * + * @return The number of bytes actually written to the message buffer. If the + * message buffer didn't have enough free space for the message to be stored + * then 0 is returned, otherwise xDataLengthBytes is returned. + * + * Example use: + * @code{c} + * // A message buffer that has already been created. + * MessageBufferHandle_t xMessageBuffer; + * + * void vAnInterruptServiceRoutine( void ) + * { + * size_t xBytesSent; + * char *pcStringToSend = "String to send"; + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE. + * + * // Attempt to send the string to the message buffer. + * xBytesSent = xMessageBufferSendFromISR( xMessageBuffer, + * ( void * ) pcStringToSend, + * strlen( pcStringToSend ), + * &xHigherPriorityTaskWoken ); + * + * if( xBytesSent != strlen( pcStringToSend ) ) + * { + * // The string could not be added to the message buffer because there was + * // not enough free space in the buffer. + * } + * + * // If xHigherPriorityTaskWoken was set to pdTRUE inside + * // xMessageBufferSendFromISR() then a task that has a priority above the + * // priority of the currently executing task was unblocked and a context + * // switch should be performed to ensure the ISR returns to the unblocked + * // task. In most FreeRTOS ports this is done by simply passing + * // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the + * // variables value, and perform the context switch if necessary. Check the + * // documentation for the port in use for port specific instructions. + * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + * } + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferSendFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) + +/** + * Receives a discrete message from a message buffer. Messages can be of + * variable length and are copied out of the buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xMessageBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xMessageBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xMessageBufferReceive() to read from a message buffer from a task. Use + * xMessageBufferReceiveFromISR() to read from a message buffer from an + * interrupt service routine (ISR). + * + * @param xMessageBuffer The handle of the message buffer from which a message + * is being received. + * + * @param pvRxData A pointer to the buffer into which the received message is + * to be copied. + * + * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData + * parameter. This sets the maximum length of the message that can be received. + * If xBufferLengthBytes is too small to hold the next message then the message + * will be left in the message buffer and 0 will be returned. + * + * @param xTicksToWait The maximum amount of time the task should remain in the + * Blocked state to wait for a message, should the message buffer be empty. + * xMessageBufferReceive() will return immediately if xTicksToWait is zero and + * the message buffer is empty. The block time is specified in tick periods, so + * the absolute time it represents is dependent on the tick frequency. The + * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds + * into a time specified in ticks. Setting xTicksToWait to portMAX_DELAY will + * cause the task to wait indefinitely (without timing out), provided + * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h. Tasks do not use any + * CPU time when they are in the Blocked state. + * + * @return The length, in bytes, of the message read from the message buffer, if + * any. If xMessageBufferReceive() times out before a message became available + * then zero is returned. If the length of the message is greater than + * xBufferLengthBytes then the message will be left in the message buffer and + * zero is returned. + * + * Example use: + * @code{c} + * void vAFunction( MessageBuffer_t xMessageBuffer ) + * { + * uint8_t ucRxData[ 20 ]; + * size_t xReceivedBytes; + * const TickType_t xBlockTime = pdMS_TO_TICKS( 20 ); + * + * // Receive the next message from the message buffer. Wait in the Blocked + * // state (so not using any CPU processing time) for a maximum of 100ms for + * // a message to become available. + * xReceivedBytes = xMessageBufferReceive( xMessageBuffer, + * ( void * ) ucRxData, + * sizeof( ucRxData ), + * xBlockTime ); + * + * if( xReceivedBytes > 0 ) + * { + * // A ucRxData contains a message that is xReceivedBytes long. Process + * // the message here.... + * } + * } + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferReceive( xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) xStreamBufferReceive( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) + + +/** + * An interrupt safe version of the API function that receives a discrete + * message from a message buffer. Messages can be of variable length and are + * copied out of the buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xMessageBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xMessageBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xMessageBufferReceive() to read from a message buffer from a task. Use + * xMessageBufferReceiveFromISR() to read from a message buffer from an + * interrupt service routine (ISR). + * + * @param xMessageBuffer The handle of the message buffer from which a message + * is being received. + * + * @param pvRxData A pointer to the buffer into which the received message is + * to be copied. + * + * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData + * parameter. This sets the maximum length of the message that can be received. + * If xBufferLengthBytes is too small to hold the next message then the message + * will be left in the message buffer and 0 will be returned. + * + * @param pxHigherPriorityTaskWoken It is possible that a message buffer will + * have a task blocked on it waiting for space to become available. Calling + * xMessageBufferReceiveFromISR() can make space available, and so cause a task + * that is waiting for space to leave the Blocked state. If calling + * xMessageBufferReceiveFromISR() causes a task to leave the Blocked state, and + * the unblocked task has a priority higher than the currently executing task + * (the task that was interrupted), then, internally, + * xMessageBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE. + * If xMessageBufferReceiveFromISR() sets this value to pdTRUE, then normally a + * context switch should be performed before the interrupt is exited. That will + * ensure the interrupt returns directly to the highest priority Ready state + * task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it is + * passed into the function. See the code example below for an example. + * + * @return The length, in bytes, of the message read from the message buffer, if + * any. + * + * Example use: + * @code{c} + * // A message buffer that has already been created. + * MessageBuffer_t xMessageBuffer; + * + * void vAnInterruptServiceRoutine( void ) + * { + * uint8_t ucRxData[ 20 ]; + * size_t xReceivedBytes; + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE. + * + * // Receive the next message from the message buffer. + * xReceivedBytes = xMessageBufferReceiveFromISR( xMessageBuffer, + * ( void * ) ucRxData, + * sizeof( ucRxData ), + * &xHigherPriorityTaskWoken ); + * + * if( xReceivedBytes > 0 ) + * { + * // A ucRxData contains a message that is xReceivedBytes long. Process + * // the message here.... + * } + * + * // If xHigherPriorityTaskWoken was set to pdTRUE inside + * // xMessageBufferReceiveFromISR() then a task that has a priority above the + * // priority of the currently executing task was unblocked and a context + * // switch should be performed to ensure the ISR returns to the unblocked + * // task. In most FreeRTOS ports this is done by simply passing + * // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the + * // variables value, and perform the context switch if necessary. Check the + * // documentation for the port in use for port specific instructions. + * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + * } + * @endcode + * \ingroup MessageBufferManagement + */ +#define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferReceiveFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) + +/** + * Deletes a message buffer that was previously created using a call to + * xMessageBufferCreate() or xMessageBufferCreateStatic(). If the message + * buffer was created using dynamic memory (that is, by xMessageBufferCreate()), + * then the allocated memory is freed. + * + * A message buffer handle must not be used after the message buffer has been + * deleted. + * + * @param xMessageBuffer The handle of the message buffer to be deleted. + * + */ +#define vMessageBufferDelete( xMessageBuffer ) vStreamBufferDelete( ( StreamBufferHandle_t ) xMessageBuffer ) + +/** + * Tests to see if a message buffer is full. A message buffer is full if it + * cannot accept any more messages, of any size, until space is made available + * by a message being removed from the message buffer. + * + * @param xMessageBuffer The handle of the message buffer being queried. + * + * @return If the message buffer referenced by xMessageBuffer is full then + * pdTRUE is returned. Otherwise pdFALSE is returned. + */ +#define xMessageBufferIsFull( xMessageBuffer ) xStreamBufferIsFull( ( StreamBufferHandle_t ) xMessageBuffer ) + +/** + * Tests to see if a message buffer is empty (does not contain any messages). + * + * @param xMessageBuffer The handle of the message buffer being queried. + * + * @return If the message buffer referenced by xMessageBuffer is empty then + * pdTRUE is returned. Otherwise pdFALSE is returned. + * + */ +#define xMessageBufferIsEmpty( xMessageBuffer ) xStreamBufferIsEmpty( ( StreamBufferHandle_t ) xMessageBuffer ) + +/** + * Resets a message buffer to its initial empty state, discarding any message it + * contained. + * + * A message buffer can only be reset if there are no tasks blocked on it. + * + * @param xMessageBuffer The handle of the message buffer being reset. + * + * @return If the message buffer was reset then pdPASS is returned. If the + * message buffer could not be reset because either there was a task blocked on + * the message queue to wait for space to become available, or to wait for a + * a message to be available, then pdFAIL is returned. + * + * \ingroup MessageBufferManagement + */ +#define xMessageBufferReset( xMessageBuffer ) xStreamBufferReset( ( StreamBufferHandle_t ) xMessageBuffer ) + + +/** + * Returns the number of bytes of free space in the message buffer. + * + * @param xMessageBuffer The handle of the message buffer being queried. + * + * @return The number of bytes that can be written to the message buffer before + * the message buffer would be full. When a message is written to the message + * buffer an additional sizeof( size_t ) bytes are also written to store the + * message's length. sizeof( size_t ) is typically 4 bytes on a 32-bit + * architecture, so if xMessageBufferSpacesAvailable() returns 10, then the size + * of the largest message that can be written to the message buffer is 6 bytes. + * + * \ingroup MessageBufferManagement + */ +#define xMessageBufferSpaceAvailable( xMessageBuffer ) xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) +#define xMessageBufferSpacesAvailable( xMessageBuffer ) xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) /* Corrects typo in original macro name. */ + +/** + * Returns the length (in bytes) of the next message in a message buffer. + * Useful if xMessageBufferReceive() returned 0 because the size of the buffer + * passed into xMessageBufferReceive() was too small to hold the next message. + * + * @param xMessageBuffer The handle of the message buffer being queried. + * + * @return The length (in bytes) of the next message in the message buffer, or 0 + * if the message buffer is empty. + * + * \ingroup MessageBufferManagement + */ +#define xMessageBufferNextLengthBytes( xMessageBuffer ) xStreamBufferNextMessageLengthBytes( ( StreamBufferHandle_t ) xMessageBuffer ) PRIVILEGED_FUNCTION; + +/** + * For advanced users only. + * + * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when + * data is sent to a message buffer or stream buffer. If there was a task that + * was blocked on the message or stream buffer waiting for data to arrive then + * the sbSEND_COMPLETED() macro sends a notification to the task to remove it + * from the Blocked state. xMessageBufferSendCompletedFromISR() does the same + * thing. It is provided to enable application writers to implement their own + * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME. + * + * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for + * additional information. + * + * @param xMessageBuffer The handle of the stream buffer to which data was + * written. + * + * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be + * initialised to pdFALSE before it is passed into + * xMessageBufferSendCompletedFromISR(). If calling + * xMessageBufferSendCompletedFromISR() removes a task from the Blocked state, + * and the task has a priority above the priority of the currently running task, + * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a + * context switch should be performed before exiting the ISR. + * + * @return If a task was removed from the Blocked state then pdTRUE is returned. + * Otherwise pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +#define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferSendCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken ) + +/** + * For advanced users only. + * + * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when + * data is read out of a message buffer or stream buffer. If there was a task + * that was blocked on the message or stream buffer waiting for data to arrive + * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to + * remove it from the Blocked state. xMessageBufferReceiveCompletedFromISR() + * does the same thing. It is provided to enable application writers to + * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT + * ANY OTHER TIME. + * + * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for + * additional information. + * + * @param xMessageBuffer The handle of the stream buffer from which data was + * read. + * + * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be + * initialised to pdFALSE before it is passed into + * xMessageBufferReceiveCompletedFromISR(). If calling + * xMessageBufferReceiveCompletedFromISR() removes a task from the Blocked state, + * and the task has a priority above the priority of the currently running task, + * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a + * context switch should be performed before exiting the ISR. + * + * @return If a task was removed from the Blocked state then pdTRUE is returned. + * Otherwise pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +#define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferReceiveCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken ) + +#if defined( __cplusplus ) +} /* extern "C" */ +#endif + +#endif /* !defined( FREERTOS_MESSAGE_BUFFER_H ) */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h b/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h index 504f6d93..121ce75f 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef MPU_WRAPPERS_H #define MPU_WRAPPERS_H @@ -79,68 +37,139 @@ only for ports that are using the MPU. */ those files. */ #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - #define xTaskGenericCreate MPU_xTaskGenericCreate - #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions - #define vTaskDelete MPU_vTaskDelete - #define vTaskDelayUntil MPU_vTaskDelayUntil - #define vTaskDelay MPU_vTaskDelay - #define uxTaskPriorityGet MPU_uxTaskPriorityGet - #define vTaskPrioritySet MPU_vTaskPrioritySet - #define eTaskGetState MPU_eTaskGetState - #define vTaskSuspend MPU_vTaskSuspend - #define vTaskResume MPU_vTaskResume - #define vTaskSuspendAll MPU_vTaskSuspendAll - #define xTaskResumeAll MPU_xTaskResumeAll - #define xTaskGetTickCount MPU_xTaskGetTickCount - #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks - #define vTaskList MPU_vTaskList - #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats - #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag - #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag - #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook - #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark - #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle - #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState - #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle - #define uxTaskGetSystemState MPU_uxTaskGetSystemState + /* + * Map standard (non MPU) API functions to equivalents that start + * "MPU_". This will cause the application code to call the MPU_ + * version, which wraps the non-MPU version with privilege promoting + * then demoting code, so the kernel code always runs will full + * privileges. + */ - #define xQueueGenericCreate MPU_xQueueGenericCreate - #define xQueueCreateMutex MPU_xQueueCreateMutex - #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive - #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive - #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore - #define xQueueGenericSend MPU_xQueueGenericSend - #define xQueueAltGenericSend MPU_xQueueAltGenericSend - #define xQueueAltGenericReceive MPU_xQueueAltGenericReceive - #define xQueueGenericReceive MPU_xQueueGenericReceive - #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting - #define vQueueDelete MPU_vQueueDelete - #define xQueueGenericReset MPU_xQueueGenericReset - #define xQueueCreateSet MPU_xQueueCreateSet - #define xQueueSelectFromSet MPU_xQueueSelectFromSet - #define xQueueAddToSet MPU_xQueueAddToSet - #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet - #define xQueuePeekFromISR MPU_xQueuePeekFromISR - #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder + /* Map standard tasks.h API functions to the MPU equivalents. */ + #define xTaskCreate MPU_xTaskCreate + #define xTaskCreateStatic MPU_xTaskCreateStatic + #define xTaskCreateRestricted MPU_xTaskCreateRestricted + #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions + #define vTaskDelete MPU_vTaskDelete + #define vTaskDelay MPU_vTaskDelay + #define vTaskDelayUntil MPU_vTaskDelayUntil + #define xTaskAbortDelay MPU_xTaskAbortDelay + #define uxTaskPriorityGet MPU_uxTaskPriorityGet + #define eTaskGetState MPU_eTaskGetState + #define vTaskGetInfo MPU_vTaskGetInfo + #define vTaskPrioritySet MPU_vTaskPrioritySet + #define vTaskSuspend MPU_vTaskSuspend + #define vTaskResume MPU_vTaskResume + #define vTaskSuspendAll MPU_vTaskSuspendAll + #define xTaskResumeAll MPU_xTaskResumeAll + #define xTaskGetTickCount MPU_xTaskGetTickCount + #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks + #define pcTaskGetName MPU_pcTaskGetName + #define xTaskGetHandle MPU_xTaskGetHandle + #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark + #define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2 + #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag + #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag + // #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer + // #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer + #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook + #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle + #define uxTaskGetSystemState MPU_uxTaskGetSystemState + #define vTaskList MPU_vTaskList + #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats + #define ulTaskGetIdleRunTimeCounter MPU_ulTaskGetIdleRunTimeCounter + #define xTaskGenericNotify MPU_xTaskGenericNotify + #define xTaskNotifyWait MPU_xTaskNotifyWait + #define ulTaskNotifyTake MPU_ulTaskNotifyTake + #define xTaskNotifyStateClear MPU_xTaskNotifyStateClear + #define xTaskCatchUpTicks MPU_xTaskCatchUpTicks - #define pvPortMalloc MPU_pvPortMalloc - #define vPortFree MPU_vPortFree - #define xPortGetFreeHeapSize MPU_xPortGetFreeHeapSize - #define vPortInitialiseBlocks MPU_vPortInitialiseBlocks + #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle + #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState + #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut + #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState - #if configQUEUE_REGISTRY_SIZE > 0 - #define vQueueAddToRegistry MPU_vQueueAddToRegistry - #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue + /* Map standard queue.h API functions to the MPU equivalents. */ + #define xQueueGenericSend MPU_xQueueGenericSend + #define xQueueReceive MPU_xQueueReceive + #define xQueuePeek MPU_xQueuePeek + #define xQueueSemaphoreTake MPU_xQueueSemaphoreTake + #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting + #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable + #define vQueueDelete MPU_vQueueDelete + #define xQueueCreateMutex MPU_xQueueCreateMutex + #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic + #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore + #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic + #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder + #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive + #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive + #define xQueueGenericCreate MPU_xQueueGenericCreate + #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic + #define xQueueCreateSet MPU_xQueueCreateSet + #define xQueueAddToSet MPU_xQueueAddToSet + #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet + #define xQueueSelectFromSet MPU_xQueueSelectFromSet + #define xQueueGenericReset MPU_xQueueGenericReset + + #if( configQUEUE_REGISTRY_SIZE > 0 ) + #define vQueueAddToRegistry MPU_vQueueAddToRegistry + #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue + #define pcQueueGetName MPU_pcQueueGetName #endif - /* Remove the privileged function macro. */ + /* Map standard timer.h API functions to the MPU equivalents. */ + #define xTimerCreate MPU_xTimerCreate + #define xTimerCreateStatic MPU_xTimerCreateStatic + #define pvTimerGetTimerID MPU_pvTimerGetTimerID + #define vTimerSetTimerID MPU_vTimerSetTimerID + #define xTimerIsTimerActive MPU_xTimerIsTimerActive + #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle + #define xTimerPendFunctionCall MPU_xTimerPendFunctionCall + #define pcTimerGetName MPU_pcTimerGetName + #define vTimerSetReloadMode MPU_vTimerSetReloadMode + #define xTimerGetPeriod MPU_xTimerGetPeriod + #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime + #define xTimerGenericCommand MPU_xTimerGenericCommand + + /* Map standard event_group.h API functions to the MPU equivalents. */ + #define xEventGroupCreate MPU_xEventGroupCreate + #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic + #define xEventGroupWaitBits MPU_xEventGroupWaitBits + #define xEventGroupClearBits MPU_xEventGroupClearBits + #define xEventGroupSetBits MPU_xEventGroupSetBits + #define xEventGroupSync MPU_xEventGroupSync + #define vEventGroupDelete MPU_vEventGroupDelete + + /* Map standard message/stream_buffer.h API functions to the MPU + equivalents. */ + #define xStreamBufferSend MPU_xStreamBufferSend + #define xStreamBufferReceive MPU_xStreamBufferReceive + #define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes + #define vStreamBufferDelete MPU_vStreamBufferDelete + #define xStreamBufferIsFull MPU_xStreamBufferIsFull + #define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty + #define xStreamBufferReset MPU_xStreamBufferReset + #define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable + #define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable + #define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel + #define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate + #define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic + + + /* Remove the privileged function macro, but keep the PRIVILEGED_DATA + macro so applications can place data in privileged access sections + (useful when using statically allocated objects). */ #define PRIVILEGED_FUNCTION + #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) + #define FREERTOS_SYSTEM_CALL #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ /* Ensure API functions go in the privileged execution section. */ #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions"))) #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) + #define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls"))) #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ @@ -148,6 +177,7 @@ only for ports that are using the MPU. */ #define PRIVILEGED_FUNCTION #define PRIVILEGED_DATA + #define FREERTOS_SYSTEM_CALL #define portUSING_MPU_WRAPPERS 0 #endif /* portUSING_MPU_WRAPPERS */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/portable.h b/tools/sdk/esp32/include/freertos/include/freertos/portable.h index cd99a975..dce07473 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/portable.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/portable.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ /*----------------------------------------------------------- * Portable layer API. Each function must be defined for each port. @@ -86,7 +44,6 @@ specific constants has been moved into the deprecated_definitions.h header file. */ #include "deprecated_definitions.h" - /* If portENTER_CRITICAL is not defined then including deprecated_definitions.h did not result in a portmacro.h header file being included - and it should be included here. In this case the path to the correct portmacro.h header file @@ -95,8 +52,16 @@ must be set in the compiler's include path. */ #include "freertos/portmacro.h" #endif +#if portBYTE_ALIGNMENT == 32 + #define portBYTE_ALIGNMENT_MASK ( 0x001f ) +#endif + +#if portBYTE_ALIGNMENT == 16 + #define portBYTE_ALIGNMENT_MASK ( 0x000f ) +#endif + #if portBYTE_ALIGNMENT == 8 - #define portBYTE_ALIGNMENT_MASK ( 0x0007U ) + #define portBYTE_ALIGNMENT_MASK ( 0x0007 ) #endif #if portBYTE_ALIGNMENT == 4 @@ -119,15 +84,19 @@ must be set in the compiler's include path. */ #define portNUM_CONFIGURABLE_REGIONS 1 #endif +#ifndef portHAS_STACK_OVERFLOW_CHECKING + #define portHAS_STACK_OVERFLOW_CHECKING 0 +#endif + +#ifndef portARCH_NAME + #define portARCH_NAME NULL +#endif + #ifdef __cplusplus extern "C" { #endif #include "mpu_wrappers.h" -#include "esp_system.h" - -#include "hal/cpu_hal.h" -#include "xt_instr_macros.h" /* * Setup the stack of a new task so it is ready to be placed under the @@ -136,11 +105,70 @@ extern "C" { * */ #if( portUSING_MPU_WRAPPERS == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; + #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; + #else + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; + #endif #else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; + #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; + #else + StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; + #endif #endif +#ifdef configUSE_FREERTOS_PROVIDED_HEAP + +/* Used by heap_5.c to define the start address and size of each memory region +that together comprise the total FreeRTOS heap space. */ +typedef struct HeapRegion +{ + uint8_t *pucStartAddress; + size_t xSizeInBytes; +} HeapRegion_t; + +/* Used to pass information about the heap out of vPortGetHeapStats(). */ +typedef struct xHeapStats +{ + size_t xAvailableHeapSpaceInBytes; /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */ + size_t xSizeOfLargestFreeBlockInBytes; /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */ + size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */ + size_t xNumberOfFreeBlocks; /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */ + size_t xMinimumEverFreeBytesRemaining; /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */ + size_t xNumberOfSuccessfulAllocations; /* The number of calls to pvPortMalloc() that have returned a valid memory block. */ + size_t xNumberOfSuccessfulFrees; /* The number of calls to vPortFree() that has successfully freed a block of memory. */ +} HeapStats_t; + +/* + * Used to define multiple heap regions for use by heap_5.c. This function + * must be called before any calls to pvPortMalloc() - not creating a task, + * queue, semaphore, mutex, software timer, event group, etc. will result in + * pvPortMalloc being called. + * + * pxHeapRegions passes in an array of HeapRegion_t structures - each of which + * defines a region of memory that can be used as the heap. The array is + * terminated by a HeapRegions_t structure that has a size of 0. The region + * with the lowest start address must appear first in the array. + */ +void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; + +/* + * Returns a HeapStats_t structure filled with information about the current + * heap state. + */ +void vPortGetHeapStats( HeapStats_t *pxHeapStats ); +/* + * Map to the memory management routines required for the port. + */ +void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; +void vPortFree( void *pv ) PRIVILEGED_FUNCTION; +void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; +size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; +size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION; + +#else // configUSE_FREERTOS_PROVIDED_HEAP + /* * Map to the memory management routines required for the port. * @@ -153,6 +181,8 @@ extern "C" { #define xPortGetFreeHeapSize esp_get_free_heap_size #define xPortGetMinimumEverFreeHeapSize esp_get_minimum_free_heap_size +#endif + /* * Setup the hardware ready for the scheduler to take control. This generally * sets up a tick interrupt and sets timers for the correct tick frequency. @@ -166,76 +196,9 @@ BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION; */ void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; - -/* - * Send an interrupt to another core in order to make the task running - * on it yield for a higher-priority task. - */ - -void vPortYieldOtherCore( BaseType_t coreid) PRIVILEGED_FUNCTION; - - -/* - Callback to set a watchpoint on the end of the stack. Called every context switch to change the stack - watchpoint around. - */ -void vPortSetStackWatchpoint( void* pxStackStart ); - -/* - * This function will be called in High prio ISRs. Returns true if the current core was in ISR context - * before calling into high prio ISR context. - */ -BaseType_t xPortInterruptedFromISRContext(void); - -/* - * The structures and methods of manipulating the MPU are contained within the - * port layer. - * - * Fills the xMPUSettings structure with the memory region information - * contained in xRegions. - */ -#if( portUSING_MPU_WRAPPERS == 1 ) - struct xMEMORY_REGION; - void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t usStackDepth ) PRIVILEGED_FUNCTION; - void vPortReleaseTaskMPUSettings( xMPU_SETTINGS *xMPUSettings ); -#endif - -/* Multi-core: get current core ID */ -static inline uint32_t IRAM_ATTR xPortGetCoreID(void) { - return cpu_hal_get_core_id(); -} - -/* Get tick rate per second */ -uint32_t xPortGetTickRateHz(void); - - -static inline bool IRAM_ATTR xPortCanYield(void) -{ - uint32_t ps_reg = 0; - - //Get the current value of PS (processor status) register - RSR(PS, ps_reg); - - /* - * intlevel = (ps_reg & 0xf); - * excm = (ps_reg >> 4) & 0x1; - * CINTLEVEL is max(excm * EXCMLEVEL, INTLEVEL), where EXCMLEVEL is 3. - * However, just return true, only intlevel is zero. - */ - - return ((ps_reg & PS_INTLEVEL_MASK) == 0); -} - #ifdef __cplusplus } #endif -static inline void uxPortCompareSetExtram(volatile uint32_t *addr, uint32_t compare, uint32_t *set) -{ -#if defined(CONFIG_ESP32_SPIRAM_SUPPORT) - compare_and_set_extram(addr, compare, set); -#endif -} - #endif /* PORTABLE_H */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/porttrace.h b/tools/sdk/esp32/include/freertos/include/freertos/porttrace.h deleted file mode 100644 index bf2fb412..00000000 --- a/tools/sdk/esp32/include/freertos/include/freertos/porttrace.h +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* -// Copyright (c) 2003-2015 Cadence Design Systems, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- - -/* - * This utility helps tracing the entering and exiting from tasks. It maintains a circular buffer - * of tasks in the order they execute, and their execution time. - * In order to enable it, set configUSE_TRACE_FACILITY_2 to 1 in FreeRTOSConfig.h. - * You will also need to download the FreeRTOS_trace patch that contains - * porttrace.c and the complete version of porttrace.h - */ - -#ifndef PORTTRACE_H -#define PORTTRACE_H - -#if configUSE_TRACE_FACILITY_2 - #error "You need to download the FreeRTOS_trace patch that overwrites this file" -#endif - -#define porttracePrint(nelements) -#define porttraceStamp(stamp, count_incr) - -#endif /* PORTTRACE_H */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h b/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h index edb50073..03e042f8 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef PROJDEFS_H #define PROJDEFS_H @@ -76,9 +34,17 @@ */ typedef void (*TaskFunction_t)( void * ); -/* Converts a time in milliseconds to a time in ticks. */ -#define pdMS_TO_TICKS( xTimeInMs ) ( ( ( TickType_t ) ( xTimeInMs ) * configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) -#define pdTICKS_TO_MS( xTicks ) ( ( uint32_t ) ( xTicks ) * 1000 / configTICK_RATE_HZ ) +/* Converts a time in milliseconds to a time in ticks. This macro can be +overridden by a macro of the same name defined in FreeRTOSConfig.h in case the +definition here is not suitable for your application. */ +#ifndef pdMS_TO_TICKS + #define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) ) +#endif + +#ifndef pdTICKS_TO_MS + #define pdTICKS_TO_MS( xTicks ) ( ( uint32_t ) ( xTicks ) * 1000 / configTICK_RATE_HZ ) +#endif + #define pdFALSE ( ( BaseType_t ) 0 ) #define pdTRUE ( ( BaseType_t ) 1 ) @@ -88,7 +54,7 @@ typedef void (*TaskFunction_t)( void * ); #define errQUEUE_EMPTY ( ( BaseType_t ) 0 ) #define errQUEUE_FULL ( ( BaseType_t ) 0 ) -/* Error definitions. */ +/* FreeRTOS error definitions. */ #define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) #define errQUEUE_BLOCKED ( -4 ) #define errQUEUE_YIELD ( -5 ) @@ -104,6 +70,59 @@ typedef void (*TaskFunction_t)( void * ); #define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL #endif +/* The following errno values are used by FreeRTOS+ components, not FreeRTOS +itself. */ +#define pdFREERTOS_ERRNO_NONE 0 /* No errors */ +#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */ +#define pdFREERTOS_ERRNO_EINTR 4 /* Interrupted system call */ +#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */ +#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */ +#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */ +#define pdFREERTOS_ERRNO_EAGAIN 11 /* No more processes */ +#define pdFREERTOS_ERRNO_EWOULDBLOCK 11 /* Operation would block */ +#define pdFREERTOS_ERRNO_ENOMEM 12 /* Not enough memory */ +#define pdFREERTOS_ERRNO_EACCES 13 /* Permission denied */ +#define pdFREERTOS_ERRNO_EFAULT 14 /* Bad address */ +#define pdFREERTOS_ERRNO_EBUSY 16 /* Mount device busy */ +#define pdFREERTOS_ERRNO_EEXIST 17 /* File exists */ +#define pdFREERTOS_ERRNO_EXDEV 18 /* Cross-device link */ +#define pdFREERTOS_ERRNO_ENODEV 19 /* No such device */ +#define pdFREERTOS_ERRNO_ENOTDIR 20 /* Not a directory */ +#define pdFREERTOS_ERRNO_EISDIR 21 /* Is a directory */ +#define pdFREERTOS_ERRNO_EINVAL 22 /* Invalid argument */ +#define pdFREERTOS_ERRNO_ENOSPC 28 /* No space left on device */ +#define pdFREERTOS_ERRNO_ESPIPE 29 /* Illegal seek */ +#define pdFREERTOS_ERRNO_EROFS 30 /* Read only file system */ +#define pdFREERTOS_ERRNO_EUNATCH 42 /* Protocol driver not attached */ +#define pdFREERTOS_ERRNO_EBADE 50 /* Invalid exchange */ +#define pdFREERTOS_ERRNO_EFTYPE 79 /* Inappropriate file type or format */ +#define pdFREERTOS_ERRNO_ENMFILE 89 /* No more files */ +#define pdFREERTOS_ERRNO_ENOTEMPTY 90 /* Directory not empty */ +#define pdFREERTOS_ERRNO_ENAMETOOLONG 91 /* File or path name too long */ +#define pdFREERTOS_ERRNO_EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define pdFREERTOS_ERRNO_ENOBUFS 105 /* No buffer space available */ +#define pdFREERTOS_ERRNO_ENOPROTOOPT 109 /* Protocol not available */ +#define pdFREERTOS_ERRNO_EADDRINUSE 112 /* Address already in use */ +#define pdFREERTOS_ERRNO_ETIMEDOUT 116 /* Connection timed out */ +#define pdFREERTOS_ERRNO_EINPROGRESS 119 /* Connection already in progress */ +#define pdFREERTOS_ERRNO_EALREADY 120 /* Socket already connected */ +#define pdFREERTOS_ERRNO_EADDRNOTAVAIL 125 /* Address not available */ +#define pdFREERTOS_ERRNO_EISCONN 127 /* Socket is already connected */ +#define pdFREERTOS_ERRNO_ENOTCONN 128 /* Socket is not connected */ +#define pdFREERTOS_ERRNO_ENOMEDIUM 135 /* No medium inserted */ +#define pdFREERTOS_ERRNO_EILSEQ 138 /* An invalid UTF-16 sequence was encountered. */ +#define pdFREERTOS_ERRNO_ECANCELED 140 /* Operation canceled. */ + +/* The following endian values are used by FreeRTOS+ components, not FreeRTOS +itself. */ +#define pdFREERTOS_LITTLE_ENDIAN 0 +#define pdFREERTOS_BIG_ENDIAN 1 + +/* Re-defining endian values for generic naming. */ +#define pdLITTLE_ENDIAN pdFREERTOS_LITTLE_ENDIAN +#define pdBIG_ENDIAN pdFREERTOS_BIG_ENDIAN + + #endif /* PROJDEFS_H */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/queue.h b/tools/sdk/esp32/include/freertos/include/freertos/queue.h index e15152ee..4916d9b6 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/queue.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/queue.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef QUEUE_H @@ -79,29 +37,32 @@ extern "C" { #endif +#include "task.h" /** * Type by which queues are referenced. For example, a call to xQueueCreate() * returns an QueueHandle_t variable that can then be used as a parameter to * xQueueSend(), xQueueReceive(), etc. */ -typedef void * QueueHandle_t; +struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */ +typedef struct QueueDefinition * QueueHandle_t; /** * Type by which queue sets are referenced. For example, a call to * xQueueCreateSet() returns an xQueueSet variable that can then be used as a * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc. */ -typedef void * QueueSetHandle_t; +typedef struct QueueDefinition * QueueSetHandle_t; /** * Queue sets can contain both queues and semaphores, so the * QueueSetMemberHandle_t is defined as a type to be used where a parameter or * return value can be either an QueueHandle_t or an SemaphoreHandle_t. */ -typedef void * QueueSetMemberHandle_t; +typedef struct QueueDefinition * QueueSetMemberHandle_t; /** @cond */ + /* For internal use only. */ #define queueSEND_TO_BACK ( ( BaseType_t ) 0 ) #define queueSEND_TO_FRONT ( ( BaseType_t ) 1 ) @@ -244,8 +205,6 @@ typedef void * QueueSetMemberHandle_t; #endif /* configSUPPORT_STATIC_ALLOCATION */ /** - * This is a macro that calls xQueueGenericSend(). - * * Post an item to the front of a queue. The item is queued by copy, not by * reference. This function must not be called from an interrupt service * routine. See xQueueSendFromISR () for an alternative which may be used @@ -613,8 +572,6 @@ typedef void * QueueSetMemberHandle_t; BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; /** - * This is a macro that calls the xQueueGenericReceive() function. - * * Receive an item from a queue without removing the item from the queue. * The item is received by copy so a buffer of adequate size must be * provided. The number of bytes copied into the buffer was defined when @@ -697,7 +654,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ * @endcode * \ingroup QueueManagement */ -#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) +BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** * A version of xQueuePeek() that can be called from an interrupt service @@ -725,16 +682,6 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; /** - * queue. h - *
- BaseType_t xQueueReceive(
-								 QueueHandle_t xQueue,
-								 void *pvBuffer,
-								 TickType_t xTicksToWait
-							);
- * - * This is a macro that calls the xQueueGenericReceive() function. - * * Receive an item from a queue. The item is received by copy so a buffer of * adequate size must be provided. The number of bytes copied into the buffer * was defined when the queue was created. @@ -814,96 +761,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV * @endcode * \ingroup QueueManagement */ -#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) - - -/** - * It is preferred that the macro xQueueReceive() be used rather than calling - * this function directly. - * - * Receive an item from a queue. The item is received by copy so a buffer of - * adequate size must be provided. The number of bytes copied into the buffer - * was defined when the queue was created. - * - * This function must not be used in an interrupt service routine. See - * xQueueReceiveFromISR for an alternative that can. - * - * @param xQueue The handle to the queue from which the item is to be - * received. - * - * @param pvBuffer Pointer to the buffer into which the received item will - * be copied. - * - * @param xTicksToWait The maximum amount of time the task should block - * waiting for an item to receive should the queue be empty at the time - * of the call. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. - * xQueueGenericReceive() will return immediately if the queue is empty and - * xTicksToWait is 0. - * - * @param xJustPeek When set to true, the item received from the queue is not - * actually removed from the queue - meaning a subsequent call to - * xQueueReceive() will return the same item. When set to false, the item - * being received from the queue is also removed from the queue. - * - * @return pdTRUE if an item was successfully received from the queue, - * otherwise pdFALSE. - * - * Example usage: - * @code{c} - * struct AMessage - * { - * char ucMessageID; - * char ucData[ 20 ]; - * } xMessage; - * - * QueueHandle_t xQueue; - * - * // Task to create a queue and post a value. - * void vATask( void *pvParameters ) - * { - * struct AMessage *pxMessage; - * - * // Create a queue capable of containing 10 pointers to AMessage structures. - * // These should be passed by pointer as they contain a lot of data. - * xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) ); - * if( xQueue == 0 ) - * { - * // Failed to create the queue. - * } - * - * // ... - * - * // Send a pointer to a struct AMessage object. Don't block if the - * // queue is already full. - * pxMessage = & xMessage; - * xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 ); - * - * // ... Rest of task code. - * } - * - * // Task to receive from the queue. - * void vADifferentTask( void *pvParameters ) - * { - * struct AMessage *pxRxedMessage; - * - * if( xQueue != 0 ) - * { - * // Receive a message on the created queue. Block for 10 ticks if a - * // message is not immediately available. - * if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) ) - * { - * // pcRxedMessage now points to the struct AMessage variable posted - * // by vATask. - * } - * } - * - * // ... Rest of task code. - * } - * @endcode - * \ingroup QueueManagement - */ -BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION; +BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** * Return the number of messages stored in a queue. @@ -999,7 +857,7 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; #define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT ) -/** +/** * This is a macro that calls xQueueGenericSendFromISR(). * * Post an item to the back of a queue. It is safe to use this macro from @@ -1346,39 +1204,16 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP */ BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -/**@{*/ -/** +/* * Utilities to query queues that are safe to use from an ISR. These utilities * should be used only from witin an ISR, or within a critical section. */ BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; -/**@}*/ /** @cond */ /** - * xQueueAltGenericSend() is an alternative version of xQueueGenericSend(). - * Likewise xQueueAltGenericReceive() is an alternative version of - * xQueueGenericReceive(). - * - * The source code that implements the alternative (Alt) API is much - * simpler because it executes everything from within a critical section. - * This is the approach taken by many other RTOSes, but FreeRTOS.org has the - * preferred fully featured API too. The fully featured API has more - * complex code that takes longer to execute, but makes much less use of - * critical sections. Therefore the alternative API sacrifices interrupt - * responsiveness to gain execution speed, whereas the fully featured API - * sacrifices execution speed to ensure better interrupt responsiveness. - */ -BaseType_t xQueueAltGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition ); -BaseType_t xQueueAltGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking ); -#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT ) -#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) -#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) -#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) - -/* * The functions defined above are for passing data to and from tasks. The * functions below are the equivalents for passing data to and from * co-routines. @@ -1392,7 +1227,7 @@ BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseTyp BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ); BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ); -/* +/** * For internal use only. Use xSemaphoreCreateMutex(), * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling * these functions directly. @@ -1401,24 +1236,22 @@ QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; -void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; +BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; +TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; -/* +/** * For internal use only. Use xSemaphoreTakeMutexRecursive() or * xSemaphoreGiveMutexRecursive() instead of calling these functions directly. */ BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION; +BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION; + /** @endcond */ /** - * Reset a queue back to its original empty state. pdPASS is returned if the - * queue is successfully reset. pdFAIL is returned if the queue could not be - * reset because there are tasks blocked on the queue waiting to either - * receive from the queue or send to the queue. - * - * @param xQueue The queue to reset - * @return always returns pdPASS + * Reset a queue back to its original empty state. The return value is now + * obsolete and is always set to pdPASS. */ #define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE ) @@ -1439,13 +1272,13 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION * is the handle returned by a call to xQueueCreate(). Semaphore and mutex * handles can also be passed in here. * - * @param pcName The name to be associated with the handle. This is the + * @param pcQueueName The name to be associated with the handle. This is the * name that the kernel aware debugger will display. The queue registry only * stores a pointer to the string - so the string must be persistent (global or * preferably in ROM/Flash), not on the stack. */ -#if configQUEUE_REGISTRY_SIZE > 0 - void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +#if( configQUEUE_REGISTRY_SIZE > 0 ) + void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) PRIVILEGED_FUNCTION; /**lint !e971 Unqualified char types are allowed for strings and single characters only. */ #endif /** @@ -1458,13 +1291,11 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION * * @param xQueue The handle of the queue being removed from the registry. */ -#if configQUEUE_REGISTRY_SIZE > 0 +#if( configQUEUE_REGISTRY_SIZE > 0 ) void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; #endif /** - * @note This function has been back ported from FreeRTOS v9.0.0 - * * The queue registry is provided as a means for kernel aware debuggers to * locate queues, semaphores and mutexes. Call pcQueueGetName() to look * up and return the name of a queue in the queue registry from the queue's @@ -1476,7 +1307,7 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION * returned. */ #if( configQUEUE_REGISTRY_SIZE > 0 ) - const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /**lint !e971 Unqualified char types are allowed for strings and single characters only. */ #endif /** @@ -1632,12 +1463,14 @@ QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const Ti QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION; /** @cond */ + /* Not public API functions. */ -void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION; void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION; UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; + /** @endcond */ #ifdef __cplusplus diff --git a/tools/sdk/esp32/include/freertos/include/freertos/semphr.h b/tools/sdk/esp32/include/freertos/include/freertos/semphr.h index 1aff6c9d..b9eaf89a 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/semphr.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/semphr.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef SEMAPHORE_H #define SEMAPHORE_H @@ -84,6 +42,13 @@ typedef QueueHandle_t SemaphoreHandle_t; /** @cond */ /** + * semphr. h + *
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )
+ * + * In many usage scenarios it is faster and more memory efficient to use a + * direct to task notification in place of a binary semaphore! + * http://www.freertos.org/RTOS-task-notifications.html + * * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the * xSemaphoreCreateBinary() function. Note that binary semaphores created using * the vSemaphoreCreateBinary() macro are created in a state such that the @@ -160,11 +125,6 @@ typedef QueueHandle_t SemaphoreHandle_t; * created using xSemaphoreCreateBinary() are created in a state such that the * the semaphore must first be 'given' before it can be 'taken'. * - * Function that creates a semaphore by using the existing queue mechanism. - * The queue length is 1 as this is a binary semaphore. The data size is 0 - * as nothing is actually stored - all that is important is whether the queue is - * empty or full (the binary semaphore is available or not). - * * This type of semaphore can be used for pure synchronisation between tasks or * between an interrupt and a task. The semaphore need not be given back once * obtained, so one task/interrupt can continuously 'give' the semaphore while @@ -172,7 +132,8 @@ typedef QueueHandle_t SemaphoreHandle_t; * semaphore does not use a priority inheritance mechanism. For an alternative * that does use priority inheritance see xSemaphoreCreateMutex(). * - * @return Handle to the created semaphore. + * @return Handle to the created semaphore, or NULL if the memory required to + * hold the semaphore's data structures could not be allocated. * * Example usage: * @code{c} @@ -255,7 +216,7 @@ typedef QueueHandle_t SemaphoreHandle_t; /** * Macro to obtain a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or * xSemaphoreCreateCounting(). * * @param xSemaphore A handle to the semaphore being taken - obtained when @@ -311,7 +272,7 @@ typedef QueueHandle_t SemaphoreHandle_t; * @endcode * \ingroup Semaphores */ -#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueGenericReceive( ( QueueHandle_t ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE ) +#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) ) /** * Macro to recursively obtain, or 'take', a mutex type semaphore. @@ -417,7 +378,7 @@ typedef QueueHandle_t SemaphoreHandle_t; /** * Macro to release a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). * * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for @@ -475,6 +436,9 @@ typedef QueueHandle_t SemaphoreHandle_t; #define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK ) /** + * semphr. h + *
xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )
+ * * Macro to recursively release, or 'give', a mutex type semaphore. * The mutex must have previously been created using a call to * xSemaphoreCreateRecursiveMutex(); @@ -573,7 +537,7 @@ typedef QueueHandle_t SemaphoreHandle_t; /** * Macro to release a semaphore. The semaphore must have previously been - * created with a call to vSemaphoreCreateBinary() or xSemaphoreCreateCounting(). + * created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting(). * * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) * must not be used with this macro. @@ -583,7 +547,7 @@ typedef QueueHandle_t SemaphoreHandle_t; * @param xSemaphore A handle to the semaphore being released. This is the * handle returned when the semaphore was created. * - * @param[out] pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set + * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task * to unblock, and the unblocked task has a priority higher than the currently * running task. If xSemaphoreGiveFromISR() sets this value to pdTRUE then @@ -656,7 +620,7 @@ typedef QueueHandle_t SemaphoreHandle_t; /** * Macro to take a semaphore from an ISR. The semaphore must have - * previously been created with a call to vSemaphoreCreateBinary() or + * previously been created with a call to xSemaphoreCreateBinary() or * xSemaphoreCreateCounting(). * * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) @@ -704,7 +668,7 @@ typedef QueueHandle_t SemaphoreHandle_t; * * Mutex type semaphores cannot be used from within interrupt service routines. * - * See vSemaphoreCreateBinary() for an alternative implementation that can be + * See xSemaphoreCreateBinary() for an alternative implementation that can be * used for pure synchronisation (where one task or interrupt always 'gives' the * semaphore and another always 'takes' the semaphore) and from within interrupt * service routines. @@ -1106,6 +1070,18 @@ typedef QueueHandle_t SemaphoreHandle_t; #define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) ) /** + * + * If xMutex is indeed a mutex type semaphore, return the current mutex holder. + * If xMutex is not a mutex type semaphore, or the mutex is available (not held + * by a task), return NULL. + * + */ +#define xSemaphoreGetMutexHolderFromISR( xSemaphore ) xQueueGetMutexHolderFromISR( ( xSemaphore ) ) + +/** + * semphr.h + *
UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );
+ * * If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns * its current count value. If the semaphore is a binary semaphore then * uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the diff --git a/tools/sdk/esp32/include/freertos/include/freertos/StackMacros.h b/tools/sdk/esp32/include/freertos/include/freertos/stack_macros.h similarity index 59% rename from tools/sdk/esp32/include/freertos/include/freertos/StackMacros.h rename to tools/sdk/esp32/include/freertos/include/freertos/stack_macros.h index 50d2e198..2c77d090 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/StackMacros.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/stack_macros.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef STACK_MACROS_H #define STACK_MACROS_H @@ -178,7 +136,6 @@ } #endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ -/*-----------------------------------------------------------*/ #endif /* STACK_MACROS_H */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/stream_buffer.h b/tools/sdk/esp32/include/freertos/include/freertos/stream_buffer.h new file mode 100644 index 00000000..365c6c27 --- /dev/null +++ b/tools/sdk/esp32/include/freertos/include/freertos/stream_buffer.h @@ -0,0 +1,745 @@ +/* + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ + +/* + * Stream buffers are used to send a continuous stream of data from one task or + * interrupt to another. Their implementation is light weight, making them + * particularly suited for interrupt to task and core to core communication + * scenarios. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xStreamBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xStreamBufferRead()) inside a critical section section and set the + * receive block time to 0. + * + */ + +#ifndef STREAM_BUFFER_H +#define STREAM_BUFFER_H + +#ifndef INC_FREERTOS_H + #error "include FreeRTOS.h must appear in source files before include stream_buffer.h" +#endif + +#if defined( __cplusplus ) +extern "C" { +#endif + +/** + * Type by which stream buffers are referenced. For example, a call to + * xStreamBufferCreate() returns an StreamBufferHandle_t variable that can + * then be used as a parameter to xStreamBufferSend(), xStreamBufferReceive(), + * etc. + */ +struct StreamBufferDef_t; +typedef struct StreamBufferDef_t * StreamBufferHandle_t; + +/** + * Creates a new stream buffer using dynamically allocated memory. See + * xStreamBufferCreateStatic() for a version that uses statically allocated + * memory (memory that is allocated at compile time). + * + * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in + * FreeRTOSConfig.h for xStreamBufferCreate() to be available. + * + * @param xBufferSizeBytes The total number of bytes the stream buffer will be + * able to hold at any one time. + * + * @param xTriggerLevelBytes The number of bytes that must be in the stream + * buffer before a task that is blocked on the stream buffer to wait for data is + * moved out of the blocked state. For example, if a task is blocked on a read + * of an empty stream buffer that has a trigger level of 1 then the task will be + * unblocked when a single byte is written to the buffer or the task's block + * time expires. As another example, if a task is blocked on a read of an empty + * stream buffer that has a trigger level of 10 then the task will not be + * unblocked until the stream buffer contains at least 10 bytes or the task's + * block time expires. If a reading task's block time expires before the + * trigger level is reached then the task will still receive however many bytes + * are actually available. Setting a trigger level of 0 will result in a + * trigger level of 1 being used. It is not valid to specify a trigger level + * that is greater than the buffer size. + * + * @return If NULL is returned, then the stream buffer cannot be created + * because there is insufficient heap memory available for FreeRTOS to allocate + * the stream buffer data structures and storage area. A non-NULL value being + * returned indicates that the stream buffer has been created successfully - + * the returned value should be stored as the handle to the created stream + * buffer. + * + * Example use: + * @code{c} + * + * void vAFunction( void ) + * { + * StreamBufferHandle_t xStreamBuffer; + * const size_t xStreamBufferSizeBytes = 100, xTriggerLevel = 10; + * + * // Create a stream buffer that can hold 100 bytes. The memory used to hold + * // both the stream buffer structure and the data in the stream buffer is + * // allocated dynamically. + * xStreamBuffer = xStreamBufferCreate( xStreamBufferSizeBytes, xTriggerLevel ); + * + * if( xStreamBuffer == NULL ) + * { + * // There was not enough heap memory space available to create the + * // stream buffer. + * } + * else + * { + * // The stream buffer was created successfully and can now be used. + * } + * } + * @endcode + * \ingroup StreamBufferManagement + */ +#define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes ) xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE ) + +/** + * Creates a new stream buffer using statically allocated memory. See + * xStreamBufferCreate() for a version that uses dynamically allocated memory. + * + * configSUPPORT_STATIC_ALLOCATION must be set to 1 in FreeRTOSConfig.h for + * xStreamBufferCreateStatic() to be available. + * + * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the + * pucStreamBufferStorageArea parameter. + * + * @param xTriggerLevelBytes The number of bytes that must be in the stream + * buffer before a task that is blocked on the stream buffer to wait for data is + * moved out of the blocked state. For example, if a task is blocked on a read + * of an empty stream buffer that has a trigger level of 1 then the task will be + * unblocked when a single byte is written to the buffer or the task's block + * time expires. As another example, if a task is blocked on a read of an empty + * stream buffer that has a trigger level of 10 then the task will not be + * unblocked until the stream buffer contains at least 10 bytes or the task's + * block time expires. If a reading task's block time expires before the + * trigger level is reached then the task will still receive however many bytes + * are actually available. Setting a trigger level of 0 will result in a + * trigger level of 1 being used. It is not valid to specify a trigger level + * that is greater than the buffer size. + * + * @param pucStreamBufferStorageArea Must point to a uint8_t array that is at + * least xBufferSizeBytes + 1 big. This is the array to which streams are + * copied when they are written to the stream buffer. + * + * @param pxStaticStreamBuffer Must point to a variable of type + * StaticStreamBuffer_t, which will be used to hold the stream buffer's data + * structure. + * + * @return If the stream buffer is created successfully then a handle to the + * created stream buffer is returned. If either pucStreamBufferStorageArea or + * pxStaticstreamBuffer are NULL then NULL is returned. + * + * Example use: + * @code{c} + * + * // Used to dimension the array used to hold the streams. The available space + * // will actually be one less than this, so 999. + * #define STORAGE_SIZE_BYTES 1000 + * + * // Defines the memory that will actually hold the streams within the stream + * // buffer. + * static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ]; + * + * // The variable used to hold the stream buffer structure. + * StaticStreamBuffer_t xStreamBufferStruct; + * + * void MyFunction( void ) + * { + * StreamBufferHandle_t xStreamBuffer; + * const size_t xTriggerLevel = 1; + * + * xStreamBuffer = xStreamBufferCreateStatic( sizeof( ucBufferStorage ), + * xTriggerLevel, + * ucBufferStorage, + * &xStreamBufferStruct ); + * + * // As neither the pucStreamBufferStorageArea or pxStaticStreamBuffer + * // parameters were NULL, xStreamBuffer will not be NULL, and can be used to + * // reference the created stream buffer in other stream buffer API calls. + * + * // Other code that uses the stream buffer can go here. + * } + * + * @endcode + * \ingroup StreamBufferManagement + */ +#define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer ) + +/** + * Sends bytes to a stream buffer. The bytes are copied into the stream buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xStreamBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xStreamBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xStreamBufferSend() to write to a stream buffer from a task. Use + * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt + * service routine (ISR). + * + * @param xStreamBuffer The handle of the stream buffer to which a stream is + * being sent. + * + * @param pvTxData A pointer to the buffer that holds the bytes to be copied + * into the stream buffer. + * + * @param xDataLengthBytes The maximum number of bytes to copy from pvTxData + * into the stream buffer. + * + * @param xTicksToWait The maximum amount of time the task should remain in the + * Blocked state to wait for enough space to become available in the stream + * buffer, should the stream buffer contain too little space to hold the + * another xDataLengthBytes bytes. The block time is specified in tick periods, + * so the absolute time it represents is dependent on the tick frequency. The + * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds + * into a time specified in ticks. Setting xTicksToWait to portMAX_DELAY will + * cause the task to wait indefinitely (without timing out), provided + * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h. If a task times out + * before it can write all xDataLengthBytes into the buffer it will still write + * as many bytes as possible. A task does not use any CPU time when it is in + * the blocked state. + * + * @return The number of bytes written to the stream buffer. If a task times + * out before it can write all xDataLengthBytes into the buffer it will still + * write as many bytes as possible. + * + * Example use: + * @code{c} + * void vAFunction( StreamBufferHandle_t xStreamBuffer ) + * { + * size_t xBytesSent; + * uint8_t ucArrayToSend[] = { 0, 1, 2, 3 }; + * char *pcStringToSend = "String to send"; + * const TickType_t x100ms = pdMS_TO_TICKS( 100 ); + * + * // Send an array to the stream buffer, blocking for a maximum of 100ms to + * // wait for enough space to be available in the stream buffer. + * xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms ); + * + * if( xBytesSent != sizeof( ucArrayToSend ) ) + * { + * // The call to xStreamBufferSend() times out before there was enough + * // space in the buffer for the data to be written, but it did + * // successfully write xBytesSent bytes. + * } + * + * // Send the string to the stream buffer. Return immediately if there is not + * // enough space in the buffer. + * xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 ); + * + * if( xBytesSent != strlen( pcStringToSend ) ) + * { + * // The entire string could not be added to the stream buffer because + * // there was not enough free space in the buffer, but xBytesSent bytes + * // were sent. Could try again to send the remaining bytes. + * } + * } + * @endcode + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, + const void *pvTxData, + size_t xDataLengthBytes, + TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/** + * Interrupt safe version of the API function that sends a stream of bytes to + * the stream buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xStreamBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xStreamBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xStreamBufferSend() to write to a stream buffer from a task. Use + * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt + * service routine (ISR). + * + * @param xStreamBuffer The handle of the stream buffer to which a stream is + * being sent. + * + * @param pvTxData A pointer to the data that is to be copied into the stream + * buffer. + * + * @param xDataLengthBytes The maximum number of bytes to copy from pvTxData + * into the stream buffer. + * + * @param pxHigherPriorityTaskWoken It is possible that a stream buffer will + * have a task blocked on it waiting for data. Calling + * xStreamBufferSendFromISR() can make data available, and so cause a task that + * was waiting for data to leave the Blocked state. If calling + * xStreamBufferSendFromISR() causes a task to leave the Blocked state, and the + * unblocked task has a priority higher than the currently executing task (the + * task that was interrupted), then, internally, xStreamBufferSendFromISR() + * will set *pxHigherPriorityTaskWoken to pdTRUE. If + * xStreamBufferSendFromISR() sets this value to pdTRUE, then normally a + * context switch should be performed before the interrupt is exited. This will + * ensure that the interrupt returns directly to the highest priority Ready + * state task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it + * is passed into the function. See the example code below for an example. + * + * @return The number of bytes actually written to the stream buffer, which will + * be less than xDataLengthBytes if the stream buffer didn't have enough free + * space for all the bytes to be written. + * + * Example use: + * @code{c} + * //A stream buffer that has already been created. + * StreamBufferHandle_t xStreamBuffer; + * + * void vAnInterruptServiceRoutine( void ) + * { + * size_t xBytesSent; + * char *pcStringToSend = "String to send"; + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE. + * + * // Attempt to send the string to the stream buffer. + * xBytesSent = xStreamBufferSendFromISR( xStreamBuffer, + * ( void * ) pcStringToSend, + * strlen( pcStringToSend ), + * &xHigherPriorityTaskWoken ); + * + * if( xBytesSent != strlen( pcStringToSend ) ) + * { + * // There was not enough free space in the stream buffer for the entire + * // string to be written, ut xBytesSent bytes were written. + * } + * + * // If xHigherPriorityTaskWoken was set to pdTRUE inside + * // xStreamBufferSendFromISR() then a task that has a priority above the + * // priority of the currently executing task was unblocked and a context + * // switch should be performed to ensure the ISR returns to the unblocked + * // task. In most FreeRTOS ports this is done by simply passing + * // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the + * // variables value, and perform the context switch if necessary. Check the + * // documentation for the port in use for port specific instructions. + * taskYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + * } + * @endcode + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer, + const void *pvTxData, + size_t xDataLengthBytes, + BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/** + * Receives bytes from a stream buffer. + * + * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer + * implementation (so also the message buffer implementation, as message buffers + * are built on top of stream buffers) assumes there is only one task or + * interrupt that will write to the buffer (the writer), and only one task or + * interrupt that will read from the buffer (the reader). It is safe for the + * writer and reader to be different tasks or interrupts, but, unlike other + * FreeRTOS objects, it is not safe to have multiple different writers or + * multiple different readers. If there are to be multiple different writers + * then the application writer must place each call to a writing API function + * (such as xStreamBufferSend()) inside a critical section and set the send + * block time to 0. Likewise, if there are to be multiple different readers + * then the application writer must place each call to a reading API function + * (such as xStreamBufferRead()) inside a critical section and set the receive + * block time to 0. + * + * Use xStreamBufferReceive() to read from a stream buffer from a task. Use + * xStreamBufferReceiveFromISR() to read from a stream buffer from an + * interrupt service routine (ISR). + * + * @param xStreamBuffer The handle of the stream buffer from which bytes are to + * be received. + * + * @param pvRxData A pointer to the buffer into which the received bytes will be + * copied. + * + * @param xBufferLengthBytes The length of the buffer pointed to by the + * pvRxData parameter. This sets the maximum number of bytes to receive in one + * call. xStreamBufferReceive will return as many bytes as possible up to a + * maximum set by xBufferLengthBytes. + * + * @param xTicksToWait The maximum amount of time the task should remain in the + * Blocked state to wait for data to become available if the stream buffer is + * empty. xStreamBufferReceive() will return immediately if xTicksToWait is + * zero. The block time is specified in tick periods, so the absolute time it + * represents is dependent on the tick frequency. The macro pdMS_TO_TICKS() can + * be used to convert a time specified in milliseconds into a time specified in + * ticks. Setting xTicksToWait to portMAX_DELAY will cause the task to wait + * indefinitely (without timing out), provided INCLUDE_vTaskSuspend is set to 1 + * in FreeRTOSConfig.h. A task does not use any CPU time when it is in the + * Blocked state. + * + * @return The number of bytes actually read from the stream buffer, which will + * be less than xBufferLengthBytes if the call to xStreamBufferReceive() timed + * out before xBufferLengthBytes were available. + * + * Example use: + * @code{c} + * void vAFunction( StreamBuffer_t xStreamBuffer ) + * { + * uint8_t ucRxData[ 20 ]; + * size_t xReceivedBytes; + * const TickType_t xBlockTime = pdMS_TO_TICKS( 20 ); + * + * // Receive up to another sizeof( ucRxData ) bytes from the stream buffer. + * // Wait in the Blocked state (so not using any CPU processing time) for a + * // maximum of 100ms for the full sizeof( ucRxData ) number of bytes to be + * // available. + * xReceivedBytes = xStreamBufferReceive( xStreamBuffer, + * ( void * ) ucRxData, + * sizeof( ucRxData ), + * xBlockTime ); + * + * if( xReceivedBytes > 0 ) + * { + * // A ucRxData contains another xRecievedBytes bytes of data, which can + * // be processed here.... + * } + * } + * @endcode + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, + void *pvRxData, + size_t xBufferLengthBytes, + TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + + +/** + * An interrupt safe version of the API function that receives bytes from a + * stream buffer. + * + * Use xStreamBufferReceive() to read bytes from a stream buffer from a task. + * Use xStreamBufferReceiveFromISR() to read bytes from a stream buffer from an + * interrupt service routine (ISR). + * + * @param xStreamBuffer The handle of the stream buffer from which a stream + * is being received. + * + * @param pvRxData A pointer to the buffer into which the received bytes are + * copied. + * + * @param xBufferLengthBytes The length of the buffer pointed to by the + * pvRxData parameter. This sets the maximum number of bytes to receive in one + * call. xStreamBufferReceive will return as many bytes as possible up to a + * maximum set by xBufferLengthBytes. + * + * @param pxHigherPriorityTaskWoken It is possible that a stream buffer will + * have a task blocked on it waiting for space to become available. Calling + * xStreamBufferReceiveFromISR() can make space available, and so cause a task + * that is waiting for space to leave the Blocked state. If calling + * xStreamBufferReceiveFromISR() causes a task to leave the Blocked state, and + * the unblocked task has a priority higher than the currently executing task + * (the task that was interrupted), then, internally, + * xStreamBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE. + * If xStreamBufferReceiveFromISR() sets this value to pdTRUE, then normally a + * context switch should be performed before the interrupt is exited. That will + * ensure the interrupt returns directly to the highest priority Ready state + * task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it is + * passed into the function. See the code example below for an example. + * + * @return The number of bytes read from the stream buffer, if any. + * + * Example use: + * @code{c} + * // A stream buffer that has already been created. + * StreamBuffer_t xStreamBuffer; + * + * void vAnInterruptServiceRoutine( void ) + * { + * uint8_t ucRxData[ 20 ]; + * size_t xReceivedBytes; + * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE. + * + * // Receive the next stream from the stream buffer. + * xReceivedBytes = xStreamBufferReceiveFromISR( xStreamBuffer, + * ( void * ) ucRxData, + * sizeof( ucRxData ), + * &xHigherPriorityTaskWoken ); + * + * if( xReceivedBytes > 0 ) + * { + * // ucRxData contains xReceivedBytes read from the stream buffer. + * // Process the stream here.... + * } + * + * // If xHigherPriorityTaskWoken was set to pdTRUE inside + * // xStreamBufferReceiveFromISR() then a task that has a priority above the + * // priority of the currently executing task was unblocked and a context + * // switch should be performed to ensure the ISR returns to the unblocked + * // task. In most FreeRTOS ports this is done by simply passing + * // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the + * // variables value, and perform the context switch if necessary. Check the + * // documentation for the port in use for port specific instructions. + * taskYIELD_FROM_ISR( xHigherPriorityTaskWoken ); + * } + * @endcode + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer, + void *pvRxData, + size_t xBufferLengthBytes, + BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/** + * Deletes a stream buffer that was previously created using a call to + * xStreamBufferCreate() or xStreamBufferCreateStatic(). If the stream + * buffer was created using dynamic memory (that is, by xStreamBufferCreate()), + * then the allocated memory is freed. + * + * A stream buffer handle must not be used after the stream buffer has been + * deleted. + * + * @param xStreamBuffer The handle of the stream buffer to be deleted. + * + * \ingroup StreamBufferManagement + */ +void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * Queries a stream buffer to see if it is full. A stream buffer is full if it + * does not have any free space, and therefore cannot accept any more data. + * + * @param xStreamBuffer The handle of the stream buffer being queried. + * + * @return If the stream buffer is full then pdTRUE is returned. Otherwise + * pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * Queries a stream buffer to see if it is empty. A stream buffer is empty if + * it does not contain any data. + * + * @param xStreamBuffer The handle of the stream buffer being queried. + * + * @return If the stream buffer is empty then pdTRUE is returned. Otherwise + * pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * Resets a stream buffer to its initial, empty, state. Any data that was in + * the stream buffer is discarded. A stream buffer can only be reset if there + * are no tasks blocked waiting to either send to or receive from the stream + * buffer. + * + * @param xStreamBuffer The handle of the stream buffer being reset. + * + * @return If the stream buffer is reset then pdPASS is returned. If there was + * a task blocked waiting to send to or read from the stream buffer then the + * stream buffer is not reset and pdFAIL is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * Queries a stream buffer to see how much free space it contains, which is + * equal to the amount of data that can be sent to the stream buffer before it + * is full. + * + * @param xStreamBuffer The handle of the stream buffer being queried. + * + * @return The number of bytes that can be written to the stream buffer before + * the stream buffer would be full. + * + * \defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * Queries a stream buffer to see how much data it contains, which is equal to + * the number of bytes that can be read from the stream buffer before the stream + * buffer would be empty. + * + * @param xStreamBuffer The handle of the stream buffer being queried. + * + * @return The number of bytes that can be read from the stream buffer before + * the stream buffer would be empty. + * + * \defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable + * \ingroup StreamBufferManagement + */ +size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +/** + * A stream buffer's trigger level is the number of bytes that must be in the + * stream buffer before a task that is blocked on the stream buffer to + * wait for data is moved out of the blocked state. For example, if a task is + * blocked on a read of an empty stream buffer that has a trigger level of 1 + * then the task will be unblocked when a single byte is written to the buffer + * or the task's block time expires. As another example, if a task is blocked + * on a read of an empty stream buffer that has a trigger level of 10 then the + * task will not be unblocked until the stream buffer contains at least 10 bytes + * or the task's block time expires. If a reading task's block time expires + * before the trigger level is reached then the task will still receive however + * many bytes are actually available. Setting a trigger level of 0 will result + * in a trigger level of 1 being used. It is not valid to specify a trigger + * level that is greater than the buffer size. + * + * A trigger level is set when the stream buffer is created, and can be modified + * using xStreamBufferSetTriggerLevel(). + * + * @param xStreamBuffer The handle of the stream buffer being updated. + * + * @param xTriggerLevel The new trigger level for the stream buffer. + * + * @return If xTriggerLevel was less than or equal to the stream buffer's length + * then the trigger level will be updated and pdTRUE is returned. Otherwise + * pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel ) PRIVILEGED_FUNCTION; + +/** + * For advanced users only. + * + * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when + * data is sent to a message buffer or stream buffer. If there was a task that + * was blocked on the message or stream buffer waiting for data to arrive then + * the sbSEND_COMPLETED() macro sends a notification to the task to remove it + * from the Blocked state. xStreamBufferSendCompletedFromISR() does the same + * thing. It is provided to enable application writers to implement their own + * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME. + * + * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for + * additional information. + * + * @param xStreamBuffer The handle of the stream buffer to which data was + * written. + * + * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be + * initialised to pdFALSE before it is passed into + * xStreamBufferSendCompletedFromISR(). If calling + * xStreamBufferSendCompletedFromISR() removes a task from the Blocked state, + * and the task has a priority above the priority of the currently running task, + * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a + * context switch should be performed before exiting the ISR. + * + * @return If a task was removed from the Blocked state then pdTRUE is returned. + * Otherwise pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/** + * For advanced users only. + * + * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when + * data is read out of a message buffer or stream buffer. If there was a task + * that was blocked on the message or stream buffer waiting for data to arrive + * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to + * remove it from the Blocked state. xStreamBufferReceiveCompletedFromISR() + * does the same thing. It is provided to enable application writers to + * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT + * ANY OTHER TIME. + * + * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for + * additional information. + * + * @param xStreamBuffer The handle of the stream buffer from which data was + * read. + * + * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be + * initialised to pdFALSE before it is passed into + * xStreamBufferReceiveCompletedFromISR(). If calling + * xStreamBufferReceiveCompletedFromISR() removes a task from the Blocked state, + * and the task has a priority above the priority of the currently running task, + * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a + * context switch should be performed before exiting the ISR. + * + * @return If a task was removed from the Blocked state then pdTRUE is returned. + * Otherwise pdFALSE is returned. + * + * \ingroup StreamBufferManagement + */ +BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; + +/** @cond */ +/* Functions below here are not part of the public API. */ +StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes, + size_t xTriggerLevelBytes, + BaseType_t xIsMessageBuffer ) PRIVILEGED_FUNCTION; + +StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes, + size_t xTriggerLevelBytes, + BaseType_t xIsMessageBuffer, + uint8_t * const pucStreamBufferStorageArea, + StaticStreamBuffer_t * const pxStaticStreamBuffer ) PRIVILEGED_FUNCTION; + +size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + +#if( configUSE_TRACE_FACILITY == 1 ) + void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION; + UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; + uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; +#endif + +/** @endcond */ + +#if defined( __cplusplus ) +} +#endif + +#endif /* !defined( STREAM_BUFFER_H ) */ diff --git a/tools/sdk/esp32/include/freertos/include/freertos/task.h b/tools/sdk/esp32/include/freertos/include/freertos/task.h index cfea1f0a..1b467d67 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/task.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/task.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef INC_TASK_H @@ -75,8 +33,6 @@ #error "include FreeRTOS.h must appear in source files before include task.h" #endif -#include - #include "list.h" #include "freertos/portmacro.h" @@ -88,27 +44,30 @@ extern "C" { * MACROS AND DEFINITIONS *----------------------------------------------------------*/ -#define tskKERNEL_VERSION_NUMBER "V8.2.0" -#define tskKERNEL_VERSION_MAJOR 8 +#define tskKERNEL_VERSION_NUMBER "V10.2.1" +#define tskKERNEL_VERSION_MAJOR 10 #define tskKERNEL_VERSION_MINOR 2 -#define tskKERNEL_VERSION_BUILD 0 +#define tskKERNEL_VERSION_BUILD 1 -/** - * @brief Argument of xTaskCreatePinnedToCore indicating that task has no affinity - */ -#define tskNO_AFFINITY INT_MAX +/* MPU region parameters passed in ulParameters + * of MemoryRegion_t struct. */ +#define tskMPU_REGION_READ_ONLY ( 1UL << 0UL ) +#define tskMPU_REGION_READ_WRITE ( 1UL << 1UL ) +#define tskMPU_REGION_EXECUTE_NEVER ( 1UL << 2UL ) +#define tskMPU_REGION_NORMAL_MEMORY ( 1UL << 3UL ) +#define tskMPU_REGION_DEVICE_MEMORY ( 1UL << 4UL ) +#define tskNO_AFFINITY ( 0x7FFFFFFF ) /** - * task. h - * * Type by which tasks are referenced. For example, a call to xTaskCreate * returns (via a pointer parameter) an TaskHandle_t variable that can then * be used as a parameter to vTaskDelete to delete the task. * * \ingroup Tasks */ -typedef void * TaskHandle_t; - +struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ +//typedef struct tskTaskControlBlock* TaskHandle_t; +typedef void* TaskHandle_t; /** * Defines the prototype to which the application task hook function must * conform. @@ -118,21 +77,22 @@ typedef BaseType_t (*TaskHookFunction_t)( void * ); /** Task states returned by eTaskGetState. */ typedef enum { - eRunning = 0, /*!< A task is querying the state of itself, so must be running. */ - eReady, /*!< The task being queried is in a read or pending ready list. */ - eBlocked, /*!< The task being queried is in the Blocked state. */ - eSuspended, /*!< The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ - eDeleted /*!< The task being queried has been deleted, but its TCB has not yet been freed. */ + eRunning = 0, /* A task is querying the state of itself, so must be running. */ + eReady, /* The task being queried is in a read or pending ready list. */ + eBlocked, /* The task being queried is in the Blocked state. */ + eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ + eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */ + eInvalid /* Used as an 'invalid state' value. */ } eTaskState; -/** Actions that can be performed when vTaskNotify() is called. */ +/* Actions that can be performed when vTaskNotify() is called. */ typedef enum { - eNoAction = 0, /*!< Notify the task without updating its notify value. */ - eSetBits, /*!< Set bits in the task's notification value. */ - eIncrement, /*!< Increment the task's notification value. */ - eSetValueWithOverwrite, /*!< Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ - eSetValueWithoutOverwrite /*!< Set the task's notification value if the previous value has been read by the task. */ + eNoAction = 0, /* Notify the task without updating its notify value. */ + eSetBits, /* Set bits in the task's notification value. */ + eIncrement, /* Increment the task's notification value. */ + eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ + eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */ } eNotifyAction; /** @cond */ @@ -155,35 +115,38 @@ typedef struct xMEMORY_REGION uint32_t ulParameters; } MemoryRegion_t; -/** +/* * Parameters required to create an MPU protected task. */ typedef struct xTASK_PARAMETERS { TaskFunction_t pvTaskCode; const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - uint32_t usStackDepth; + configSTACK_DEPTH_TYPE usStackDepth; void *pvParameters; UBaseType_t uxPriority; StackType_t *puxStackBuffer; MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ]; + #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) + StaticTask_t * const pxTaskBuffer; + #endif } TaskParameters_t; -/** @endcond */ -/** + +/* * Used with the uxTaskGetSystemState() function to return the state of each task in the system. -*/ + */ typedef struct xTASK_STATUS { - TaskHandle_t xHandle; /*!< The handle of the task to which the rest of the information in the structure relates. */ - const char *pcTaskName; /*!< A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - UBaseType_t xTaskNumber; /*!< A number unique to the task. */ - eTaskState eCurrentState; /*!< The state in which the task existed when the structure was populated. */ - UBaseType_t uxCurrentPriority; /*!< The priority at which the task was running (may be inherited) when the structure was populated. */ - UBaseType_t uxBasePriority; /*!< The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ - uint32_t ulRunTimeCounter; /*!< The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ - StackType_t *pxStackBase; /*!< Points to the lowest address of the task's stack area. */ - uint32_t usStackHighWaterMark; /*!< The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ + TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ + const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + UBaseType_t xTaskNumber; /* A number unique to the task. */ + eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ + UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ + UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ + uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ + StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */ + configSTACK_DEPTH_TYPE usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ #if configTASKLIST_INCLUDE_COREID BaseType_t xCoreID; /*!< Core this task is pinned to (0, 1, or -1 for tskNO_AFFINITY). This field is present if CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID is set. */ #endif @@ -201,17 +164,18 @@ typedef struct xTASK_SNAPSHOT pxTopOfStack > pxEndOfStack, stack grows lo2hi*/ } TaskSnapshot_t; +/** @endcond */ + /** * Possible return values for eTaskConfirmSleepModeStatus(). */ typedef enum { - eAbortSleep = 0, /*!< A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */ - eStandardSleep, /*!< Enter a sleep mode that will not last any longer than the expected idle time. */ - eNoTasksWaitingTimeout /*!< No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ + eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */ + eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */ + eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ } eSleepModeStatus; - /** * Defines the priority used by the idle task. This must not be modified. * @@ -220,8 +184,6 @@ typedef enum #define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U ) /** - * task. h - * * Macro for forcing a context switch. * * \ingroup SchedulerControl @@ -229,8 +191,6 @@ typedef enum #define taskYIELD() portYIELD() /** - * task. h - * * Macro to mark the start of a critical code region. Preemptive context * switches cannot occur when in a critical region. * @@ -239,16 +199,11 @@ typedef enum * * \ingroup SchedulerControl */ -#ifdef _ESP_FREERTOS_INTERNAL -#define taskENTER_CRITICAL(mux) portENTER_CRITICAL(mux) -#else -#define taskENTER_CRITICAL(mux) _Pragma("GCC warning \"'taskENTER_CRITICAL(mux)' is deprecated in ESP-IDF, consider using 'portENTER_CRITICAL(mux)'\"") portENTER_CRITICAL(mux) -#endif +#define taskENTER_CRITICAL( x ) portENTER_CRITICAL( x ) +#define taskENTER_CRITICAL_FROM_ISR( ) portSET_INTERRUPT_MASK_FROM_ISR() #define taskENTER_CRITICAL_ISR(mux) portENTER_CRITICAL_ISR(mux) /** - * task. h - * * Macro to mark the end of a critical code region. Preemptive context * switches cannot occur when in a critical region. * @@ -257,16 +212,11 @@ typedef enum * * \ingroup SchedulerControl */ -#ifdef _ESP_FREERTOS_INTERNAL -#define taskEXIT_CRITICAL(mux) portEXIT_CRITICAL(mux) -#else -#define taskEXIT_CRITICAL(mux) _Pragma("GCC warning \"'taskEXIT_CRITICAL(mux)' is deprecated in ESP-IDF, consider using 'portEXIT_CRITICAL(mux)'\"") portEXIT_CRITICAL(mux) -#endif +#define taskEXIT_CRITICAL( x ) portEXIT_CRITICAL( x ) +#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x ) #define taskEXIT_CRITICAL_ISR(mux) portEXIT_CRITICAL_ISR(mux) /** - * task. h - * * Macro to disable all maskable interrupts. * * \ingroup SchedulerControl @@ -274,8 +224,6 @@ typedef enum #define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS() /** - * task. h - * * Macro to enable microcontroller interrupts. * * \ingroup SchedulerControl @@ -481,9 +429,9 @@ is used in assert() statements. */ * cause the function to fail. * * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will - * be created and a task handle will be returned by which the created task - * can be referenced. If either pxStackBuffer or pxTaskBuffer - * are NULL then the task will not be created and NULL is returned. + * be created and pdPASS is returned. If either pxStackBuffer or pxTaskBuffer + * are NULL then the task will not be created and + * errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY is returned. * * \ingroup Tasks */ @@ -535,9 +483,9 @@ is used in assert() statements. */ * memory to be allocated dynamically. * * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will - * be created and a task handle will be returned by which the created task - * can be referenced. If either pxStackBuffer or pxTaskBuffer - * are NULL then the task will not be created and NULL is returned. + * be created and pdPASS is returned. If either pxStackBuffer or pxTaskBuffer + * are NULL then the task will not be created and + * errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY is returned. * * @note If program uses thread local variables (ones specified with "__thread" keyword) * then storage for them will be allocated on the task's stack. @@ -609,8 +557,7 @@ is used in assert() statements. */ } #endif /* configSUPPORT_STATIC_ALLOCATION */ -/** @cond */ -/** +/* * xTaskCreateRestricted() should only be used in systems that include an MPU * implementation. * @@ -618,15 +565,18 @@ is used in assert() statements. */ * The function parameters define the memory regions and associated access * permissions allocated to the task. * - * @param pxTaskDefinition Pointer to a structure that contains a member + * See xTaskCreateRestrictedStatic() for a version that does not use any + * dynamic memory allocation. + * + * param pxTaskDefinition Pointer to a structure that contains a member * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API * documentation) plus an optional stack buffer and the memory region * definitions. * - * @param pxCreatedTask Used to pass back a handle by which the created task + * param pxCreatedTask Used to pass back a handle by which the created task * can be referenced. * - * @return pdPASS if the task was successfully created and added to a ready + * return pdPASS if the task was successfully created and added to a ready * list, otherwise an error code defined in the file projdefs.h * * Example usage: @@ -636,7 +586,7 @@ is used in assert() statements. */ * { * vATask, // pvTaskCode - the function that implements the task. * "ATask", // pcName - just a text name for the task to assist debugging. - * 100, // usStackDepth - the stack size DEFINED IN BYTES. + * 100, // usStackDepth - the stack size DEFINED IN WORDS. * NULL, // pvParameters - passed into the task function as the function parameters. * ( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state. * cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack. @@ -673,18 +623,100 @@ is used in assert() statements. */ * \ingroup Tasks */ #if( portUSING_MPU_WRAPPERS == 1 ) - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; + BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ); #endif +/* + * xTaskCreateRestrictedStatic() should only be used in systems that include an + * MPU implementation. + * + * Only available when configSUPPORT_STATIC_ALLOCATION is set to 1. + * + * Internally, within the FreeRTOS implementation, tasks use two blocks of + * memory. The first block is used to hold the task's data structures. The + * second block is used by the task as its stack. If a task is created using + * xTaskCreateRestricted() then the stack is provided by the application writer, + * and the memory used to hold the task's data structure is automatically + * dynamically allocated inside the xTaskCreateRestricted() function. If a task + * is created using xTaskCreateRestrictedStatic() then the application writer + * must provide the memory used to hold the task's data structures too. + * xTaskCreateRestrictedStatic() therefore allows a memory protected task to be + * created without using any dynamic memory allocation. + * + * param pxTaskDefinition Pointer to a structure that contains a member + * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API + * documentation) plus an optional stack buffer and the memory region + * definitions. If configSUPPORT_STATIC_ALLOCATION is set to 1 the structure + * contains an additional member, which is used to point to a variable of type + * StaticTask_t - which is then used to hold the task's data structure. + * + * param pxCreatedTask Used to pass back a handle by which the created task + * can be referenced. + * + * return pdPASS if the task was successfully created and added to a ready + * list, otherwise an error code defined in the file projdefs.h + * + * Example usage: + * @code{c} + * // Create an TaskParameters_t structure that defines the task to be created. + * // The StaticTask_t variable is only included in the structure when + * // configSUPPORT_STATIC_ALLOCATION is set to 1. The PRIVILEGED_DATA macro can + * // be used to force the variable into the RTOS kernel's privileged data area. + * static PRIVILEGED_DATA StaticTask_t xTaskBuffer; + * static const TaskParameters_t xCheckTaskParameters = + * { + * vATask, // pvTaskCode - the function that implements the task. + * "ATask", // pcName - just a text name for the task to assist debugging. + * 100, // usStackDepth - the stack size DEFINED IN BYTES. + * NULL, // pvParameters - passed into the task function as the function parameters. + * ( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state. + * cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack. + * + * // xRegions - Allocate up to three separate memory regions for access by + * // the task, with appropriate access permissions. Different processors have + * // different memory alignment requirements - refer to the FreeRTOS documentation + * // for full information. + * { + * // Base address Length Parameters + * { cReadWriteArray, 32, portMPU_REGION_READ_WRITE }, + * { cReadOnlyArray, 32, portMPU_REGION_READ_ONLY }, + * { cPrivilegedOnlyAccessArray, 128, portMPU_REGION_PRIVILEGED_READ_WRITE } + * } + * + * &xTaskBuffer; // Holds the task's data structure. + * }; + * + * int main( void ) + * { + * TaskHandle_t xHandle; + * + * // Create a task from the const structure defined above. The task handle + * // is requested (the second parameter is not NULL) but in this case just for + * // demonstration purposes as its not actually used. + * xTaskCreateRestricted( &xRegTest1Parameters, &xHandle ); + * + * // Start the scheduler. + * vTaskStartScheduler(); + * + * // Will only get here if there was insufficient memory to create the idle + * // and/or timer task. + * for( ;; ); + * } + * @endcode + * \ingroup Tasks + */ +#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) + BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ); +#endif -/** +/* * Memory regions are assigned to a restricted task when the task is created by * a call to xTaskCreateRestricted(). These regions can be redefined using * vTaskAllocateMPURegions(). * - * @param xTask The handle of the task being updated. + * param xTask The handle of the task being updated. * - * @param xRegions A pointer to an MemoryRegion_t structure that contains the + * param pxRegions A pointer to an MemoryRegion_t structure that contains the * new memory region definitions. * * Example usage: @@ -721,18 +753,14 @@ is used in assert() statements. */ */ void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION; -/** @endcond */ - /** - * Remove a task from the RTOS real time kernel's management. - * - * The task being deleted will be removed from all ready, blocked, suspended - * and event lists. + * Remove a task from the RTOS real time kernel's management. The task being + * deleted will be removed from all ready, blocked, suspended and event lists. * * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. * See the configuration section for more information. * - * @note The idle task is responsible for freeing the kernel allocated + * NOTE: The idle task is responsible for freeing the kernel allocated * memory from tasks that have been deleted. It is therefore important that * the idle task is not starved of microcontroller processing time if your * application makes any calls to vTaskDelete (). Memory allocated by the @@ -769,9 +797,10 @@ void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; /** * Delay a task for a given number of ticks. * - * The actual time that the task remains blocked depends on the tick rate. - * The constant portTICK_PERIOD_MS can be used to calculate real time from - * the tick rate - with the resolution of one tick period. + * Delay a task for a given number of ticks. The actual time that the + * task remains blocked depends on the tick rate. The constant + * portTICK_PERIOD_MS can be used to calculate real time from the tick + * rate - with the resolution of one tick period. * * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. * See the configuration section for more information. @@ -816,7 +845,8 @@ void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. * See the configuration section for more information. * - * This function can be used by periodic tasks to ensure a constant execution frequency. + * Delay a task until a specified time. This function can be used by periodic + * tasks to ensure a constant execution frequency. * * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will * cause a task to block for the specified number of ticks from the time vTaskDelay () is @@ -867,8 +897,30 @@ void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION; /** - * Obtain the priority of any task. + * INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this + * function to be available. * + * A task will enter the Blocked state when it is waiting for an event. The + * event it is waiting for can be a temporal event (waiting for a time), such + * as when vTaskDelay() is called, or an event on an object, such as when + * xQueueReceive() or ulTaskNotifyTake() is called. If the handle of a task + * that is in the Blocked state is used in a call to xTaskAbortDelay() then the + * task will leave the Blocked state, and return from whichever function call + * placed the task into the Blocked state. + * + * @param xTask The handle of the task to remove from the Blocked state. + * + * @return If the task referenced by xTask was not in the Blocked state then + * pdFAIL is returned. Otherwise pdPASS is returned. + * + * \defgroup xTaskAbortDelay xTaskAbortDelay + * \ingroup TaskCtrl + */ +BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + +/** + * Obtain the priority of any task. + * * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available. * See the configuration section for more information. * @@ -907,18 +959,12 @@ void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xT * @endcode * \ingroup TaskCtrl */ -UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; /** * A version of uxTaskPriorityGet() that can be used from an ISR. - * - * @param xTask Handle of the task to be queried. Passing a NULL - * handle results in the priority of the calling task being returned. - * - * @return The priority of xTask. - * */ -UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; /** * Obtain the state of any task. @@ -937,8 +983,61 @@ UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; /** - * Set the priority of any task. + * Populates a TaskStatus_t structure with information about a task. * + * configUSE_TRACE_FACILITY must be defined as 1 for this function to be + * available. See the configuration section for more information. + * + * + * @param xTask Handle of the task being queried. If xTask is NULL then + * information will be returned about the calling task. + * + * @param pxTaskStatus A pointer to the TaskStatus_t structure that will be + * filled with information about the task referenced by the handle passed using + * the xTask parameter. + * + * @param xGetFreeStackSpace The TaskStatus_t structure contains a member to report + * the stack high water mark of the task being queried. Calculating the stack + * high water mark takes a relatively long time, and can make the system + * temporarily unresponsive - so the xGetFreeStackSpace parameter is provided to + * allow the high water mark checking to be skipped. The high watermark value + * will only be written to the TaskStatus_t structure if xGetFreeStackSpace is + * not set to pdFALSE; + * + * @param eState The TaskStatus_t structure contains a member to report the + * state of the task being queried. Obtaining the task state is not as fast as + * a simple assignment - so the eState parameter is provided to allow the state + * information to be omitted from the TaskStatus_t structure. To obtain state + * information then set eState to eInvalid - otherwise the value passed in + * eState will be reported as the task state in the TaskStatus_t structure. + * + * Example usage: + * @code{c} + * void vAFunction( void ) + * { + * TaskHandle_t xHandle; + * TaskStatus_t xTaskDetails; + * + * // Obtain the handle of a task from its name. + * xHandle = xTaskGetHandle( "Task_Name" ); + * + * // Check the handle is not NULL. + * configASSERT( xHandle ); + * + * // Use the handle to obtain further information about the task. + * vTaskGetInfo( xHandle, + * &xTaskDetails, + * pdTRUE, // Include the high water mark in xTaskDetails. + * eInvalid ); // Include the task state in xTaskDetails. + * } + * @endcode + * \ingroup TaskCtrl + */ +void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION; + +/** + * Set the priority of any task. + * * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. * See the configuration section for more information. * @@ -980,8 +1079,8 @@ void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGE * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. * See the configuration section for more information. * - * When suspended, a task will never get any microcontroller processing time, - * no matter what its priority. + * Suspend any task. When suspended a task will never get any microcontroller + * processing time, no matter what its priority. * * Calls to vTaskSuspend are not accumulative - * i.e. calling vTaskSuspend () twice on the same task still only requires one @@ -1126,12 +1225,12 @@ void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION; /** * Stops the real time kernel tick. * - * @note At the time of writing only the x86 real mode port, which runs on a PC + * NOTE: At the time of writing only the x86 real mode port, which runs on a PC * in place of DOS, implements this function. * - * All created tasks will be automatically deleted and multitasking - * (either preemptive or cooperative) will stop. - * Execution then resumes from the point where vTaskStartScheduler () + * Stops the real time kernel tick. All created tasks will be automatically + * deleted and multitasking (either preemptive or cooperative) will + * stop. Execution then resumes from the point where vTaskStartScheduler () * was called, as if vTaskStartScheduler () had just returned. * * See the demo application file main. c in the demo/PC directory for an @@ -1320,12 +1419,23 @@ UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; * * @return The text (human readable) name of the task referenced by the handle * xTaskToQuery. A task can query its own name by either passing in its own - * handle, or by setting xTaskToQuery to NULL. INCLUDE_pcTaskGetTaskName must be - * set to 1 in FreeRTOSConfig.h for pcTaskGetTaskName() to be available. + * handle, or by setting xTaskToQuery to NULL. * * \ingroup TaskUtils */ -char *pcTaskGetTaskName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * @note This function takes a relatively long time to complete and should be + * used sparingly. + * + * @return The handle of the task that has the human readable name pcNameToQuery. + * NULL is returned if no matching name is found. INCLUDE_xTaskGetHandle + * must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available. + * + * \ingroup TaskUtils + */ +TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ /** * Returns the high water mark of the stack associated with xTask. @@ -1333,19 +1443,52 @@ char *pcTaskGetTaskName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for * this function to be available. * - * High water mark is the minimum free stack space there has been (in bytes - * rather than words as found in vanilla FreeRTOS) since the task started. - * The smaller the returned number the closer the task has come to overflowing its stack. + * Returns the high water mark of the stack associated with xTask. That is, + * the minimum free stack space there has been (in words, so on a 32 bit machine + * a value of 1 means 4 bytes) since the task started. The smaller the returned + * number the closer the task has come to overflowing its stack. + * + * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the + * same except for their return type. Using configSTACK_DEPTH_TYPE allows the + * user to determine the return type. It gets around the problem of the value + * overflowing on 8-bit types without breaking backward compatibility for + * applications that expect an 8-bit return type. * * @param xTask Handle of the task associated with the stack to be checked. * Set xTask to NULL to check the stack of the calling task. * - * @return The smallest amount of free stack space there has been (in bytes - * rather than words as found in vanilla FreeRTOS) since the task referenced by + * @return The smallest amount of free stack space there has been (in words, so + * actual spaces on the stack rather than bytes) since the task referenced by * xTask was created. */ UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +/** + * Returns the start of the stack associated with xTask. + * + * INCLUDE_uxTaskGetStackHighWaterMark2 must be set to 1 in FreeRTOSConfig.h for + * this function to be available. + * + * Returns the high water mark of the stack associated with xTask. That is, + * the minimum free stack space there has been (in words, so on a 32 bit machine + * a value of 1 means 4 bytes) since the task started. The smaller the returned + * number the closer the task has come to overflowing its stack. + * + * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the + * same except for their return type. Using configSTACK_DEPTH_TYPE allows the + * user to determine the return type. It gets around the problem of the value + * overflowing on 8-bit types without breaking backward compatibility for + * applications that expect an 8-bit return type. + * + * @param xTask Handle of the task associated with the stack to be checked. + * Set xTask to NULL to check the stack of the calling task. + * + * @return The smallest amount of free stack space there has been (in words, so + * actual spaces on the stack rather than bytes) since the task referenced by + * xTask was created. + */ +configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + /** * Returns the start of the stack associated with xTask. * @@ -1381,15 +1524,22 @@ constant. */ void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION; /** - * Get the hook function assigned to given task. - * @param xTask Handle of the task to get the hook function for - * Passing xTask as NULL has the effect of getting the calling - * tasks hook function. - * @return The pxHookFunction value assigned to the task xTask. + * + * Returns the pxHookFunction value assigned to the task xTask. Do not + * call from an interrupt service routine - call + * xTaskGetApplicationTaskTagFromISR() instead. */ TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + + /** + * + * Returns the pxHookFunction value assigned to the task xTask. Can + * be called from an interrupt service routine. + */ + TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; #endif /* configUSE_APPLICATION_TASK_TAG ==1 */ #endif /* ifdef configUSE_APPLICATION_TASK_TAG */ + #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) /** @@ -1470,32 +1620,15 @@ constant. */ BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION; /** - * Get the handle of idle task for the current CPU. - * * xTaskGetIdleTaskHandle() is only available if * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. * - * @return The handle of the idle task. It is not valid to call + * Simply returns the handle of the idle task. It is not valid to call * xTaskGetIdleTaskHandle() before the scheduler has been started. */ -TaskHandle_t xTaskGetIdleTaskHandle( void ); +TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; /** - * Get the handle of idle task for the given CPU. - * - * xTaskGetIdleTaskHandleForCPU() is only available if - * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. - * - * @param cpuid The CPU to get the handle for - * - * @return Idle task handle of a given cpu. It is not valid to call - * xTaskGetIdleTaskHandleForCPU() before the scheduler has been started. - */ -TaskHandle_t xTaskGetIdleTaskHandleForCPU( UBaseType_t cpuid ); - -/** - * Get the state of tasks in the system. - * * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for * uxTaskGetSystemState() to be available. * @@ -1505,7 +1638,7 @@ TaskHandle_t xTaskGetIdleTaskHandleForCPU( UBaseType_t cpuid ); * of run time consumed by the task. See the TaskStatus_t structure * definition in this file for the full member list. * - * @note This function is intended for debugging use only as its use results in + * @note This function is intended for debugging use only as its use results in * the scheduler remaining suspended for an extended period. * * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures. @@ -1592,7 +1725,7 @@ TaskHandle_t xTaskGetIdleTaskHandleForCPU( UBaseType_t cpuid ); * } * @endcode */ -UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ); +UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) PRIVILEGED_FUNCTION; /** * List all the current tasks. @@ -1688,8 +1821,32 @@ void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unquali void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ /** - * Send task notification. - * +* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS +* must both be defined as 1 for this function to be available. The application +* must also then provide definitions for +* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() +* to configure a peripheral timer/counter and return the timers current count +* value respectively. The counter should be at least 10 times the frequency of +* the tick count. +* +* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total +* accumulated execution time being stored for each task. The resolution +* of the accumulated time value depends on the frequency of the timer +* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. +* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total +* execution time of each task into a buffer, ulTaskGetIdleRunTimeCounter() +* returns the total execution time of just the idle task. +* +* @return The total run time of the idle task. This is the amount of time the +* idle task has actually been executing. The unit of time is dependent on the +* frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and +* portGET_RUN_TIME_COUNTER_VALUE() macros. +* +* \ingroup TaskUtils +*/ +uint32_t ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION; + +/** * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this * function to be available. * @@ -1729,37 +1886,44 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9 * * @param eAction Specifies how the notification updates the task's notification * value, if at all. Valid values for eAction are as follows: - * - eSetBits: - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. * - * - eIncrement: - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. + * eSetBits - + * The task's notification value is bitwise ORed with ulValue. xTaskNofify() + * always returns pdPASS in this case. * - * - eSetValueWithOverwrite: - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. + * eIncrement - + * The task's notification value is incremented. ulValue is not used and + * xTaskNotify() always returns pdPASS in this case. * - * - eSetValueWithoutOverwrite: - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. + * eSetValueWithOverwrite - + * The task's notification value is set to the value of ulValue, even if the + * task being notified had not yet processed the previous notification (the + * task already had a notification pending). xTaskNotify() always returns + * pdPASS in this case. * - * - eNoAction: - * The task receives a notification without its notification value being - *   updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. + * eSetValueWithoutOverwrite - + * If the task being notified did not already have a notification pending then + * the task's notification value is set to ulValue and xTaskNotify() will + * return pdPASS. If the task being notified already had a notification + * pending then no action is performed and pdFAIL is returned. + * + * eNoAction - + * The task receives a notification without its notification value being + * updated. ulValue is not used and xTaskNotify() always returns pdPASS in + * this case. + * + * @param pulPreviousNotificationValue Can be used to pass out the subject + * task's notification value before any bits are modified by the notify + * function. * * @return Dependent on the value of eAction. See the description of the * eAction parameter. * * \ingroup TaskNotifications */ -BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction ); +BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) PRIVILEGED_FUNCTION; +#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL ) +#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) ) /** * Send task notification from an ISR. @@ -1806,31 +1970,35 @@ BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAct * * @param eAction Specifies how the notification updates the task's notification * value, if at all. Valid values for eAction are as follows: - * - eSetBits: - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. * - * - eIncrement: - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. + * eSetBits - + * The task's notification value is bitwise ORed with ulValue. xTaskNofify() + * always returns pdPASS in this case. * - * - eSetValueWithOverwrite: - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. + * eIncrement - + * The task's notification value is incremented. ulValue is not used and + * xTaskNotify() always returns pdPASS in this case. * - * - eSetValueWithoutOverwrite: - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. + * eSetValueWithOverwrite - + * The task's notification value is set to the value of ulValue, even if the + * task being notified had not yet processed the previous notification (the + * task already had a notification pending). xTaskNotify() always returns + * pdPASS in this case. * - * - eNoAction: - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. + * eSetValueWithoutOverwrite - + * If the task being notified did not already have a notification pending then + * the task's notification value is set to ulValue and xTaskNotify() will + * return pdPASS. If the task being notified already had a notification + * pending then no action is performed and pdFAIL is returned. * + * eNoAction - + * The task receives a notification without its notification value being + * updated. ulValue is not used and xTaskNotify() always returns pdPASS in + * this case. + * + * @param pulPreviousNotificationValue Can be used to pass out the subject task's + * notification value before any bits are modified by the notify function. + * * @param pxHigherPriorityTaskWoken xTaskNotifyFromISR() will set * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the * task to which the notification was sent to leave the Blocked state, and the @@ -1845,7 +2013,9 @@ BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAct * * \ingroup TaskNotifications */ -BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken ); +BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; +#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) ) +#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) ) /** * Wait for task notification @@ -1918,7 +2088,7 @@ BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNo * * \ingroup TaskNotifications */ -BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ); +BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** * Simplified macro for sending task notification. @@ -1962,7 +2132,7 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClea * * \ingroup TaskNotifications */ -#define xTaskNotifyGive( xTaskToNotify ) xTaskNotify( ( xTaskToNotify ), 0, eIncrement ) +#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL ) /** * Simplified macro for sending task notification from ISR. @@ -2015,7 +2185,7 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClea * * \ingroup TaskNotifications */ -void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ); +void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; /** * Simplified macro for receiving task notification. @@ -2082,12 +2252,53 @@ void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPri * * \ingroup TaskNotifications */ -uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ); +uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; + +/** + * + * If the notification state of the task referenced by the handle xTask is + * eNotified, then set the task's notification state to eNotWaitingNotification. + * The task's notification value is not altered. Set xTask to NULL to clear the + * notification state of the calling task. + * + * @return pdTRUE if the task's notification state was set to + * eNotWaitingNotification, otherwise pdFALSE. + * + * \ingroup TaskNotifications + */ +BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ); /*----------------------------------------------------------- * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES *----------------------------------------------------------*/ /** @cond */ +/* + * Return the handle of the task running on a certain CPU. Because of + * the nature of SMP processing, there is no guarantee that this + * value will still be valid on return and should only be used for + * debugging purposes. + */ +TaskHandle_t xTaskGetCurrentTaskHandleForCPU( BaseType_t cpuid ); + +/** + * Get the handle of idle task for the given CPU. + * + * xTaskGetIdleTaskHandleForCPU() is only available if + * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h. + * + * @param cpuid The CPU to get the handle for + * + * @return Idle task handle of a given cpu. It is not valid to call + * xTaskGetIdleTaskHandleForCPU() before the scheduler has been started. + */ +TaskHandle_t xTaskGetIdleTaskHandleForCPU( UBaseType_t cpuid ); + + +/* + * Get the current core affinity of a task + */ +BaseType_t xTaskGetAffinity( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS @@ -2150,7 +2361,7 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xIte * indefinitely, whereas vTaskPlaceOnEventList() does. * */ -void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN @@ -2161,14 +2372,14 @@ void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, const TickType * Removes a task from both the specified event list and the list of blocked * tasks, and places it on a ready queue. * - * xTaskRemoveFromEventList()/xTaskRemoveFromUnorderedEventList() will be called + * xTaskRemoveFromEventList()/vTaskRemoveFromUnorderedEventList() will be called * if either an event occurs to unblock a task, or the block timeout period * expires. * * xTaskRemoveFromEventList() is used when the event list is in task priority * order. It removes the list item from the head of the event list as that will * have the highest priority owning task of all the tasks on the event list. - * xTaskRemoveFromUnorderedEventList() is used when the event list is not + * vTaskRemoveFromUnorderedEventList() is used when the event list is not * ordered and the event list items hold something other than the owning tasks * priority. In this case the event list item value is updated to the value * passed in the xItemValue parameter. @@ -2200,17 +2411,6 @@ TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; */ TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; - - -/* - * Return the handle of the task running on a certain CPU. Because of - * the nature of SMP processing, there is no guarantee that this - * value will still be valid on return and should only be used for - * debugging purposes. - */ -TaskHandle_t xTaskGetCurrentTaskHandleForCPU( BaseType_t cpuid ); - - /* * Capture the current time status for future reference. */ @@ -2238,7 +2438,7 @@ BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; * Raises the priority of the mutex holder to that of the calling task should * the mutex holder have a priority less than the calling task. */ -void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; +BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; /* * Set the priority of a task back to its proper priority in the case that it @@ -2246,12 +2446,21 @@ void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTIO */ BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; +/* + * If a higher priority task attempting to obtain a mutex caused a lower + * priority task to inherit the higher priority task's priority - but the higher + * priority task then timed out without obtaining the mutex, then the lower + * priority task will disinherit the priority again - but only down as far as + * the highest priority task that is still waiting for the mutex (if there were + * more than one task waiting for the mutex). + */ +void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask ) PRIVILEGED_FUNCTION; + /* * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. */ UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - /* * Get the current core affinity of a task */ @@ -2273,8 +2482,21 @@ void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVIL */ void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; +/* Correct the tick count value after the application code has held +interrupts disabled for an extended period. xTicksToCatchUp is the number +of tick interrupts that have been missed due to interrupts being disabled. +Its value is not computed automatically, so must be computed by the +application writer. + +This function is similar to vTaskStepTick(), however, unlike +vTaskStepTick(), xTaskCatchUpTicks() may move the tick count forward past a +time at which a task should be removed from the blocked state. That means +tasks may have to be removed from the blocked state as the tick count is +moved. */ +BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) PRIVILEGED_FUNCTION; + /* - * Only avilable when configUSE_TICKLESS_IDLE is set to 1. + * Only available when configUSE_TICKLESS_IDLE is set to 1. * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port * specific sleep function to determine if it is ok to proceed with the sleep, * and if it is ok to proceed, if it is ok to sleep indefinitely. @@ -2293,7 +2515,13 @@ eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION; * For internal use only. Increment the mutex held count when a mutex is * taken and return the handle of the task that has taken the mutex. */ -void *pvTaskIncrementMutexHeldCount( void ); +TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION; + +/* + * For internal use only. Same as vTaskSetTimeOutState(), but without a critial + * section. + */ +void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; /* * This function fills array with TaskSnapshot_t structures for every task in the system. @@ -2307,7 +2535,6 @@ void *pvTaskIncrementMutexHeldCount( void ); UBaseType_t uxTaskGetSnapshotAll( TaskSnapshot_t * const pxTaskSnapshotArray, const UBaseType_t uxArraySize, UBaseType_t * const pxTcbSz ); /** @endcond */ - #ifdef __cplusplus } #endif diff --git a/tools/sdk/esp32/include/freertos/include/freertos/timers.h b/tools/sdk/esp32/include/freertos/include/freertos/timers.h index 17492e64..92ffc31f 100644 --- a/tools/sdk/esp32/include/freertos/include/freertos/timers.h +++ b/tools/sdk/esp32/include/freertos/include/freertos/timers.h @@ -1,71 +1,29 @@ /* - FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd. - All rights reserved - - VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. - - This file is part of the FreeRTOS distribution. - - FreeRTOS is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License (version 2) as published by the - Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. - - *************************************************************************** - >>! NOTE: The modification to the GPL is included to allow you to !<< - >>! distribute a combined work that includes FreeRTOS without being !<< - >>! obliged to provide the source code for proprietary components !<< - >>! outside of the FreeRTOS kernel. !<< - *************************************************************************** - - FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. Full license text is available on the following - link: http://www.freertos.org/a00114.html - - *************************************************************************** - * * - * FreeRTOS provides completely free yet professionally developed, * - * robust, strictly quality controlled, supported, and cross * - * platform software that is more than just the market leader, it * - * is the industry's de facto standard. * - * * - * Help yourself get started quickly while simultaneously helping * - * to support the FreeRTOS project by purchasing a FreeRTOS * - * tutorial book, reference manual, or both: * - * http://www.FreeRTOS.org/Documentation * - * * - *************************************************************************** - - http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading - the FAQ page "My application does not run, what could be wrong?". Have you - defined configASSERT()? - - http://www.FreeRTOS.org/support - In return for receiving this top quality - embedded software for free we request you assist our global community by - participating in the support forum. - - http://www.FreeRTOS.org/training - Investing in training allows your team to - be as productive as possible as early as possible. Now you can receive - FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers - Ltd, and the world's leading authority on the world's leading RTOS. - - http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, - including FreeRTOS+Trace - an indispensable productivity tool, a DOS - compatible FAT file system, and our tiny thread aware UDP/IP stack. - - http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. - Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. - - http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High - Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS - licenses offer ticketed support, indemnification and commercial middleware. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and - mission critical applications that require provable dependability. - - 1 tab == 4 spaces! -*/ + * FreeRTOS Kernel V10.2.1 + * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://www.FreeRTOS.org + * http://aws.amazon.com/freertos + * + * 1 tab == 4 spaces! + */ #ifndef TIMERS_H @@ -75,10 +33,10 @@ #error "include FreeRTOS.h must appear in source files before include timers.h" #endif -/*lint -e537 This headers are only multiply included if the application code +/*lint -save -e537 This headers are only multiply included if the application code happens to also be including task.h. */ #include "task.h" -/*lint +e537 */ +/*lint -restore */ #ifdef __cplusplus extern "C" { @@ -115,14 +73,15 @@ or interrupt version of the queue send function should be used. */ * reference the subject timer in calls to other software timer API functions * (for example, xTimerStart(), xTimerReset(), etc.). */ -typedef void * TimerHandle_t; - -/** +struct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ +//typedef struct tmrTimerControl * TimerHandle_t; +typedef void* TimerHandle_t; +/* * Defines the prototype to which timer callback functions must conform. */ typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer ); -/** +/* * Defines the prototype to which functions used with the * xTimerPendFunctionCallFromISR() function must conform. */ @@ -260,11 +219,11 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * @endcode */ #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreate( const char * const pcTimerName, + TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; #endif /** @@ -388,18 +347,20 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction, - StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - #endif /* configSUPPORT_STATIC_ALLOCATION */ + StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION; +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** + * void *pvTimerGetTimerID( TimerHandle_t xTimer ); + * * Returns the ID assigned to the timer. * * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer. + * xTimerCreated() that was used to create the timer, and by calling the + * vTimerSetTimerID() API function. * * If the same callback function is assigned to multiple timers then the timer - * ID can be used within the callback function to identify which timer actually - * expired. + * ID can be used as time specific (timer local) storage. * * @param xTimer The timer being queried. * @@ -409,9 +370,11 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * * See the xTimerCreate() API function example usage scenario. */ -void *pvTimerGetTimerID( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; +void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /** + * void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); + * * Sets the ID assigned to the timer. * * IDs are assigned to timers using the pvTimerID parameter of the call to @@ -431,12 +394,12 @@ void *pvTimerGetTimerID( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION; /** + * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ); + * * Queries a timer to see if it is active or dormant. * * A timer will be dormant if: - * * 1) It has been created but not started, or - * * 2) It is an expired one-shot timer that has not been restarted. * * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), @@ -474,31 +437,11 @@ BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; * Simply returns the handle of the timer service/daemon task. It it not valid * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started. */ -TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); +TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; /** - * Returns the period of a timer. + * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait ); * - * @param xTimer The handle of the timer being queried. - * - * @return The period of the timer in ticks. - */ -TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** - * Returns the time in ticks at which the timer will expire. If this is less - * than the current tick count then the expiry time has overflowed from the - * current time. - * - * @param xTimer The handle of the timer being queried. - * - * @return If the timer is running then the time in ticks at which the timer - * will next expire is returned. If the timer is not running then the return - * value is undefined. - */ -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task * through a queue called the timer command queue. The timer command queue is @@ -813,7 +756,7 @@ TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; * * // Starting the scheduler will start the timer running as it has already * // been set into the active state. - * xTaskStartScheduler(); + * vTaskStartScheduler(); * * // Should not reach here. * for( ;; ); @@ -1200,7 +1143,7 @@ TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; * } * @endcode */ -BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ); +BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; /** * Used to defer the execution of a function to the RTOS daemon task (the timer @@ -1228,18 +1171,64 @@ BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void * timer daemon task, otherwise pdFALSE is returned. * */ -BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ); +BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; /** + * const char * const pcTimerGetName( TimerHandle_t xTimer ); + * * Returns the name that was assigned to a timer when the timer was created. * * @param xTimer The handle of the timer being queried. * * @return The name assigned to the timer specified by the xTimer parameter. */ -const char * pcTimerGetTimerName( TimerHandle_t xTimer ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + +/** + * void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ); + * + * Updates a timer to be either an autoreload timer, in which case the timer + * automatically resets itself each time it expires, or a one shot timer, in + * which case the timer will only expire once unless it is manually restarted. + * + * @param xTimer The handle of the timer being updated. + * + * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will + * expire repeatedly with a frequency set by the timer's period (see the + * xTimerPeriodInTicks parameter of the xTimerCreate() API function). If + * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and + * enter the dormant state after it expires. + */ +void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) PRIVILEGED_FUNCTION; + +/** + * TickType_t xTimerGetPeriod( TimerHandle_t xTimer ); + * + * Returns the period of a timer. + * + * @param xTimer The handle of the timer being queried. + * + * @return The period of the timer in ticks. + */ +TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; + +/** +* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ); +* +* Returns the time in ticks at which the timer will expire. If this is less +* than the current tick count then the expiry time has overflowed from the +* current time. +* +* @param xTimer The handle of the timer being queried. +* +* @return If the timer is running then the time in ticks at which the timer +* will next expire is returned. If the timer is not running then the return +* value is undefined. +*/ +TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /** @cond */ + /* * Functions beyond this part are not part of the public API and are intended * for use by the kernel only. @@ -1247,6 +1236,11 @@ const char * pcTimerGetTimerName( TimerHandle_t xTimer ); /*lint !e971 Unqualifi BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +#if( configUSE_TRACE_FACILITY == 1 ) + void vTimerSetTimerNumber( TimerHandle_t xTimer, UBaseType_t uxTimerNumber ) PRIVILEGED_FUNCTION; + UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; +#endif + /** @endcond */ #ifdef __cplusplus diff --git a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/FreeRTOSConfig.h b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/FreeRTOSConfig.h index bc9079d2..be7cdb80 100644 --- a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/FreeRTOSConfig.h +++ b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/FreeRTOSConfig.h @@ -84,10 +84,10 @@ #define portNUM_PROCESSORS 1 #endif -#define XT_USE_THREAD_SAFE_CLIB 0 -#define configASSERT_2 0 -#define portUSING_MPU_WRAPPERS 0 -#define configUSE_MUTEX 1 +#define XT_USE_THREAD_SAFE_CLIB 0 +#define configASSERT_2 0 +#define portUSING_MPU_WRAPPERS 0 +#define configUSE_MUTEX 1 #undef XT_USE_SWPRI #if CONFIG_FREERTOS_CORETIMER_0 @@ -96,7 +96,7 @@ #define XT_TIMER_INDEX 1 #endif -#define configNUM_THREAD_LOCAL_STORAGE_POINTERS CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS +#define configNUM_THREAD_LOCAL_STORAGE_POINTERS CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS #define configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS 1 #ifndef __ASSEMBLER__ @@ -171,7 +171,7 @@ int xt_clock_freq(void) __attribute__((deprecated)); #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 1 #define configUSE_TICK_HOOK 1 - +#define configRECORD_STACK_HIGH_ADDRESS 1 #define configTICK_RATE_HZ ( CONFIG_FREERTOS_HZ ) /* Default clock rate for simulator */ @@ -256,8 +256,6 @@ int xt_clock_freq(void) __attribute__((deprecated)); #endif - - /* Co-routine definitions. */ #define configUSE_CO_ROUTINES 0 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) diff --git a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/portmacro.h b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/portmacro.h index fb0b6b72..e144bc08 100644 --- a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/portmacro.h +++ b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/portmacro.h @@ -72,6 +72,7 @@ extern "C" { #ifndef __ASSEMBLER__ +#include #include #include #include @@ -82,11 +83,16 @@ extern "C" { #include #include "esp_private/crosscore_int.h" #include "esp_timer.h" /* required for FreeRTOS run time stats */ +#include "esp_system.h" +#include "esp_newlib.h" #include "soc/spinlock.h" #include #include "esp_rom_sys.h" #include "sdkconfig.h" #include "freertos/xtensa_api.h" +#include "esp_system.h" +#include "soc/cpu.h" +#include #ifdef CONFIG_LEGACY_INCLUDE_COMMON_HEADERS #include "soc/soc_memory_layout.h" @@ -127,18 +133,10 @@ typedef unsigned portBASE_TYPE UBaseType_t; // portbenchmark #include "portbenchmark.h" + #include "sdkconfig.h" #include "esp_attr.h" -static inline uint32_t xPortGetCoreID(void); - -// Critical section management. NW-TODO: replace XTOS_SET_INTLEVEL with more efficient version, if any? -// These cannot be nested. They should be used with a lot of care and cannot be called from interrupt level. -// -// Only applies to one CPU. See notes above & below for reasons not to use these. -#define portDISABLE_INTERRUPTS() do { XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL); portbenchmarkINTERRUPT_DISABLE(); } while (0) -#define portENABLE_INTERRUPTS() do { portbenchmarkINTERRUPT_RESTORE(0); XTOS_SET_INTLEVEL(0); } while (0) - // Cleaner solution allows nested interrupts disabling and restoring via local registers or stack. // They can be called from interrupts too. // WARNING: Only applies to current CPU. See notes above. @@ -172,48 +170,45 @@ This all assumes that interrupts are either entirely disabled or enabled. Interr will break this scheme. Remark: For the ESP32, portENTER_CRITICAL and portENTER_CRITICAL_ISR both alias vTaskEnterCritical, meaning -that either function can be called both from ISR as well as task context. This is not standard FreeRTOS +that either function can be called both from ISR as well as task context. This is not standard FreeRTOS behaviour; please keep this in mind if you need any compatibility with other FreeRTOS implementations. */ - /* "mux" data structure (spinlock) */ -typedef struct { - spinlock_t spinlock; -} portMUX_TYPE; +typedef spinlock_t portMUX_TYPE; #define portMUX_FREE_VAL SPINLOCK_FREE #define portMUX_NO_TIMEOUT SPINLOCK_WAIT_FOREVER /* When passed for 'timeout_cycles', spin forever if necessary */ #define portMUX_TRY_LOCK SPINLOCK_NO_WAIT /* Try to acquire the spinlock a single time only */ -#define portMUX_INITIALIZER_UNLOCKED {.spinlock=SPINLOCK_INITIALIZER} - -#define portASSERT_IF_IN_ISR() vPortAssertIfInISR() -void vPortAssertIfInISR(void); +#define portMUX_INITIALIZER_UNLOCKED SPINLOCK_INITIALIZER #define portCRITICAL_NESTING_IN_TCB 0 static inline void __attribute__((always_inline)) vPortCPUInitializeMutex(portMUX_TYPE *mux) { - spinlock_initialize(&mux->spinlock); + spinlock_initialize(mux); } static inline void __attribute__((always_inline)) vPortCPUAcquireMutex(portMUX_TYPE *mux) { - spinlock_acquire(&mux->spinlock, portMUX_NO_TIMEOUT); + spinlock_acquire(mux, portMUX_NO_TIMEOUT); } static inline bool __attribute__((always_inline)) vPortCPUAcquireMutexTimeout(portMUX_TYPE *mux, int timeout) { - return (spinlock_acquire(&mux->spinlock, timeout)); + return (spinlock_acquire(mux, timeout)); } static inline void __attribute__((always_inline)) vPortCPUReleaseMutex(portMUX_TYPE *mux) { - spinlock_release(&mux->spinlock); + spinlock_release(mux); } void vPortEnterCritical(portMUX_TYPE *mux); void vPortExitCritical(portMUX_TYPE *mux); +#define portASSERT_IF_IN_ISR() vPortAssertIfInISR() +void vPortAssertIfInISR(void); + /* * Returns true if the current core is in ISR context; low prio ISR, med prio ISR or timer tick ISR. High prio ISRs * aren't detected here, but they normally cannot call C code, so that should not be an issue anyway. @@ -246,8 +241,8 @@ static inline void __attribute__((always_inline)) vPortExitCriticalCompliance(po /* Calling port*_CRITICAL from ISR context would cause an assert failure. * If the parent function is called from both ISR and Non-ISR context then call port*_CRITICAL_SAFE */ -#define portENTER_CRITICAL(mux) vPortEnterCriticalCompliance(mux) -#define portEXIT_CRITICAL(mux) vPortExitCriticalCompliance(mux) +#define portENTER_CRITICAL(mux) vPortEnterCriticalCompliance(mux) +#define portEXIT_CRITICAL(mux) vPortExitCriticalCompliance(mux) #else #define portENTER_CRITICAL(mux) vPortEnterCritical(mux) #define portEXIT_CRITICAL(mux) vPortExitCritical(mux) @@ -276,6 +271,7 @@ static inline void __attribute__((always_inline)) vPortExitCriticalSafe(portMUX_ #define portENTER_CRITICAL_SAFE(mux) vPortEnterCriticalSafe(mux) #define portEXIT_CRITICAL_SAFE(mux) vPortExitCriticalSafe(mux) + /* * Wrapper for the Xtensa compare-and-set instruction. This subroutine will atomically compare * *addr to 'compare'. If *addr == compare, *addr is set to *set. *set is updated with the previous @@ -289,6 +285,14 @@ static inline void __attribute__((always_inline)) uxPortCompareSet(volatile uint compare_and_set_native(addr, compare, set); } +// Critical section management. NW-TODO: replace XTOS_SET_INTLEVEL with more efficient version, if any? +// These cannot be nested. They should be used with a lot of care and cannot be called from interrupt level. +// +// Only applies to one CPU. See notes above & below for reasons not to use these. +#define portDISABLE_INTERRUPTS() do { XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL); portbenchmarkINTERRUPT_DISABLE(); } while (0) +#define portENABLE_INTERRUPTS() do { portbenchmarkINTERRUPT_RESTORE(0); XTOS_SET_INTLEVEL(0); } while (0) + + // These FreeRTOS versions are similar to the nested versions above #define portSET_INTERRUPT_MASK_FROM_ISR() portENTER_CRITICAL_NESTED() #define portCLEAR_INTERRUPT_MASK_FROM_ISR(state) portEXIT_CRITICAL_NESTED(state) @@ -297,10 +301,26 @@ static inline void __attribute__((always_inline)) uxPortCompareSet(volatile uint //the stack memory to always be internal. #define portTcbMemoryCaps (MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT) #define portStackMemoryCaps (MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT) - #define pvPortMallocTcbMem(size) heap_caps_malloc(size, portTcbMemoryCaps) #define pvPortMallocStackMem(size) heap_caps_malloc(size, portStackMemoryCaps) +//xTaskCreateStatic uses these functions to check incoming memory. +#define portVALID_TCB_MEM(ptr) (esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr)) +#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY +#define portVALID_STACK_MEM(ptr) esp_ptr_byte_accessible(ptr) +#else +#define portVALID_STACK_MEM(ptr) (esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr)) +#endif + + +static inline void uxPortCompareSetExtram(volatile uint32_t *addr, uint32_t compare, uint32_t *set) +{ +#ifdef CONFIG_SPIRAM + compare_and_set_extram(addr, compare, set); +#endif +} + + /*-----------------------------------------------------------*/ /* Architecture specifics. */ @@ -397,13 +417,11 @@ extern void esp_vApplicationTickHook( void ); #define vApplicationTickHook esp_vApplicationTickHook #endif /* !CONFIG_FREERTOS_LEGACY_HOOKS */ -void _xt_coproc_release(volatile void * coproc_sa_base); void vApplicationSleep( TickType_t xExpectedIdleTime ); -void vPortSetStackWatchpoint( void* pxStackStart ); #define portSUPPRESS_TICKS_AND_SLEEP( idleTime ) vApplicationSleep( idleTime ) -/*-----------------------------------------------------------*/ +void _xt_coproc_release(volatile void * coproc_sa_base); /* Architecture specific optimisations. */ #if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1 @@ -423,7 +441,68 @@ void vPortSetStackWatchpoint( void* pxStackStart ); #endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ -/*-----------------------------------------------------------*/ +/* + * Send an interrupt to another core in order to make the task running + * on it yield for a higher-priority task. + */ + +void vPortYieldOtherCore( BaseType_t coreid) ; + +/* + Callback to set a watchpoint on the end of the stack. Called every context switch to change the stack + watchpoint around. + */ +void vPortSetStackWatchpoint( void* pxStackStart ); + +/* + * Returns true if the current core is in ISR context; low prio ISR, med prio ISR or timer tick ISR. High prio ISRs + * aren't detected here, but they normally cannot call C code, so that should not be an issue anyway. + */ +BaseType_t xPortInIsrContext(void); + +/* + * This function will be called in High prio ISRs. Returns true if the current core was in ISR context + * before calling into high prio ISR context. + */ +BaseType_t xPortInterruptedFromISRContext(void); + +/* + * The structures and methods of manipulating the MPU are contained within the + * port layer. + * + * Fills the xMPUSettings structure with the memory region information + * contained in xRegions. + */ +#if( portUSING_MPU_WRAPPERS == 1 ) + struct xMEMORY_REGION; + void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t usStackDepth ) PRIVILEGED_FUNCTION; + void vPortReleaseTaskMPUSettings( xMPU_SETTINGS *xMPUSettings ); +#endif + +/* Multi-core: get current core ID */ +static inline uint32_t IRAM_ATTR xPortGetCoreID(void) { + return cpu_hal_get_core_id(); +} + +/* Get tick rate per second */ +uint32_t xPortGetTickRateHz(void); + +static inline bool IRAM_ATTR xPortCanYield(void) +{ + uint32_t ps_reg = 0; + + //Get the current value of PS (processor status) register + RSR(PS, ps_reg); + + /* + * intlevel = (ps_reg & 0xf); + * excm = (ps_reg >> 4) & 0x1; + * CINTLEVEL is max(excm * EXCMLEVEL, INTLEVEL), where EXCMLEVEL is 3. + * However, just return true, only intlevel is zero. + */ + + return ((ps_reg & PS_INTLEVEL_MASK) == 0); +} // porttrace #if configUSE_TRACE_FACILITY_2 diff --git a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/xtensa_context.h b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/xtensa_context.h index 1d0f4e58..c3070190 100644 --- a/tools/sdk/esp32/include/freertos/xtensa/include/freertos/xtensa_context.h +++ b/tools/sdk/esp32/include/freertos/xtensa/include/freertos/xtensa_context.h @@ -1,2 +1,2 @@ /* This header file has been moved, please include in future */ -#include \ No newline at end of file +#include diff --git a/tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/brownout_caps.h b/tools/sdk/esp32/include/hal/esp32/include/hal/adc_hal_conf.h similarity index 54% rename from tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/brownout_caps.h rename to tools/sdk/esp32/include/hal/esp32/include/hal/adc_hal_conf.h index 797d33eb..dd0e64df 100644 --- a/tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/brownout_caps.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/adc_hal_conf.h @@ -14,12 +14,18 @@ #pragma once -#ifdef __cplusplus -extern "C" { -#endif +#define SOC_ADC1_DATA_INVERT_DEFAULT (1) +#define SOC_ADC2_DATA_INVERT_DEFAULT (1) -#define SOC_BROWNOUT_RESET_SUPPORTED 1 +#define SOC_ADC_DIGI_DATA_INVERT_DEFAULT(PERIPH_NUM) (1) -#ifdef __cplusplus -} -#endif +#define SOC_ADC_FSM_RSTB_WAIT_DEFAULT (8) +#define SOC_ADC_FSM_START_WAIT_DEFAULT (SOC_ADC_DIGI_SAR_CLK_DIV_DEFAULT) +#define SOC_ADC_FSM_STANDBY_WAIT_DEFAULT (100) +#define ADC_FSM_SAMPLE_CYCLE_DEFAULT (2) + +#define SOC_ADC_PWDET_CCT_DEFAULT (4) + +#define SOC_ADC_SAR_CLK_DIV_DEFAULT(PERIPH_NUM) (2) + +#define SOC_ADC_DIGI_SAR_CLK_DIV_DEFAULT (16) \ No newline at end of file diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/can_types.h b/tools/sdk/esp32/include/hal/esp32/include/hal/can_types.h index 2c65d213..4af81894 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/can_types.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/can_types.h @@ -38,7 +38,7 @@ extern "C" { #define CAN_MSG_FLAG_SELF TWAI_MSG_FLAG_SELF #define CAN_MSG_FLAG_DLC_NON_COMP TWAI_MSG_FLAG_DLC_NON_COMP -#if (TWAI_BRP_MAX > 128) || (CONFIG_ESP32_REV_MIN >= 2) +#if (SOC_TWAI_BRP_MAX > 128) || (CONFIG_ESP32_REV_MIN >= 2) #define CAN_TIMING_CONFIG_12_5KBITS() TWAI_TIMING_CONFIG_12_5KBITS() #define CAN_TIMING_CONFIG_16KBITS() TWAI_TIMING_CONFIG_16KBITS() #define CAN_TIMING_CONFIG_20KBITS() TWAI_TIMING_CONFIG_20KBITS() diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h index 8034dbf1..121e5791 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h @@ -17,7 +17,7 @@ #include "esp_attr.h" -#include "soc/cpu_caps.h" +#include "soc/soc_caps.h" #include "xt_instr_macros.h" #include "xtensa/config/specreg.h" diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/gpio_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/gpio_ll.h index d428fb3e..289be984 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/gpio_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/gpio_ll.h @@ -35,6 +35,12 @@ extern "C" { // Get GPIO hardware instance with giving gpio num #define GPIO_LL_GET_HW(num) (((num) == 0) ? (&GPIO) : NULL) +#define GPIO_LL_APP_CPU_INTR_ENA (BIT(0)) +#define GPIO_LL_APP_CPU_NMI_INTR_ENA (BIT(1)) +#define GPIO_LL_PRO_CPU_INTR_ENA (BIT(2)) +#define GPIO_LL_PRO_CPU_NMI_INTR_ENA (BIT(3)) +#define GPIO_LL_SDIO_EXT_INTR_ENA (BIT(4)) + /** * @brief Enable pull-up on GPIO. * @@ -147,9 +153,9 @@ static inline void gpio_ll_clear_intr_status_high(gpio_dev_t *hw, uint32_t mask) static inline void gpio_ll_intr_enable_on_core(gpio_dev_t *hw, uint32_t core_id, gpio_num_t gpio_num) { if (core_id == 0) { - hw->pin[gpio_num].int_ena = GPIO_PRO_CPU_INTR_ENA; //enable pro cpu intr + hw->pin[gpio_num].int_ena = GPIO_LL_PRO_CPU_INTR_ENA; //enable pro cpu intr } else { - hw->pin[gpio_num].int_ena = GPIO_APP_CPU_INTR_ENA; //enable pro cpu intr + hw->pin[gpio_num].int_ena = GPIO_LL_APP_CPU_INTR_ENA; //enable pro cpu intr } } diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/i2c_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/i2c_ll.h index a670a66d..7795c8cf 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/i2c_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/i2c_ll.h @@ -22,6 +22,8 @@ extern "C" { #endif +#define I2C_LL_INTR_MASK (0x3fff) /*!< I2C all interrupt bitmap */ + /** * @brief I2C hardware cmd register filed. */ @@ -42,7 +44,7 @@ typedef union { * @brief I2C interrupt event */ typedef enum { - I2C_INTR_EVENT_ERR, + I2C_INTR_EVENT_ERR, I2C_INTR_EVENT_ARBIT_LOST, /*!< I2C arbition lost event */ I2C_INTR_EVENT_NACK, /*!< I2C NACK event */ I2C_INTR_EVENT_TOUT, /*!< I2C time out event */ @@ -329,7 +331,7 @@ static inline void i2c_ll_set_sda_timing(i2c_dev_t *hw, int sda_sample, int sda_ */ static inline void i2c_ll_set_txfifo_empty_thr(i2c_dev_t *hw, uint8_t empty_thr) { - hw->fifo_conf.tx_fifo_empty_thrhd = empty_thr; + hw->fifo_conf.tx_fifo_empty_thrhd = empty_thr; } /** @@ -342,7 +344,7 @@ static inline void i2c_ll_set_txfifo_empty_thr(i2c_dev_t *hw, uint8_t empty_thr) */ static inline void i2c_ll_set_rxfifo_full_thr(i2c_dev_t *hw, uint8_t full_thr) { - hw->fifo_conf.rx_fifo_full_thrhd = full_thr; + hw->fifo_conf.rx_fifo_full_thrhd = full_thr; } /** @@ -533,7 +535,7 @@ static inline void i2c_ll_write_txfifo(i2c_dev_t *hw, uint8_t *ptr, uint8_t len) uint32_t fifo_addr = (hw == &I2C0) ? 0x6001301c : 0x6002701c; for(int i = 0; i < len; i++) { WRITE_PERI_REG(fifo_addr, ptr[i]); - } + } } /** @@ -549,7 +551,7 @@ static inline void i2c_ll_read_rxfifo(i2c_dev_t *hw, uint8_t *ptr, uint8_t len) { for(int i = 0; i < len; i++) { ptr[i] = hw->fifo_data.data; - } + } } /** diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/mcpwm_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/mcpwm_ll.h index 6be08f26..d31a810b 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/mcpwm_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/mcpwm_ll.h @@ -22,10 +22,10 @@ #pragma once +#include "soc/soc_caps.h" #include #include "soc/mcpwm_periph.h" #include "hal/mcpwm_types.h" -#include "soc/mcpwm_caps.h" #include "hal/hal_defs.h" #include "esp_types.h" diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/mpu_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/mpu_ll.h index bb849f66..08c230cd 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/mpu_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/mpu_ll.h @@ -14,7 +14,7 @@ #include -#include "soc/mpu_caps.h" +#include "soc/soc_caps.h" #include "xt_instr_macros.h" diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/pcnt_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/pcnt_ll.h index d0a5c126..0dce4bfe 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/pcnt_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/pcnt_ll.h @@ -32,6 +32,50 @@ extern "C" { // Get PCNT hardware instance with giving pcnt num #define PCNT_LL_GET_HW(num) (((num) == 0) ? (&PCNT) : NULL) +/** + * @brief Set PCNT channel edge mode + * + * @param hw Peripheral PCNT hardware instance address. + * @param unit PCNT unit number + * @param channel PCNT channel number + * @param pos_mode Counter mode when detecting positive edge + * @param neg_mode Counter mode when detecting negative edge + */ +static inline void pcnt_ll_set_edge_mode(pcnt_dev_t *hw, pcnt_unit_t unit, pcnt_channel_t channel, pcnt_count_mode_t pos_mode, pcnt_count_mode_t neg_mode) +{ + typeof(hw->conf_unit[unit].conf0) conf0_reg = hw->conf_unit[unit].conf0; + if (channel == 0) { + conf0_reg.ch0_pos_mode = pos_mode; + conf0_reg.ch0_neg_mode = neg_mode; + } else { + conf0_reg.ch1_pos_mode = pos_mode; + conf0_reg.ch1_neg_mode = neg_mode; + } + hw->conf_unit[unit].conf0 = conf0_reg; +} + +/** + * @brief Set PCNT channel level mode + * + * @param hw Peripheral PCNT hardware instance address. + * @param unit PCNT unit number + * @param channel PCNT channel number + * @param hctrl_mode Counter mode when control signal is high level + * @param lctrl_mode Counter mode when control signal is low level + */ +static inline void pcnt_ll_set_level_mode(pcnt_dev_t *hw, pcnt_unit_t unit, pcnt_channel_t channel, pcnt_ctrl_mode_t hctrl_mode, pcnt_ctrl_mode_t lctrl_mode) +{ + typeof(hw->conf_unit[unit].conf0) conf0_reg = hw->conf_unit[unit].conf0; + if (channel == 0) { + conf0_reg.ch0_hctrl_mode = hctrl_mode; + conf0_reg.ch0_lctrl_mode = lctrl_mode; + } else { + conf0_reg.ch1_hctrl_mode = hctrl_mode; + conf0_reg.ch1_lctrl_mode = lctrl_mode; + } + hw->conf_unit[unit].conf0 = conf0_reg; +} + /** * @brief Set PCNT counter mode * @@ -45,19 +89,8 @@ extern "C" { */ static inline void pcnt_ll_set_mode(pcnt_dev_t *hw, pcnt_unit_t unit, pcnt_channel_t channel, pcnt_count_mode_t pos_mode, pcnt_count_mode_t neg_mode, pcnt_ctrl_mode_t hctrl_mode, pcnt_ctrl_mode_t lctrl_mode) { - typeof(hw->conf_unit[unit].conf0) conf0_reg = hw->conf_unit[unit].conf0; - if (channel == 0) { - conf0_reg.ch0_pos_mode = pos_mode; - conf0_reg.ch0_neg_mode = neg_mode; - conf0_reg.ch0_hctrl_mode = hctrl_mode; - conf0_reg.ch0_lctrl_mode = lctrl_mode; - } else { - conf0_reg.ch1_pos_mode = pos_mode; - conf0_reg.ch1_neg_mode = neg_mode; - conf0_reg.ch1_hctrl_mode = hctrl_mode; - conf0_reg.ch1_lctrl_mode = lctrl_mode; - } - hw->conf_unit[unit].conf0 = conf0_reg; + pcnt_ll_set_edge_mode(hw, unit, channel, pos_mode, neg_mode); + pcnt_ll_set_level_mode(hw, unit, channel, hctrl_mode, lctrl_mode); } /** @@ -247,6 +280,18 @@ static inline void pcnt_ll_get_event_value(pcnt_dev_t *hw, pcnt_unit_t unit, pcn } } +/** + * @brief Get PCNT event status + * + * @param hw Peripheral PCNT hardware instance address. + * @param unit PCNT unit number + * @return event status word + */ +static inline uint32_t pcnt_ll_get_event_status(pcnt_dev_t *hw, pcnt_unit_t unit) +{ + return hw->status_unit[unit].val; +} + /** * @brief Set PCNT filter value * diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/rmt_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/rmt_ll.h index 5cc30ca5..ebae2587 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/rmt_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/rmt_ll.h @@ -19,7 +19,7 @@ extern "C" { #include #include "soc/rmt_struct.h" -#include "soc/rmt_caps.h" +#include "soc/soc_caps.h" #define RMT_LL_HW_BASE (&RMT) #define RMT_LL_MEM_BASE (&RMTMEM) diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/rtc_io_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/rtc_io_ll.h index 9162464a..284e1f3a 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/rtc_io_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/rtc_io_ll.h @@ -25,6 +25,8 @@ #include "hal/rtc_io_types.h" #include "hal/gpio_types.h" +#define RTCIO_LL_PIN_FUNC 0 + #ifdef __cplusplus extern "C" { #endif @@ -58,7 +60,7 @@ static inline void rtcio_ll_function_select(int rtcio_num, rtcio_ll_func_t func) // 0: GPIO connected to digital GPIO module. 1: GPIO connected to analog RTC module. SET_PERI_REG_MASK(rtc_io_desc[rtcio_num].reg, (rtc_io_desc[rtcio_num].mux)); //0:RTC FUNCTION 1,2,3:Reserved - SET_PERI_REG_BITS(rtc_io_desc[rtcio_num].reg, RTC_IO_TOUCH_PAD1_FUN_SEL_V, SOC_PIN_FUNC_RTC_IO, rtc_io_desc[rtcio_num].func); + SET_PERI_REG_BITS(rtc_io_desc[rtcio_num].reg, RTC_IO_TOUCH_PAD1_FUN_SEL_V, RTCIO_LL_PIN_FUNC, rtc_io_desc[rtcio_num].func); } else if (func == RTCIO_FUNC_DIGITAL) { CLEAR_PERI_REG_MASK(rtc_io_desc[rtcio_num].reg, (rtc_io_desc[rtcio_num].mux)); } diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/touch_sensor_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/touch_sensor_ll.h index 4016d4f5..b65120b6 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/touch_sensor_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/touch_sensor_ll.h @@ -62,7 +62,7 @@ static inline void touch_ll_set_meas_time(uint16_t meas_time) //touch sensor measure time= meas_cycle / 8Mhz SENS.sar_touch_ctrl1.touch_meas_delay = meas_time; //the waiting cycles (in 8MHz) between TOUCH_START and TOUCH_XPD - SENS.sar_touch_ctrl1.touch_xpd_wait = SOC_TOUCH_PAD_MEASURE_WAIT; + SENS.sar_touch_ctrl1.touch_xpd_wait = SOC_TOUCH_PAD_MEASURE_WAIT_MAX; } /** diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/twai_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/twai_ll.h index c02d2388..e04e4c07 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/twai_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/twai_ll.h @@ -331,7 +331,7 @@ static inline uint32_t twai_ll_get_and_clear_intrs(twai_dev_t *hw) */ static inline void twai_ll_set_enabled_intrs(twai_dev_t *hw, uint32_t intr_mask) { -#if (CONFIG_ESP32_REV_MIN >= 2) +#if TWAI_BRP_DIV_SUPPORTED //ESP32 Rev 2 or later has brp div field. Need to mask it out hw->interrupt_enable_reg.val = (hw->interrupt_enable_reg.val & 0x10) | intr_mask; #else @@ -357,8 +357,8 @@ static inline void twai_ll_set_enabled_intrs(twai_dev_t *hw, uint32_t intr_mask) */ static inline void twai_ll_set_bus_timing(twai_dev_t *hw, uint32_t brp, uint32_t sjw, uint32_t tseg1, uint32_t tseg2, bool triple_sampling) { -#if (CONFIG_ESP32_REV_MIN >= 2) - if (brp > TWAI_BRP_DIV_THRESH) { +#if TWAI_BRP_DIV_SUPPORTED + if (brp > SOC_TWAI_BRP_DIV_THRESH) { //Need to set brp_div bit hw->interrupt_enable_reg.brp_div = 1; brp /= 2; diff --git a/tools/sdk/esp32/include/hal/esp32/include/hal/uart_ll.h b/tools/sdk/esp32/include/hal/esp32/include/hal/uart_ll.h index a6997d9f..905c149c 100644 --- a/tools/sdk/esp32/include/hal/esp32/include/hal/uart_ll.h +++ b/tools/sdk/esp32/include/hal/esp32/include/hal/uart_ll.h @@ -17,21 +17,24 @@ #pragma once -#include "hal/uart_types.h" #include "soc/uart_periph.h" +#include "hal/uart_types.h" #ifdef __cplusplus extern "C" { #endif // The default fifo depth -#define UART_LL_FIFO_DEF_LEN (UART_FIFO_LEN) +#define UART_LL_FIFO_DEF_LEN (SOC_UART_FIFO_LEN) // Get UART hardware instance with giving uart num #define UART_LL_GET_HW(num) (((num) == 0) ? (&UART0) : (((num) == 1) ? (&UART1) : (&UART2))) // The timeout calibration factor when using ref_tick #define UART_LL_TOUT_REF_FACTOR_DEFAULT (8) +#define UART_LL_MIN_WAKEUP_THRESH (2) +#define UART_LL_INTR_MASK (0x7ffff) //All interrupt mask + // Define UART interrupts typedef enum { UART_INTR_RXFIFO_FULL = (0x1<<0), @@ -250,8 +253,8 @@ static inline uint32_t uart_ll_get_rxfifo_len(uart_dev_t *hw) uint32_t fifo_cnt = hw->status.rxfifo_cnt; typeof(hw->mem_rx_status) rx_status = hw->mem_rx_status; uint32_t len = 0; - - // When using DPort to read fifo, fifo_cnt is not credible, we need to calculate the real cnt based on the fifo read and write pointer. + + // When using DPort to read fifo, fifo_cnt is not credible, we need to calculate the real cnt based on the fifo read and write pointer. // When using AHB to read FIFO, we can use fifo_cnt to indicate the data length in fifo. if (rx_status.wr_addr > rx_status.rd_addr) { len = rx_status.wr_addr - rx_status.rd_addr; @@ -286,12 +289,12 @@ static inline uint32_t uart_ll_get_txfifo_len(uart_dev_t *hw) */ static inline void uart_ll_set_stop_bits(uart_dev_t *hw, uart_stop_bits_t stop_bit) { - //workaround for hardware issue, when UART stop bit set as 2-bit mode. + //workaround for hardware issue, when UART stop bit set as 2-bit mode. if(stop_bit == UART_STOP_BITS_2) { hw->rs485_conf.dl1_en = 1; hw->conf0.stop_bit_num = 0x1; } else { - hw->rs485_conf.dl1_en = 0; + hw->rs485_conf.dl1_en = 0; hw->conf0.stop_bit_num = stop_bit; } } @@ -306,7 +309,7 @@ static inline void uart_ll_set_stop_bits(uart_dev_t *hw, uart_stop_bits_t stop_b */ static inline void uart_ll_get_stop_bits(uart_dev_t *hw, uart_stop_bits_t *stop_bit) { - //workaround for hardware issue, when UART stop bit set as 2-bit mode. + //workaround for hardware issue, when UART stop bit set as 2-bit mode. if(hw->rs485_conf.dl1_en == 1 && hw->conf0.stop_bit_num == 0x1) { *stop_bit = UART_STOP_BITS_2; } else { @@ -573,7 +576,7 @@ static inline void uart_ll_set_dtr_active_level(uart_dev_t *hw, int level) */ static inline void uart_ll_set_wakeup_thrd(uart_dev_t *hw, uint32_t wakeup_thrd) { - hw->sleep_conf.active_threshold = wakeup_thrd - SOC_UART_MIN_WAKEUP_THRESH; + hw->sleep_conf.active_threshold = wakeup_thrd - UART_LL_MIN_WAKEUP_THRESH; } /** @@ -715,7 +718,7 @@ static inline void uart_ll_get_at_cmd_char(uart_dev_t *hw, uint8_t *cmd_char, ui */ static inline uint32_t uart_ll_get_wakeup_thrd(uart_dev_t *hw) { - return hw->sleep_conf.active_threshold + SOC_UART_MIN_WAKEUP_THRESH; + return hw->sleep_conf.active_threshold + UART_LL_MIN_WAKEUP_THRESH; } /** diff --git a/tools/sdk/esp32/include/hal/include/hal/adc_types.h b/tools/sdk/esp32/include/hal/include/hal/adc_types.h index 6606cf9d..b6e77b80 100644 --- a/tools/sdk/esp32/include/hal/include/hal/adc_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/adc_types.h @@ -16,7 +16,7 @@ #include #include #include "sdkconfig.h" -#include "soc/adc_caps.h" +#include "soc/soc_caps.h" /** * @brief ADC unit enumeration. diff --git a/tools/sdk/esp32/include/hal/include/hal/brownout_hal.h b/tools/sdk/esp32/include/hal/include/hal/brownout_hal.h index e2df9459..b56823b3 100644 --- a/tools/sdk/esp32/include/hal/include/hal/brownout_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/brownout_hal.h @@ -27,7 +27,7 @@ extern "C" { #include #include #include -#include "soc/brownout_caps.h" +#include "soc/soc_caps.h" typedef struct { uint8_t threshold; diff --git a/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h b/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h index 7584aa40..fb6be55b 100644 --- a/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h @@ -19,9 +19,9 @@ #include "esp_err.h" +#include "soc/soc_caps.h" #include "hal/cpu_types.h" #include "hal/cpu_ll.h" -#include "soc/cpu_caps.h" #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32/include/hal/include/hal/dac_types.h b/tools/sdk/esp32/include/hal/include/hal/dac_types.h index 1adc511a..c693deb6 100644 --- a/tools/sdk/esp32/include/hal/include/hal/dac_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/dac_types.h @@ -1,6 +1,6 @@ #pragma once -#include "soc/dac_caps.h" +#include "soc/soc_caps.h" #include "hal/adc_types.h" #include "sdkconfig.h" diff --git a/tools/sdk/esp32/include/hal/include/hal/gpio_hal.h b/tools/sdk/esp32/include/hal/include/hal/gpio_hal.h index ca424932..c013b5de 100644 --- a/tools/sdk/esp32/include/hal/include/hal/gpio_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/gpio_hal.h @@ -319,7 +319,7 @@ void gpio_hal_intr_disable(gpio_hal_context_t *hal, gpio_num_t gpio_num); */ #define gpio_hal_iomux_out(hal, gpio_num, func, oen_inv) gpio_ll_iomux_out((hal)->dev, gpio_num, func, oen_inv) -#if GPIO_SUPPORTS_FORCE_HOLD +#if SOC_GPIO_SUPPORT_FORCE_HOLD /** * @brief Force hold digital and rtc gpio pad. * @note GPIO force hold, whether the chip in sleep mode or wakeup mode. diff --git a/tools/sdk/esp32/include/hal/include/hal/gpio_types.h b/tools/sdk/esp32/include/hal/include/hal/gpio_types.h index 498d4096..4c5cd227 100644 --- a/tools/sdk/esp32/include/hal/include/hal/gpio_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/gpio_types.h @@ -15,7 +15,7 @@ #pragma once #include "soc/gpio_periph.h" -#include "soc/gpio_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" { @@ -70,7 +70,7 @@ typedef enum { #define GPIO_SEL_37 ((uint64_t)(((uint64_t)1)<<37)) /*!< Pin 37 selected */ #define GPIO_SEL_38 ((uint64_t)(((uint64_t)1)<<38)) /*!< Pin 38 selected */ #define GPIO_SEL_39 ((uint64_t)(((uint64_t)1)<<39)) /*!< Pin 39 selected */ -#if GPIO_PIN_COUNT > 40 +#if SOC_GPIO_PIN_COUNT > 40 #define GPIO_SEL_40 ((uint64_t)(((uint64_t)1)<<40)) /*!< Pin 40 selected */ #define GPIO_SEL_41 ((uint64_t)(((uint64_t)1)<<41)) /*!< Pin 41 selected */ #define GPIO_SEL_42 ((uint64_t)(((uint64_t)1)<<42)) /*!< Pin 42 selected */ @@ -122,7 +122,7 @@ typedef enum { #define GPIO_PIN_REG_37 IO_MUX_GPIO37_REG #define GPIO_PIN_REG_38 IO_MUX_GPIO38_REG #define GPIO_PIN_REG_39 IO_MUX_GPIO39_REG -#if GPIO_PIN_COUNT > 40 +#if SOC_GPIO_PIN_COUNT > 40 #define GPIO_PIN_REG_40 IO_MUX_GPIO40_REG #define GPIO_PIN_REG_41 IO_MUX_GPIO41_REG #define GPIO_PIN_REG_42 IO_MUX_GPIO42_REG @@ -179,7 +179,7 @@ typedef enum { GPIO_NUM_37 = 37, /*!< GPIO37, input mode only(ESP32) / input and output(ESP32-S2) */ GPIO_NUM_38 = 38, /*!< GPIO38, input mode only(ESP32) / input and output(ESP32-S2) */ GPIO_NUM_39 = 39, /*!< GPIO39, input mode only(ESP32) / input and output(ESP32-S2) */ -#if GPIO_PIN_COUNT > 40 +#if SOC_GPIO_PIN_COUNT > 40 GPIO_NUM_40 = 40, /*!< GPIO40, input and output */ GPIO_NUM_41 = 41, /*!< GPIO41, input and output */ GPIO_NUM_42 = 42, /*!< GPIO42, input and output */ @@ -202,6 +202,13 @@ typedef enum { GPIO_INTR_MAX, } gpio_int_type_t; +/** @cond */ +#define GPIO_MODE_DEF_DISABLE (0) +#define GPIO_MODE_DEF_INPUT (BIT0) ///< bit mask for input +#define GPIO_MODE_DEF_OUTPUT (BIT1) ///< bit mask for output +#define GPIO_MODE_DEF_OD (BIT2) ///< bit mask for OD mode +/** @endcond */ + typedef enum { GPIO_MODE_DISABLE = GPIO_MODE_DEF_DISABLE, /*!< GPIO mode : disable input and output */ GPIO_MODE_INPUT = GPIO_MODE_DEF_INPUT, /*!< GPIO mode : input only */ diff --git a/tools/sdk/esp32/include/hal/include/hal/i2c_types.h b/tools/sdk/esp32/include/hal/include/hal/i2c_types.h index 8c30fb32..cc1c231e 100644 --- a/tools/sdk/esp32/include/hal/include/hal/i2c_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/i2c_types.h @@ -20,7 +20,7 @@ extern "C" { #include #include -#include "soc/i2c_caps.h" +#include "soc/soc_caps.h" /** * @brief I2C port number, can be I2C_NUM_0 ~ (I2C_NUM_MAX-1). diff --git a/tools/sdk/esp32/include/hal/include/hal/i2s_hal.h b/tools/sdk/esp32/include/hal/include/hal/i2s_hal.h index 49b3c1a0..6964bfdf 100644 --- a/tools/sdk/esp32/include/hal/include/hal/i2s_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/i2s_hal.h @@ -24,7 +24,7 @@ #pragma once #include "soc/i2s_periph.h" -#include "soc/i2s_caps.h" +#include "soc/soc_caps.h" #include "hal/i2s_ll.h" #include "hal/i2s_types.h" diff --git a/tools/sdk/esp32/include/hal/include/hal/i2s_types.h b/tools/sdk/esp32/include/hal/include/hal/i2s_types.h index 3a70ad19..1f5b9e0f 100644 --- a/tools/sdk/esp32/include/hal/include/hal/i2s_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/i2s_types.h @@ -17,7 +17,7 @@ #include #include #include -#include "soc/i2s_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32/include/hal/include/hal/ledc_types.h b/tools/sdk/esp32/include/hal/include/hal/ledc_types.h index 9091a103..9abf4f8e 100644 --- a/tools/sdk/esp32/include/hal/include/hal/ledc_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/ledc_types.h @@ -20,10 +20,10 @@ extern "C" { #include #include -#include "soc/ledc_caps.h" +#include "soc/soc_caps.h" typedef enum { -#ifdef SOC_LEDC_SUPPORT_HS_MODE +#if SOC_LEDC_SUPPORT_HS_MODE LEDC_HIGH_SPEED_MODE = 0, /*!< LEDC high speed speed_mode */ #endif LEDC_LOW_SPEED_MODE, /*!< LEDC low speed speed_mode */ @@ -45,7 +45,7 @@ typedef enum { typedef enum { LEDC_SLOW_CLK_RTC8M = 0, /*!< LEDC low speed timer clock source is 8MHz RTC clock*/ LEDC_SLOW_CLK_APB, /*!< LEDC low speed timer clock source is 80MHz APB clock*/ -#ifdef SOC_LEDC_SUPPORT_XTAL_CLOCK +#if SOC_LEDC_SUPPORT_XTAL_CLOCK LEDC_SLOW_CLK_XTAL, /*!< LEDC low speed timer clock source XTAL clock*/ #endif } ledc_slow_clk_sel_t; @@ -55,7 +55,7 @@ typedef enum { LEDC_USE_REF_TICK, /*!< LEDC timer select REF_TICK clock as source clock*/ LEDC_USE_APB_CLK, /*!< LEDC timer select APB clock as source clock*/ LEDC_USE_RTC8M_CLK, /*!< LEDC timer select RTC8M_CLK as source clock. Only for low speed channels and this parameter must be the same for all low speed channels*/ -#ifdef SOC_LEDC_SUPPORT_XTAL_CLOCK +#if SOC_LEDC_SUPPORT_XTAL_CLOCK LEDC_USE_XTAL_CLK, /*!< LEDC timer select XTAL clock as source clock*/ #endif } ledc_clk_cfg_t; diff --git a/tools/sdk/esp32/include/hal/include/hal/pcnt_hal.h b/tools/sdk/esp32/include/hal/include/hal/pcnt_hal.h index 2a5972d8..416af3fa 100644 --- a/tools/sdk/esp32/include/hal/include/hal/pcnt_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/pcnt_hal.h @@ -164,6 +164,15 @@ typedef struct { */ #define pcnt_hal_get_event_value(hal, unit, evt_type, value) pcnt_ll_get_event_value((hal)->dev, unit, evt_type, value) +/** + * @brief Get PCNT event status + * + * @param hal Context of the HAL layer + * @param unit PCNT unit number + * @return event status word + */ +#define pcnt_hal_get_event_status(hal, unit) pcnt_ll_get_event_status((hal)->dev, unit) + /** * @brief Set PCNT filter value * diff --git a/tools/sdk/esp32/include/hal/include/hal/rmt_hal.h b/tools/sdk/esp32/include/hal/include/hal/rmt_hal.h index 6d44acf9..8a21ac9d 100644 --- a/tools/sdk/esp32/include/hal/include/hal/rmt_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/rmt_hal.h @@ -18,8 +18,8 @@ extern "C" { #endif #include +#include "soc/soc_caps.h" #include "soc/rmt_struct.h" -#include "soc/rmt_caps.h" /** * @brief HAL context type of RMT driver diff --git a/tools/sdk/esp32/include/hal/include/hal/rmt_types.h b/tools/sdk/esp32/include/hal/include/hal/rmt_types.h index 3f8b1b6b..37d79ea2 100644 --- a/tools/sdk/esp32/include/hal/include/hal/rmt_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/rmt_types.h @@ -18,7 +18,7 @@ extern "C" { #endif -#include "soc/rmt_caps.h" +#include "soc/soc_caps.h" /** * @brief RMT channel ID diff --git a/tools/sdk/esp32/include/hal/include/hal/rtc_io_hal.h b/tools/sdk/esp32/include/hal/include/hal/rtc_io_hal.h index 81e29721..5301cb32 100644 --- a/tools/sdk/esp32/include/hal/include/hal/rtc_io_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/rtc_io_hal.h @@ -33,7 +33,7 @@ extern "C" { * Select the rtcio function. * * @note The RTC function must be selected before the pad analog function is enabled. - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param func Select pin function. */ #define rtcio_hal_function_select(rtcio_num, func) rtcio_ll_function_select(rtcio_num, func) @@ -41,21 +41,21 @@ extern "C" { /** * Enable rtcio output. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_output_enable(rtcio_num) rtcio_ll_output_enable(rtcio_num) /** * Disable rtcio output. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_output_disable(rtcio_num) rtcio_ll_output_disable(rtcio_num) /** * Set RTCIO output level. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param level 0: output low; ~0: output high. */ #define rtcio_hal_set_level(rtcio_num, level) rtcio_ll_set_level(rtcio_num, level) @@ -63,21 +63,21 @@ extern "C" { /** * Enable rtcio input. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_input_enable(rtcio_num) rtcio_ll_input_enable(rtcio_num) /** * Disable rtcio input. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_input_disable(rtcio_num) rtcio_ll_input_disable(rtcio_num) /** * Get RTCIO input level. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @return 0: input low; ~0: input high. */ #define rtcio_hal_get_level(rtcio_num) rtcio_ll_get_level(rtcio_num) @@ -85,7 +85,7 @@ extern "C" { /** * @brief Set RTC GPIO pad drive capability. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param strength Drive capability of the pad. Range: 0 ~ 3. */ #define rtcio_hal_set_drive_capability(rtcio_num, strength) rtcio_ll_set_drive_capability(rtcio_num, strength) @@ -93,7 +93,7 @@ extern "C" { /** * @brief Get RTC GPIO pad drive capability. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @return Drive capability of the pad. Range: 0 ~ 3. */ #define rtcio_hal_get_drive_capability(rtcio_num) rtcio_ll_get_drive_capability(rtcio_num) @@ -101,7 +101,7 @@ extern "C" { /** * Set RTCIO output level. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param level 0: output low; ~0: output high. */ #define rtcio_hal_set_level(rtcio_num, level) rtcio_ll_set_level(rtcio_num, level) @@ -109,7 +109,7 @@ extern "C" { /** * Get RTCIO input level. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @return 0: input low; ~0: input high. */ #define rtcio_hal_get_level(rtcio_num) rtcio_ll_get_level(rtcio_num) @@ -120,7 +120,7 @@ extern "C" { * Configure RTC IO direction, such as output only, input only, * output and input. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param mode IO direction. */ void rtcio_hal_set_direction(int rtcio_num, rtc_gpio_mode_t mode); @@ -131,7 +131,7 @@ void rtcio_hal_set_direction(int rtcio_num, rtc_gpio_mode_t mode); * NOTE: ESP32 support INPUT_ONLY mode. * ESP32S2 support INPUT_ONLY, OUTPUT_ONLY, INPUT_OUTPUT mode. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param mode IO direction. */ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); @@ -139,28 +139,28 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); /** * RTC GPIO pullup enable. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_pullup_enable(rtcio_num) rtcio_ll_pullup_enable(rtcio_num) /** * RTC GPIO pullup disable. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_pullup_disable(rtcio_num) rtcio_ll_pullup_disable(rtcio_num) /** * RTC GPIO pulldown enable. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_pulldown_enable(rtcio_num) rtcio_ll_pulldown_enable(rtcio_num) /** * RTC GPIO pulldown disable. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_pulldown_disable(rtcio_num) rtcio_ll_pulldown_disable(rtcio_num) @@ -172,7 +172,7 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); * This function is useful when going into light or deep sleep mode to prevent * the pin configuration from changing. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_hold_enable(rtcio_num) rtcio_ll_force_hold_enable(rtcio_num) @@ -180,7 +180,7 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); * Disable hold function on an RTC IO pad * * @note If disable the pad hold, the status of pad maybe changed in sleep mode. - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_hold_disable(rtcio_num) rtcio_ll_force_hold_disable(rtcio_num) @@ -192,7 +192,7 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); * This function is useful when going into light or deep sleep mode to prevent * the pin configuration from changing. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_hold_all() rtcio_ll_force_hold_all() @@ -200,14 +200,14 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); * Disable hold function on an RTC IO pads. * * @note If disable the pad hold, the status of pad maybe changed in sleep mode. - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_unhold_all() rtcio_ll_force_unhold_all() /** * Enable wakeup function and set wakeup type from light sleep status for rtcio. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. * @param type Wakeup on high level or low level. */ #define rtcio_hal_wakeup_enable(rtcio_num, type) rtcio_ll_wakeup_enable(rtcio_num, type) @@ -215,14 +215,14 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); /** * Disable wakeup function from light sleep status for rtcio. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_wakeup_disable(rtcio_num) rtcio_ll_wakeup_disable(rtcio_num) /** * Disable wakeup function from light sleep status for rtcio. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ #define rtcio_hal_ext0_set_wakeup_pin(rtcio_num, level) rtcio_ll_ext0_set_wakeup_pin(rtcio_num, level) @@ -237,7 +237,7 @@ void rtcio_hal_set_direction_in_sleep(int rtcio_num, rtc_gpio_mode_t mode); * rtc_gpio_isolate(GPIO_NUM_12) before entering deep sleep, to reduce * deep sleep current. * - * @param rtcio_num The index of rtcio. 0 ~ SOC_RTC_IO_PIN_COUNT. + * @param rtcio_num The index of rtcio. 0 ~ SOC_RTCIO_PIN_COUNT. */ void rtcio_hal_isolate(int rtc_num); diff --git a/tools/sdk/esp32/include/hal/include/hal/sigmadelta_types.h b/tools/sdk/esp32/include/hal/include/hal/sigmadelta_types.h index e6ab0b47..e4dce6fb 100644 --- a/tools/sdk/esp32/include/hal/include/hal/sigmadelta_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/sigmadelta_types.h @@ -14,7 +14,7 @@ #pragma once -#include "soc/sigmadelta_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" { @@ -23,12 +23,27 @@ extern "C" { /** * @brief SIGMADELTA port number, the max port number is (SIGMADELTA_NUM_MAX -1). */ -typedef int sigmadelta_port_t; +typedef enum { + SIGMADELTA_PORT_0, /*!< SIGMADELTA port 0 */ + SIGMADELTA_PORT_MAX, /*!< SIGMADELTA port max */ +} sigmadelta_port_t; + +_Static_assert(SIGMADELTA_PORT_MAX == SOC_SIGMADELTA_NUM, "Sigma-delta port num incorrect."); /** * @brief Sigma-delta channel list */ -typedef int sigmadelta_channel_t; +typedef enum { + SIGMADELTA_CHANNEL_0, /*!< Sigma-delta channel 0 */ + SIGMADELTA_CHANNEL_1, /*!< Sigma-delta channel 1 */ + SIGMADELTA_CHANNEL_2, /*!< Sigma-delta channel 2 */ + SIGMADELTA_CHANNEL_3, /*!< Sigma-delta channel 3 */ + SIGMADELTA_CHANNEL_4, /*!< Sigma-delta channel 4 */ + SIGMADELTA_CHANNEL_5, /*!< Sigma-delta channel 5 */ + SIGMADELTA_CHANNEL_6, /*!< Sigma-delta channel 6 */ + SIGMADELTA_CHANNEL_7, /*!< Sigma-delta channel 7 */ + SIGMADELTA_CHANNEL_MAX, /*!< Sigma-delta channel max */ +} sigmadelta_channel_t; /** * @brief Sigma-delta configure struct diff --git a/tools/sdk/esp32/include/hal/include/hal/spi_hal.h b/tools/sdk/esp32/include/hal/include/hal/spi_hal.h index dd5e01df..479a91bd 100644 --- a/tools/sdk/esp32/include/hal/include/hal/spi_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/spi_hal.h @@ -133,7 +133,7 @@ typedef struct { uint32_t tx_lsbfirst : 1; ///< Whether LSB is sent first for TX data, device specific uint32_t rx_lsbfirst : 1; ///< Whether LSB is received first for RX data, device specific uint32_t no_compensate : 1; ///< No need to add dummy to compensate the timing, device specific -#ifdef SOC_SPI_SUPPORT_AS_CS +#if SOC_SPI_SUPPORT_AS_CS uint32_t as_cs : 1; ///< Whether to toggle the CS while the clock toggles, device specific #endif uint32_t positive_cs : 1; ///< Whether the postive CS feature is abled, device specific diff --git a/tools/sdk/esp32/include/hal/include/hal/spi_slave_hal.h b/tools/sdk/esp32/include/hal/include/hal/spi_slave_hal.h index 2beccd45..b6d2ad5b 100644 --- a/tools/sdk/esp32/include/hal/include/hal/spi_slave_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/spi_slave_hal.h @@ -32,10 +32,10 @@ #pragma once +#include #include "soc/lldesc.h" #include "soc/spi_struct.h" -#include -#include "soc/spi_caps.h" +#include "soc/soc_caps.h" #include "hal/spi_ll.h" /** diff --git a/tools/sdk/esp32/include/hal/include/hal/spi_types.h b/tools/sdk/esp32/include/hal/include/hal/spi_types.h index b2fef1c3..39aa2682 100644 --- a/tools/sdk/esp32/include/hal/include/hal/spi_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/spi_types.h @@ -14,10 +14,10 @@ #pragma once -#include "soc/spi_caps.h" #include "esp_attr.h" -#include "sdkconfig.h" #include +#include "soc/soc_caps.h" +#include "sdkconfig.h" /** * @brief Enum with the three SPI peripherals that are software-accessible in it diff --git a/tools/sdk/esp32/include/hal/include/hal/systimer_types.h b/tools/sdk/esp32/include/hal/include/hal/systimer_types.h index 2ae7c4a2..02e65daf 100644 --- a/tools/sdk/esp32/include/hal/include/hal/systimer_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/systimer_types.h @@ -19,7 +19,7 @@ extern "C" { #endif #include -#include "soc/systimer_caps.h" +#include "soc/soc_caps.h" /* * @brief The structure of the counter value in systimer diff --git a/tools/sdk/esp32/include/hal/include/hal/timer_hal.h b/tools/sdk/esp32/include/hal/include/hal/timer_hal.h index f9188fe3..f8c91739 100644 --- a/tools/sdk/esp32/include/hal/include/hal/timer_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/timer_hal.h @@ -27,9 +27,9 @@ extern "C" { #endif +#include "soc/soc_caps.h" #include "hal/timer_ll.h" #include "hal/timer_types.h" -#include "soc/timer_group_caps.h" /** * Context that should be maintained by both the driver and the HAL @@ -302,7 +302,7 @@ void timer_hal_get_status_reg_mask_bit(timer_hal_context_t *hal, uint32_t *statu */ #define timer_hal_get_intr_status_reg(hal) timer_ll_get_intr_status_reg((hal)->dev) -#ifdef SOC_TIMER_GROUP_SUPPORT_XTAL +#if SOC_TIMER_GROUP_SUPPORT_XTAL /** * @brief Set clock source. * diff --git a/tools/sdk/esp32/include/hal/include/hal/timer_types.h b/tools/sdk/esp32/include/hal/include/hal/timer_types.h index b84478dc..e35009fa 100644 --- a/tools/sdk/esp32/include/hal/include/hal/timer_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/timer_types.h @@ -21,8 +21,8 @@ extern "C" { #include #include #include -#include "soc/timer_group_caps.h" #include "esp_attr.h" +#include "soc/soc_caps.h" /** * @brief Selects a Timer-Group out of 2 available groups @@ -98,7 +98,7 @@ typedef enum { TIMER_AUTORELOAD_MAX, } timer_autoreload_t; -#ifdef SOC_TIMER_GROUP_SUPPORT_XTAL +#if SOC_TIMER_GROUP_SUPPORT_XTAL /** * @brief Select timer source clock. */ @@ -118,7 +118,7 @@ typedef struct { timer_count_dir_t counter_dir; /*!< Counter direction */ timer_autoreload_t auto_reload; /*!< Timer auto-reload */ uint32_t divider; /*!< Counter clock divider. The divider's range is from from 2 to 65536. */ -#ifdef SOC_TIMER_GROUP_SUPPORT_XTAL +#if SOC_TIMER_GROUP_SUPPORT_XTAL timer_src_clk_t clk_src; /*!< Use XTAL as source clock. */ #endif } timer_config_t; diff --git a/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h b/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h index d2ddf33e..efea2b9a 100644 --- a/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h @@ -15,11 +15,10 @@ #pragma once #include - -#include "soc/soc.h" -#include "soc/touch_sensor_caps.h" -#include "sdkconfig.h" #include "esp_attr.h" +#include "soc/soc.h" +#include "soc/soc_caps.h" +#include "sdkconfig.h" /** Touch pad channel */ typedef enum { @@ -115,9 +114,10 @@ typedef enum { } touch_trigger_src_t; /********************************/ +#define TOUCH_PAD_BIT_MASK_ALL ((1< #include #include "sdkconfig.h" +#include "soc/soc_caps.h" /** * @brief TWAI Constants @@ -46,6 +47,10 @@ extern "C" { #define TWAI_MSG_FLAG_SELF 0x08 /**< Transmit as a Self Reception Request. Unused for received. */ #define TWAI_MSG_FLAG_DLC_NON_COMP 0x10 /**< Message's Data length code is larger than 8. This will break compliance with TWAI */ +#define TWAI_BRP_MAX SOC_TWAI_BRP_MAX /**< Maximum configurable BRP value */ +#define TWAI_BRP_MIN SOC_TWAI_BRP_MIN /**< Minimum configurable BRP value */ + + /** * @brief Initializer macros for timing configuration structure * @@ -55,12 +60,12 @@ extern "C" { * @note These timing values are based on the assumption APB clock is at 80MHz * @note The available bit rates are dependent on the chip target and revision. */ -#if (TWAI_BRP_MAX > 256) +#if (SOC_TWAI_BRP_MAX > 256) #define TWAI_TIMING_CONFIG_1KBITS() {.brp = 4000, .tseg_1 = 15, .tseg_2 = 8, .sjw = 3, .triple_sampling = false} #define TWAI_TIMING_CONFIG_5KBITS() {.brp = 800, .tseg_1 = 15, .tseg_2 = 8, .sjw = 3, .triple_sampling = false} #define TWAI_TIMING_CONFIG_10KBITS() {.brp = 400, .tseg_1 = 15, .tseg_2 = 8, .sjw = 3, .triple_sampling = false} #endif -#if (TWAI_BRP_MAX > 128) || (CONFIG_ESP32_REV_MIN >= 2) +#if (SOC_TWAI_BRP_MAX > 128) || (CONFIG_ESP32_REV_MIN >= 2) #define TWAI_TIMING_CONFIG_12_5KBITS() {.brp = 256, .tseg_1 = 16, .tseg_2 = 8, .sjw = 3, .triple_sampling = false} #define TWAI_TIMING_CONFIG_16KBITS() {.brp = 200, .tseg_1 = 16, .tseg_2 = 8, .sjw = 3, .triple_sampling = false} #define TWAI_TIMING_CONFIG_20KBITS() {.brp = 200, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false} diff --git a/tools/sdk/esp32/include/hal/include/hal/uart_types.h b/tools/sdk/esp32/include/hal/include/hal/uart_types.h index 6d44cf1f..04ff86b3 100644 --- a/tools/sdk/esp32/include/hal/include/hal/uart_types.h +++ b/tools/sdk/esp32/include/hal/include/hal/uart_types.h @@ -20,7 +20,7 @@ extern "C" { #include #include -#include "soc/uart_caps.h" +#include "soc/soc_caps.h" /** diff --git a/tools/sdk/esp32/include/hal/include/hal/wdt_hal.h b/tools/sdk/esp32/include/hal/include/hal/wdt_hal.h index 2347fb59..13d9f5d2 100644 --- a/tools/sdk/esp32/include/hal/include/hal/wdt_hal.h +++ b/tools/sdk/esp32/include/hal/include/hal/wdt_hal.h @@ -25,7 +25,7 @@ extern "C" { #endif #include -#include "soc/timer_group_caps.h" +#include "soc/soc_caps.h" #include "hal/wdt_types.h" #include "hal/mwdt_ll.h" #include "hal/rwdt_ll.h" diff --git a/tools/sdk/esp32/include/heap/include/esp_heap_caps.h b/tools/sdk/esp32/include/heap/include/esp_heap_caps.h index ff303ddf..13449340 100644 --- a/tools/sdk/esp32/include/heap/include/esp_heap_caps.h +++ b/tools/sdk/esp32/include/heap/include/esp_heap_caps.h @@ -116,12 +116,18 @@ void *heap_caps_realloc( void *ptr, size_t size, int caps); * * @return A pointer to the memory allocated on success, NULL on failure * - * @note Any memory allocated with heaps_caps_aligned_alloc() MUST - * be freed with heap_caps_aligned_free() and CANNOT be passed to free() * */ void *heap_caps_aligned_alloc(size_t alignment, size_t size, int caps); +/** + * @brief Used to deallocate memory previously allocated with heap_caps_aligned_alloc + * + * @param ptr Pointer to the memory allocated + * @note This function is deprecated, plase consider using heap_caps_free() instead + */ +void __attribute__((deprecated)) heap_caps_aligned_free(void *ptr); + /** * @brief Allocate a aligned chunk of memory which has the given capabilities. The initialized value in the memory is set to zero. * @@ -134,20 +140,9 @@ void *heap_caps_aligned_alloc(size_t alignment, size_t size, int caps); * * @return A pointer to the memory allocated on success, NULL on failure * - * @note Any memory allocated with heap_caps_aligned_calloc() MUST - * be freed with heap_caps_aligned_free() and CANNOT be passed to free() */ void *heap_caps_aligned_calloc(size_t alignment, size_t n, size_t size, uint32_t caps); -/** - * @brief Used to deallocate memory previously allocated with heap_caps_aligned_alloc - * - * @param ptr Pointer to the memory allocated - * @note This function is aimed to deallocate only memory allocated with - * heap_caps_aligned_alloc, memory allocated with heap_caps_malloc - * MUST not be passed to this function - */ -void heap_caps_aligned_free(void *ptr); /** * @brief Allocate a chunk of memory which has the given capabilities. The initialized value in the memory is set to zero. diff --git a/tools/sdk/esp32/include/heap/include/multi_heap.h b/tools/sdk/esp32/include/heap/include/multi_heap.h index d07d4180..df76e87d 100644 --- a/tools/sdk/esp32/include/heap/include/multi_heap.h +++ b/tools/sdk/esp32/include/heap/include/multi_heap.h @@ -55,9 +55,9 @@ void *multi_heap_malloc(multi_heap_handle_t heap, size_t size); * * @param heap Handle to a registered heap. * @param p NULL, or a pointer previously returned from multi_heap_aligned_alloc() for the same heap. + * @note This function is deprecated, consider using multi_heap_free() instead */ -void multi_heap_aligned_free(multi_heap_handle_t heap, void *p); - +void __attribute__((deprecated)) multi_heap_aligned_free(multi_heap_handle_t heap, void *p); /** @brief free() a buffer in a given heap. * diff --git a/tools/sdk/esp32/include/idf_test/include/idf_performance.h b/tools/sdk/esp32/include/idf_test/include/idf_performance.h index 4fb6364b..844f9459 100644 --- a/tools/sdk/esp32/include/idf_test/include/idf_performance.h +++ b/tools/sdk/esp32/include/idf_test/include/idf_performance.h @@ -154,3 +154,12 @@ #ifndef IDF_PERFORMANCE_MAX_SCHEDULING_TIME #define IDF_PERFORMANCE_MAX_SCHEDULING_TIME 2000 #endif + +#ifndef IDF_PERFORMANCE_MAX_MALLOC_DEFAULT_AVERAGE_TIME +#define IDF_PERFORMANCE_MAX_MALLOC_DEFAULT_AVERAGE_TIME 2600 +#endif + +#ifndef IDF_PERFORMANCE_MAX_FREE_DEFAULT_AVERAGE_TIME +#define IDF_PERFORMANCE_MAX_FREE_DEFAULT_AVERAGE_TIME 950 +#endif + diff --git a/tools/sdk/esp32/include/soc/include/soc/spinlock.h b/tools/sdk/esp32/include/soc/include/soc/spinlock.h index fd6ec4e3..aace1bbf 100644 --- a/tools/sdk/esp32/include/soc/include/soc/spinlock.h +++ b/tools/sdk/esp32/include/soc/include/soc/spinlock.h @@ -46,7 +46,6 @@ typedef struct { static inline void __attribute__((always_inline)) spinlock_initialize(spinlock_t *lock) { assert(lock); - #if !CONFIG_FREERTOS_UNICORE lock->owner = SPINLOCK_FREE; lock->count = 0; diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/adc_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/adc_caps.h deleted file mode 100644 index e7af39c4..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/adc_caps.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#define SOC_ADC_PERIPH_NUM (2) -#define SOC_ADC_PATT_LEN_MAX (16) - -#define SOC_ADC_CHANNEL_NUM(PERIPH_NUM) ((PERIPH_NUM==0)? 8: 10) -#define SOC_ADC_MAX_CHANNEL_NUM (10) - -#define SOC_ADC1_DATA_INVERT_DEFAULT (1) -#define SOC_ADC2_DATA_INVERT_DEFAULT (1) - -#define SOC_ADC_DIGI_DATA_INVERT_DEFAULT(PERIPH_NUM) (1) - -#define SOC_ADC_FSM_RSTB_WAIT_DEFAULT (8) -#define SOC_ADC_FSM_START_WAIT_DEFAULT (5) -#define SOC_ADC_FSM_STANDBY_WAIT_DEFAULT (100) -#define ADC_FSM_SAMPLE_CYCLE_DEFAULT (2) - -/** - * Check if adc support digital controller (DMA) mode. - * @value - * - 1 : support; - * - 0 : not support; - */ -#define SOC_ADC_SUPPORT_DMA_MODE(PERIPH_NUM) ((PERIPH_NUM==0)? 1: 0) - -#define SOC_ADC_PWDET_CCT_DEFAULT (4) - -#define SOC_ADC_SAR_CLK_DIV_DEFAULT(PERIPH_NUM) (2) - -#define SOC_ADC_DIGI_SAR_CLK_DIV_DEFAULT (2) \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_caps.h deleted file mode 100644 index f372e9e0..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_caps.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#warning soc/can_caps.h is deprecated, please use soc/twai_caps.h instead - -/* ---------------------------- Compatibility ------------------------------- */ - -#define CAN_BRP_MIN 2 -#define CAN_BRP_MAX 128 -#define CAN_BRP_MAX_ECO 256 -#define CAN_BRP_DIV_THRESH 128 -#define CAN_SUPPORT_MULTI_ADDRESS_LAYOUT 1 - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_periph.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_periph.h index f4862b57..1feac200 100644 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_periph.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/can_periph.h @@ -23,8 +23,8 @@ extern "C" { #warning soc/can_periph.h is deprecated, please use soc/twai_periph.h instead #if CONFIG_IDF_TARGET_ESP32 +#include "soc/soc_caps.h" #include "soc/can_struct.h" -#include "soc/can_caps.h" #endif #ifdef __cplusplus diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/dac_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/dac_caps.h deleted file mode 100644 index 8f3fc02f..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/dac_caps.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef _SOC_RTC_DAC_CAPS_H_ -#define _SOC_RTC_DAC_CAPS_H_ - -#define SOC_DAC_PERIPH_NUM 2 - -#define SOC_DAC_RESOLUTION 8 // DAC resolution ratio 8 bit - -#endif \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_caps.h deleted file mode 100644 index 3c202c73..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_caps.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -// ESP32 has 1 GPIO peripheral -#define SOC_GPIO_PORT (1) -#define GPIO_PIN_COUNT (40) - -// On ESP32 those PADs which have RTC functions must set pullup/down/capability via RTC register. -// On ESP32-S2, Digital IOs have their own registers to control pullup/down/capability, independent with RTC registers. -#define GPIO_SUPPORTS_RTC_INDEPENDENT (0) -// Force hold is a new function of ESP32-S2 -#define GPIO_SUPPORTS_FORCE_HOLD (0) - -#define GPIO_APP_CPU_INTR_ENA (BIT(0)) -#define GPIO_APP_CPU_NMI_INTR_ENA (BIT(1)) -#define GPIO_PRO_CPU_INTR_ENA (BIT(2)) -#define GPIO_PRO_CPU_NMI_INTR_ENA (BIT(3)) -#define GPIO_SDIO_EXT_INTR_ENA (BIT(4)) - -#define GPIO_MODE_DEF_DISABLE (0) -#define GPIO_MODE_DEF_INPUT (BIT0) -#define GPIO_MODE_DEF_OUTPUT (BIT1) -#define GPIO_MODE_DEF_OD (BIT2) - -#define GPIO_IS_VALID_GPIO(gpio_num) ((gpio_num < GPIO_PIN_COUNT && GPIO_PIN_MUX_REG[gpio_num] != 0)) /*!< Check whether it is a valid GPIO number */ -#define GPIO_IS_VALID_OUTPUT_GPIO(gpio_num) ((GPIO_IS_VALID_GPIO(gpio_num)) && (gpio_num < 34)) /*!< Check whether it can be a valid GPIO number of output mode */ -#define GPIO_MASK_CONTAIN_INPUT_GPIO(gpio_mask) ((gpio_mask & (GPIO_SEL_34 | GPIO_SEL_35 | GPIO_SEL_36 | GPIO_SEL_37 | GPIO_SEL_38 | GPIO_SEL_39))) /*!< Check whether it contains input io */ - -#define GPIO_MATRIX_CONST_ONE_INPUT (0x38) -#define GPIO_MATRIX_CONST_ZERO_INPUT (0x30) - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/ledc_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_pins.h similarity index 88% rename from tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/ledc_caps.h rename to tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_pins.h index 0600e581..02a9693c 100644 --- a/tools/sdk/esp32s2/include/soc/soc/esp32s2/include/soc/ledc_caps.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/gpio_pins.h @@ -3,6 +3,7 @@ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at +// // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software @@ -17,7 +18,9 @@ extern "C" { #endif -#define SOC_LEDC_SUPPORT_XTAL_CLOCK (1) + +#define GPIO_MATRIX_CONST_ONE_INPUT (0x38) +#define GPIO_MATRIX_CONST_ZERO_INPUT (0x30) #ifdef __cplusplus } diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2c_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2c_caps.h deleted file mode 100644 index d2fec809..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2c_caps.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2010-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -// ESP32 have 2 I2C. -#define SOC_I2C_NUM (2) - -#define SOC_I2C_FIFO_LEN (32) /*!< I2C hardware FIFO depth */ -#define I2C_INTR_MASK (0x3fff) /*!< I2C all interrupt bitmap */ - -//ESP32 do not support hardware FSM reset -#define I2C_SUPPORT_HW_FSM_RST (0) -//ESP32 do not support hardware clear bus -#define I2C_SUPPORT_HW_CLR_BUS (0) - -#ifdef __cplusplus -} -#endif - - diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2s_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2s_caps.h deleted file mode 100644 index 07c707e6..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/i2s_caps.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#define APLL_MIN_FREQ (250000000) -#define APLL_MAX_FREQ (500000000) -#define APLL_I2S_MIN_RATE (10675) //in Hz, I2S Clock rate limited by hardware -#define I2S_AD_BCK_FACTOR (2) -#define I2S_PDM_BCK_FACTOR (64) -#define I2S_MAX_BUFFER_SIZE (4 * 1024 * 1024) //the maximum RAM can be allocated -#define I2S_BASE_CLK (2*APB_CLK_FREQ) - -// ESP32 have 2 I2S -#define SOC_I2S_NUM (2) - -#define SOC_I2S_SUPPORTS_PDM (1) // ESP32 support PDM -#define SOC_I2S_SUPPORTS_DMA_EQUAL (0) // ESP32 don't support dma equal -#define SOC_I2S_SUPPORTS_ADC_DAC (1) // ESP32 support ADC and DAC - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mcpwm_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mcpwm_caps.h deleted file mode 100644 index bb2ce198..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mcpwm_caps.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#define SOC_MCPWM_PERIPH_NUM 2 ///< MCPWM peripheral number -#define SOC_MCPWM_TIMER_NUM 3 ///< Timer that each peripheral has -#define SOC_MCPWM_OP_NUM 3 ///< Operator that each peripheral has -#define SOC_MCPWM_COMPARATOR_NUM 2 ///< Comparator that each operator has -#define SOC_MCPWM_GENERATOR_NUM 2 ///< Generator that each operator has -#define SOC_MCPWM_FAULT_SIG_NUM 3 ///< Fault signal number that each peripheral has \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mpu_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mpu_caps.h deleted file mode 100644 index 8e12a2b1..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/mpu_caps.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#define SOC_MPU_CONFIGURABLE_REGIONS_SUPPORTED 0 -#define SOC_MPU_MIN_REGION_SIZE 0x20000000 -#define SOC_MPU_REGIONS_MAX_NUM 8 -#define SOC_MPU_REGION_RO_SUPPORTED 0 -#define SOC_MPU_REGION_WO_SUPPORTED 0 \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/pcnt_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/pcnt_caps.h deleted file mode 100644 index 2d276092..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/pcnt_caps.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -// ESP32 have 1 PCNT peripheral -#define SOC_PCNT_PORT_NUM (1) -#define SOC_PCNT_UNIT_NUM (8) - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rmt_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rmt_caps.h deleted file mode 100644 index 8f258593..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rmt_caps.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#define SOC_RMT_CHANNEL_MEM_WORDS (64) /*!< Each channel owns 64 words memory */ -#define SOC_RMT_CHANNELS_NUM (8) /*!< Total 8 channels */ - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc.h index c6cccfb2..44a43fe4 100644 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc.h @@ -581,6 +581,29 @@ void rtc_sleep_set_wakeup_time(uint64_t t); */ uint32_t rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt); +/** + * @brief Enter deep sleep mode + * + * Similar to rtc_sleep_start(), but additionally uses hardware to calculate the CRC value + * of RTC FAST memory. On wake, this CRC is used to determine if a deep sleep wake + * stub is valid to execute (if a wake address is set). + * + * No RAM is accessed while calculating the CRC and going into deep sleep, which makes + * this function safe to use even if the caller's stack is in RTC FAST memory. + * + * @note If no deep sleep wake stub address is set then calling rtc_sleep_start() will + * have the same effect and takes less time as CRC calculation is skipped. + * + * @note This function should only be called after rtc_sleep_init() has been called to + * configure the system for deep sleep. + * + * @param wakeup_opt - same as for rtc_sleep_start + * @param reject_opt - same as for rtc_sleep_start + * + * @return non-zero if sleep was rejected by hardware + */ +uint32_t rtc_deep_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt); + /** * RTC power and clock control initialization settings */ diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc_io_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc_io_caps.h deleted file mode 100644 index 29d4ec64..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/rtc_io_caps.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef _SOC_RTC_IO_CAPS_H_ -#define _SOC_RTC_IO_CAPS_H_ - -#define SOC_RTC_IO_PIN_COUNT 18 -#define SOC_PIN_FUNC_RTC_IO 0 - -#endif \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/sigmadelta_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/sigmadelta_caps.h deleted file mode 100644 index 53035d18..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/sigmadelta_caps.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -// ESP32 have 1 SIGMADELTA peripheral. -#define SIGMADELTA_PORT_0 (0) /*!< SIGMADELTA port 0 */ -#define SIGMADELTA_PORT_MAX (1) /*!< SIGMADELTA port max */ -#define SOC_SIGMADELTA_NUM (SIGMADELTA_PORT_MAX) - -#define SIGMADELTA_CHANNEL_0 (0) /*!< Sigma-delta channel 0 */ -#define SIGMADELTA_CHANNEL_1 (1) /*!< Sigma-delta channel 1 */ -#define SIGMADELTA_CHANNEL_2 (2) /*!< Sigma-delta channel 2 */ -#define SIGMADELTA_CHANNEL_3 (3) /*!< Sigma-delta channel 3 */ -#define SIGMADELTA_CHANNEL_4 (4) /*!< Sigma-delta channel 4 */ -#define SIGMADELTA_CHANNEL_5 (5) /*!< Sigma-delta channel 5 */ -#define SIGMADELTA_CHANNEL_6 (6) /*!< Sigma-delta channel 6 */ -#define SIGMADELTA_CHANNEL_7 (7) /*!< Sigma-delta channel 7 */ -#define SIGMADELTA_CHANNEL_MAX (8) - -#ifdef __cplusplus -} -#endif diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_caps.h index a9e8e2c9..76d778e7 100644 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_caps.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_caps.h @@ -1,16 +1,231 @@ -// The long term plan is to have a single soc_caps.h for each peripheral. -// During the refactoring and multichip support development process, we -// seperate these information into periph_caps.h for each peripheral and -// include them here. +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* + * Soc capabilities file, describing the following chip attributes: + * - Peripheral or feature supported or not + * - Number of resources (peripheral, channel, etc.) + * - Maximum / Minimum value of HW, including: buffer/fifo size, length of transaction, frequency + * supported, etc. + * + * For boolean definitions: + * - if true: `#define MODULE_[SUBMODULE_]SUPPORT_FEATURE 1`. + * (`#define` blank string causes error when checking by `#if x`) + * - if false: not define anything at all. + * (`#ifdef x` is true even when `#define 0` is defined before.) + * + * The code depending on this file uses these boolean definitions as `#if x` or `#if !x`. + * (`#ifdef/ifndef x` is not compatible with `#define x 0`. Though we don't suggest to use `#define + * x 0`, it's still a risk.) + * + * ECO & exceptions: + * For ECO-ed booleans, `#define x "Not determined"` for them. This will cause error when used by + * `#if x` and `#if !x`, making these missing definitions more obvious. + */ #pragma once -#define SOC_MCPWM_SUPPORTED 1 -#define SOC_SDMMC_HOST_SUPPORTED 1 -#define SOC_BT_SUPPORTED 1 +#ifdef __has_include +# if __has_include("sdkconfig.h") +# include "sdkconfig.h" +# define SOC_CAPS_ECO_VER CONFIG_ESP32_REV_MIN +# endif +#endif + +#if __DOXYGEN__ && !defined(SOC_CAPS_ECO_VER) +#define SOC_CAPS_ECO_VER SOC_CAPS_ECO_VER_MAX +#endif + +#ifndef SOC_CAPS_ECO_VER +#warning ECO version not determined. Some ECO related caps will not be available. +#warning Define SOC_CAPS_ECO_VER before including this header. + +// Define warning strings here for ECO-ed features to show error when they are used without being +// defined correctly +#define SOC_BROWNOUT_RESET_SUPPORTED "Not determined" +#define SOC_TWAI_BRP_DIV_SUPPORTED "Not determined" +#endif + +/*-------------------------- COMMON CAPS ---------------------------------------*/ +#define SOC_CAPS_ECO_VER_MAX 3 + +#define SOC_MCPWM_SUPPORTED 1 +#define SOC_SDMMC_HOST_SUPPORTED 1 +#define SOC_BT_SUPPORTED 1 +#define SOC_PCNT_SUPPORTED 1 #define SOC_SDIO_SLAVE_SUPPORTED 1 -#define SOC_TWAI_SUPPORTED 1 -#define SOC_CAN_SUPPORTED SOC_TWAI_SUPPORTED -#define SOC_EMAC_SUPPORTED 1 -#define SOC_RISCV_COPROC_SUPPORTED 0 -#define SOC_CPU_CORES_NUM 2 +#define SOC_TWAI_SUPPORTED 1 +#define SOC_EMAC_SUPPORTED 1 +#define SOC_RISCV_COPROC_SUPPORTED 0 //TODO: correct the caller and remove this line +#define SOC_CPU_CORES_NUM 2 + + +/*-------------------------- ADC CAPS ----------------------------------------*/ +#define SOC_ADC_PERIPH_NUM (2) +#define SOC_ADC_PATT_LEN_MAX (16) +#define SOC_ADC_CHANNEL_NUM(PERIPH_NUM) ((PERIPH_NUM==0)? 8: 10) +#define SOC_ADC_MAX_CHANNEL_NUM (10) + +/** + * Check if adc support digital controller (DMA) mode. + * @value + * - 1 : support; + * - 0 : not support; + */ +#define SOC_ADC_SUPPORT_DMA_MODE(PERIPH_NUM) ((PERIPH_NUM==0)? 1: 0) + +/*-------------------------- BROWNOUT CAPS -----------------------------------*/ +#if SOC_CAPS_ECO_VER >= 1 +#define SOC_BROWNOUT_RESET_SUPPORTED 1 +#endif + +/*-------------------------- CPU CAPS ----------------------------------------*/ +#define SOC_CPU_BREAKPOINTS_NUM 2 +#define SOC_CPU_WATCHPOINTS_NUM 2 + +#define SOC_CPU_WATCHPOINT_SIZE 64 // bytes + +/*-------------------------- DAC CAPS ----------------------------------------*/ +#define SOC_DAC_PERIPH_NUM 2 +#define SOC_DAC_RESOLUTION 8 // DAC resolution ratio 8 bit + +/*-------------------------- GPIO CAPS ---------------------------------------*/ +// ESP32 has 1 GPIO peripheral +#define SOC_GPIO_PORT (1) +#define SOC_GPIO_PIN_COUNT 40 + +// SOC_GPIO_SUPPORT_RTC_INDEPENDENT not defined. On ESP32 those PADs which have RTC functions must +// set pullup/down/capability via RTC register. On ESP32-S2, Digital IOs have their own registers to +// control pullup/down/capability, independent with RTC registers. + +// 0~39 except from 20, 24, 28~31 are valid +#define SOC_GPIO_VALID_GPIO_MASK (0xFFFFFFFFFFULL & ~(0ULL | BIT20 | BIT24 | BIT28 | BIT29 | BIT30 | BIT31)) +// GPIO >= 34 are input only +#define SOC_GPIO_VALID_OUTPUT_GPIO_MASK (SOC_GPIO_VALID_GPIO_MASK & ~(0ULL | BIT34 | BIT35 | BIT36 | BIT37 | BIT38 | BIT39)) + +/*-------------------------- I2C CAPS ----------------------------------------*/ +// ESP32 have 2 I2C. +#define SOC_I2C_NUM (2) + +#define SOC_I2C_FIFO_LEN (32) /*!< I2C hardware FIFO depth */ + +/*-------------------------- I2S CAPS ----------------------------------------*/ +// ESP32 have 2 I2S +#define SOC_I2S_NUM (2) + +#define SOC_I2S_SUPPORTS_PDM (1) // ESP32 support PDM +#define SOC_I2S_SUPPORTS_ADC_DAC (1) // ESP32 support ADC and DAC + +#define SOC_I2S_MAX_BUFFER_SIZE (4 * 1024 * 1024) //the maximum RAM can be allocated + +#define SOC_I2S_APLL_MIN_FREQ (250000000) +#define SOC_I2S_APLL_MAX_FREQ (500000000) +#define SOC_I2S_APLL_MIN_RATE (10675) //in Hz, I2S Clock rate limited by hardware + +/*-------------------------- LEDC CAPS ---------------------------------------*/ +#define SOC_LEDC_SUPPORT_HS_MODE (1) + +/*-------------------------- MCPWM CAPS --------------------------------------*/ +#define SOC_MCPWM_PERIPH_NUM 2 ///< MCPWM peripheral number +#define SOC_MCPWM_TIMER_NUM 3 ///< Timer that each peripheral has +#define SOC_MCPWM_OP_NUM 3 ///< Operator that each peripheral has +#define SOC_MCPWM_COMPARATOR_NUM 2 ///< Comparator that each operator has +#define SOC_MCPWM_GENERATOR_NUM 2 ///< Generator that each operator has +#define SOC_MCPWM_FAULT_SIG_NUM 3 ///< Fault signal number that each peripheral has + +/*-------------------------- MPU CAPS ----------------------------------------*/ +//TODO: correct the caller and remove unsupported lines +#define SOC_MPU_CONFIGURABLE_REGIONS_SUPPORTED 0 +#define SOC_MPU_MIN_REGION_SIZE 0x20000000 +#define SOC_MPU_REGIONS_MAX_NUM 8 +#define SOC_MPU_REGION_RO_SUPPORTED 0 +#define SOC_MPU_REGION_WO_SUPPORTED 0 + +/*-------------------------- PCNT CAPS ---------------------------------------*/ +// ESP32 have 1 PCNT peripheral +#define SOC_PCNT_PORT_NUM (1) +#define SOC_PCNT_UNIT_NUM (8) +#define SOC_PCNT_UNIT_CHANNEL_NUM (2) + +/*-------------------------- RMT CAPS ----------------------------------------*/ +#define SOC_RMT_CHANNEL_MEM_WORDS (64) /*!< Each channel owns 64 words memory */ +#define SOC_RMT_CHANNELS_NUM (8) /*!< Total 8 channels */ + +/*-------------------------- RTCIO CAPS --------------------------------------*/ +#define SOC_RTCIO_PIN_COUNT 18 + +/*-------------------------- SIGMA DELTA CAPS --------------------------------*/ +// ESP32 have 1 SIGMADELTA peripheral. +#define SOC_SIGMADELTA_NUM 1 + +/*-------------------------- SPI CAPS ----------------------------------------*/ +#define SOC_SPI_PERIPH_NUM 3 +#define SOC_SPI_DMA_CHAN_NUM 2 + +#define SOC_SPI_PERIPH_CS_NUM(i) 3 + +#define SOC_SPI_MAXIMUM_BUFFER_SIZE 64 + +#define SOC_SPI_SUPPORT_AS_CS 1 //Support to toggle the CS while the clock toggles + +// Peripheral supports DIO, DOUT, QIO, or QOUT +#define SOC_SPI_PERIPH_SUPPORT_MULTILINE_MODE(spi_host) ({(void)spi_host; 1;}) + +// Peripheral doesn't support output given level during its "dummy phase" +#define SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUTPUT(spi_host) ({(void)spi_host; 0;}) + +/*-------------------------- TIMER GROUP CAPS --------------------------------*/ +// No contents here + +/*-------------------------- TOUCH SENSOR CAPS -------------------------------*/ +#define SOC_TOUCH_SENSOR_NUM (10) + +#define SOC_TOUCH_PAD_MEASURE_WAIT_MAX (0xFF) /*!= 2 && (brp) <= 128 && ((brp) & 0x1) == 0) + +#define SOC_TWAI_BRP_MAX_ECO 256 +//Any even number from 2 to 128, or multiples of 4 from 132 to 256 +#define SOC_TWAI_BRP_IS_VALID_ECO(brp) (((brp) >= 2 && (brp) <= 128 && ((brp) & 0x1) == 0) || ((brp) >= 132 && (brp) <= 256 && ((brp) & 0x3) == 0)) + +#if SOC_CAPS_ECO_VER >= 2 +# define SOC_TWAI_BRP_DIV_SUPPORTED 1 +# define SOC_TWAI_BRP_DIV_THRESH 128 +# define SOC_TWAI_BRP_IS_VALID SOC_TWAI_BRP_IS_VALID_ECO +# define SOC_TWAI_BRP_MAX SOC_TWAI_BRP_MAX_ECO +#else +# define SOC_TWAI_BRP_IS_VALID SOC_TWAI_BRP_IS_VALID_ECO0 +# define SOC_TWAI_BRP_MAX SOC_TWAI_BRP_MAX_ECO0 +#endif + +/*-------------------------- UART CAPS ---------------------------------------*/ +// ESP32 have 3 UART. +#define SOC_UART_NUM (3) + +#define SOC_UART_FIFO_LEN (128) /*!< The UART hardware FIFO length */ +#define SOC_UART_BITRATE_MAX (5000000) /*!< Max bit rate supported by UART */ + +/* ---------------------------- Compatibility ------------------------------- */ +#define SOC_CAN_SUPPORTED SOC_TWAI_SUPPORTED +#define CAN_BRP_MIN SOC_TWAI_BRP_MIN +#define CAN_BRP_MAX SOC_TWAI_BRP_MAX +#define CAN_BRP_DIV_THRESH SOC_TWAI_BRP_DIV_THRESH +#define CAN_SUPPORT_MULTI_ADDRESS_LAYOUT SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/cpu_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_pins.h similarity index 61% rename from tools/sdk/esp32/include/soc/soc/esp32/include/soc/cpu_caps.h rename to tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_pins.h index fbfd780b..6a810106 100644 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/cpu_caps.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/soc_pins.h @@ -12,9 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +/* + * Pin definition header file. The long term plan is to have a single soc_pins.h for all + * peripherals. Now we temporarily separate these information into periph_pins/channels.h for each + * peripheral and include them here to avoid developing conflicts in those header files. + */ + #pragma once -#define SOC_CPU_BREAKPOINTS_NUM 2 -#define SOC_CPU_WATCHPOINTS_NUM 2 - -#define SOC_CPU_WATCHPOINT_SIZE 64 // bytes \ No newline at end of file +#include "soc/gpio_pins.h" +#include "soc/spi_pins.h" +#include "soc/sdio_slave_pins.h" +#include "soc/sdmmc_pins.h" \ No newline at end of file diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_pins.h similarity index 71% rename from tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_caps.h rename to tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_pins.h index fe7461a4..3727f9bd 100644 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_caps.h +++ b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/spi_pins.h @@ -14,10 +14,6 @@ #pragma once -#define SOC_SPI_PERIPH_NUM 3 -#define SOC_SPI_DMA_CHAN_NUM 2 -#define SOC_SPI_PERIPH_CS_NUM(i) 3 - #define SPI_FUNC_NUM 1 #define SPI_IOMUX_PIN_NUM_MISO 7 #define SPI_IOMUX_PIN_NUM_MOSI 8 @@ -51,17 +47,4 @@ #define VSPI_IOMUX_PIN_NUM_WP 22 #define VSPI_IOMUX_PIN_NUM_HD 21 -#define SOC_SPI_MAXIMUM_BUFFER_SIZE 64 - -#define SOC_SPI_SUPPORT_AS_CS 1 //Support to toggle the CS while the clock toggles - -//#define SOC_SPI_SUPPORT_DDRCLK -//#define SOC_SPI_SLAVE_SUPPORT_SEG_TRANS -//#define SOC_SPI_SUPPORT_CD_SIG - -// Peripheral supports DIO, DOUT, QIO, or QOUT -#define SOC_SPI_PERIPH_SUPPORT_MULTILINE_MODE(spi_host) ({(void)spi_host; 1;}) - -// Peripheral doesn't support output given level during its "dummy phase" -#define SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUTPUT(spi_host) ({(void)spi_host; 0;}) diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/timer_group_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/timer_group_caps.h deleted file mode 100644 index e15269aa..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/timer_group_caps.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once diff --git a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/touch_sensor_caps.h b/tools/sdk/esp32/include/soc/soc/esp32/include/soc/touch_sensor_caps.h deleted file mode 100644 index a3d75544..00000000 --- a/tools/sdk/esp32/include/soc/soc/esp32/include/soc/touch_sensor_caps.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#define SOC_TOUCH_SENSOR_NUM (10) -#define SOC_TOUCH_SENSOR_BIT_MASK_MAX (0x3ff) - -#define SOC_TOUCH_PAD_MEASURE_WAIT (0xFF) /*!=0 : GPIO number index. * - -1 : Not support. diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/dac_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/dac_periph.h index fe06f470..bed3f22a 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/dac_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/dac_periph.h @@ -20,7 +20,7 @@ #include "soc/rtc_io_struct.h" #include "soc/rtc.h" #include "soc/dac_channel.h" -#include "soc/dac_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/gpio_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/gpio_periph.h index ee5d7c36..ae0ed73e 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/gpio_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/gpio_periph.h @@ -17,7 +17,7 @@ #include "soc/io_mux_reg.h" #include "soc/gpio_struct.h" #include "soc/gpio_reg.h" -#include "soc/gpio_caps.h" +#include "soc/soc_caps.h" #include "soc/gpio_sig_map.h" #ifdef __cplusplus @@ -25,9 +25,9 @@ extern "C" { #endif -extern const uint32_t GPIO_PIN_MUX_REG[GPIO_PIN_COUNT]; +extern const uint32_t GPIO_PIN_MUX_REG[SOC_GPIO_PIN_COUNT]; -extern const uint32_t GPIO_HOLD_MASK[GPIO_PIN_COUNT]; +extern const uint32_t GPIO_HOLD_MASK[SOC_GPIO_PIN_COUNT]; #ifdef __cplusplus } diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/i2c_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/i2c_periph.h index 3f597c5d..f56fbe29 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/i2c_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/i2c_periph.h @@ -15,7 +15,7 @@ #include "soc/i2c_reg.h" #include "soc/i2c_struct.h" -#include "soc/i2c_caps.h" +#include "soc/soc_caps.h" #include "soc/periph_defs.h" #ifdef __cplusplus diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/i2s_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/i2s_periph.h index df72723a..a2b9c542 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/i2s_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/i2s_periph.h @@ -17,7 +17,7 @@ #include "soc/periph_defs.h" #include "soc/i2s_struct.h" #include "soc/i2s_reg.h" -#include "soc/i2s_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/ledc_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/ledc_periph.h index 4cfb5ac9..7cf82c1f 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/ledc_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/ledc_periph.h @@ -13,9 +13,9 @@ // limitations under the License. #pragma once +#include "soc/soc_caps.h" #include "soc/ledc_reg.h" #include "soc/ledc_struct.h" -#include "soc/ledc_caps.h" #ifdef __cplusplus extern "C" { @@ -28,7 +28,7 @@ typedef struct { const uint8_t sig_out0_idx; } ledc_signal_conn_t; -#ifdef SOC_LEDC_SUPPORT_HS_MODE +#if SOC_LEDC_SUPPORT_HS_MODE extern const ledc_signal_conn_t ledc_periph_signal[2]; #else extern const ledc_signal_conn_t ledc_periph_signal[1]; diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/pcnt_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/pcnt_periph.h index d74b175b..fa0f5822 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/pcnt_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/pcnt_periph.h @@ -13,5 +13,30 @@ // limitations under the License. #pragma once + +#include +#include "soc/soc_caps.h" +#include "soc/periph_defs.h" #include "soc/pcnt_reg.h" #include "soc/pcnt_struct.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + struct { + struct { + const uint32_t pulse_sig; + const uint32_t control_sig; + } channels[SOC_PCNT_UNIT_CHANNEL_NUM]; + } units[SOC_PCNT_UNIT_NUM]; + const uint32_t irq; + const periph_module_t module; +} pcnt_signal_conn_t; + +extern const pcnt_signal_conn_t pcnt_periph_signals; + +#ifdef __cplusplus +} +#endif diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/rtc_io_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/rtc_io_periph.h index a5f104f3..aca325f0 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/rtc_io_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/rtc_io_periph.h @@ -16,14 +16,13 @@ #include "soc/soc.h" //include soc related (generated) definitions -#include "soc/rtc_io_caps.h" +#include "soc/soc_caps.h" #include "soc/rtc_io_channel.h" #include "soc/rtc_io_reg.h" #include "soc/rtc_io_struct.h" #include "soc/rtc_cntl_reg.h" #include "soc/rtc_cntl_struct.h" #include "soc/sens_struct.h" -#include "soc/gpio_caps.h" #ifdef __cplusplus extern "C" @@ -61,7 +60,7 @@ typedef struct { * This is an internal function of the driver, and is not usually useful * for external use. */ -extern const rtc_io_desc_t rtc_io_desc[SOC_RTC_IO_PIN_COUNT]; +extern const rtc_io_desc_t rtc_io_desc[SOC_RTCIO_PIN_COUNT]; /** * @brief Provides a constant table to get rtc io number with gpio number @@ -69,7 +68,7 @@ extern const rtc_io_desc_t rtc_io_desc[SOC_RTC_IO_PIN_COUNT]; * This is an internal function of the driver, and is not usually useful * for external use. */ -extern const int rtc_io_num_map[GPIO_PIN_COUNT]; +extern const int rtc_io_num_map[SOC_GPIO_PIN_COUNT]; #ifdef CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC /** diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/rtc_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/rtc_periph.h index 53524522..121dc597 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/rtc_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/rtc_periph.h @@ -15,7 +15,7 @@ #pragma once #include #include "rtc_io_periph.h" -#include "soc/gpio_caps.h" +#include "soc/soc_caps.h" #ifdef __cplusplus extern "C" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/sdio_slave_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/sdio_slave_periph.h index 189f9075..d39f72f5 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/sdio_slave_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/sdio_slave_periph.h @@ -15,7 +15,7 @@ #pragma once #include //include soc related (generated) definitions -#include "soc/sdio_slave_pins.h" +#include "soc/soc_pins.h" #include "soc/slc_reg.h" #include "soc/slc_struct.h" #include "soc/host_reg.h" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/sdmmc_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/sdmmc_periph.h index 75499b0b..7a64f4c5 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/sdmmc_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/sdmmc_periph.h @@ -15,7 +15,7 @@ #pragma once #include //include soc related (generated) definitions -#include "soc/sdmmc_pins.h" +#include "soc/soc_pins.h" #include "soc/sdmmc_reg.h" #include "soc/sdmmc_struct.h" #include "soc/gpio_sig_map.h" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/spi_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/spi_periph.h index 79b637ce..4ddb8b3f 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/spi_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/spi_periph.h @@ -19,7 +19,8 @@ #include "soc/periph_defs.h" //include soc related (generated) definitions -#include "soc/spi_caps.h" +#include "soc/soc_caps.h" +#include "soc/soc_pins.h" #include "soc/spi_reg.h" #include "soc/spi_struct.h" #include "soc/gpio_sig_map.h" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/touch_sensor_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/touch_sensor_periph.h index a1ebeafc..653d3013 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/touch_sensor_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/touch_sensor_periph.h @@ -14,8 +14,8 @@ #pragma once +#include "soc/soc_caps.h" #include "soc/touch_sensor_channel.h" -#include "soc/touch_sensor_caps.h" #include "soc/rtc_cntl_reg.h" #include "soc/rtc_cntl_struct.h" #include "soc/sens_reg.h" diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/twai_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/twai_periph.h index b59a4bae..48fc1d8e 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/twai_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/twai_periph.h @@ -20,8 +20,8 @@ extern "C" { #endif +#include "soc/soc_caps.h" #include "soc/twai_struct.h" -#include "soc/twai_caps.h" #ifdef __cplusplus } diff --git a/tools/sdk/esp32/include/soc/soc/include/soc/uart_periph.h b/tools/sdk/esp32/include/soc/soc/include/soc/uart_periph.h index 3ce86454..61bd029b 100644 --- a/tools/sdk/esp32/include/soc/soc/include/soc/uart_periph.h +++ b/tools/sdk/esp32/include/soc/soc/include/soc/uart_periph.h @@ -13,9 +13,9 @@ #pragma once +#include "soc/soc_caps.h" #include "soc/uart_reg.h" #include "soc/uart_struct.h" -#include "soc/uart_caps.h" #include "soc/periph_defs.h" #include "soc/gpio_sig_map.h" diff --git a/tools/sdk/esp32/include/soc/src/esp32/i2c_rtc_clk.h b/tools/sdk/esp32/include/soc/src/esp32/regi2c_ctrl.h similarity index 85% rename from tools/sdk/esp32/include/soc/src/esp32/i2c_rtc_clk.h rename to tools/sdk/esp32/include/soc/src/esp32/regi2c_ctrl.h index 5ca44d30..1a8c2b3b 100644 --- a/tools/sdk/esp32/include/soc/src/esp32/i2c_rtc_clk.h +++ b/tools/sdk/esp32/include/soc/src/esp32/regi2c_ctrl.h @@ -14,8 +14,9 @@ #pragma once -#include "i2c_apll.h" -#include "i2c_bbpll.h" +#include +#include "regi2c_apll.h" +#include "regi2c_bbpll.h" #ifdef __cplusplus extern "C" { @@ -37,18 +38,18 @@ void rom_i2c_writeReg(uint8_t block, uint8_t host_id, uint8_t reg_add, uint8_t d void rom_i2c_writeReg_Mask(uint8_t block, uint8_t host_id, uint8_t reg_add, uint8_t msb, uint8_t lsb, uint8_t data); /* Convenience macros for the above functions, these use register definitions - * from i2c_apll.h/i2c_bbpll.h header files. + * from regi2c_apll.h/regi2c_bbpll.h header files. */ -#define I2C_WRITEREG_MASK_RTC(block, reg_add, indata) \ +#define REGI2C_WRITE_MASK(block, reg_add, indata) \ rom_i2c_writeReg_Mask(block, block##_HOSTID, reg_add, reg_add##_MSB, reg_add##_LSB, indata) -#define I2C_READREG_MASK_RTC(block, reg_add) \ +#define REGI2C_READ_MASK(block, reg_add) \ rom_i2c_readReg_Mask(block, block##_HOSTID, reg_add, reg_add##_MSB, reg_add##_LSB) -#define I2C_WRITEREG_RTC(block, reg_add, indata) \ +#define REGI2C_WRITE(block, reg_add, indata) \ rom_i2c_writeReg(block, block##_HOSTID, reg_add, indata) -#define I2C_READREG_RTC(block, reg_add) \ +#define REGI2C_READ(block, reg_add) \ rom_i2c_readReg(block, block##_HOSTID, reg_add) diff --git a/tools/sdk/esp32/include/ulp/include/ulp_common.h b/tools/sdk/esp32/include/ulp/include/ulp_common.h index cc39bd48..d149df61 100644 --- a/tools/sdk/esp32/include/ulp/include/ulp_common.h +++ b/tools/sdk/esp32/include/ulp/include/ulp_common.h @@ -86,13 +86,16 @@ esp_err_t ulp_run(uint32_t entry_point); * * ULP coprocessor starts running the program when the wakeup timer counts up * to a given value (called period). There are 5 period values which can be - * programmed into SENS_ULP_CP_SLEEP_CYCx_REG registers, x = 0..4. - * By default, wakeup timer will use the period set into SENS_ULP_CP_SLEEP_CYC0_REG, + * programmed into SENS_ULP_CP_SLEEP_CYCx_REG registers, x = 0..4 for ESP32, and + * one period value which can be programmed into RTC_CNTL_ULP_CP_TIMER_1_REG register for ESP32-S2. + * By default, for ESP32, wakeup timer will use the period set into SENS_ULP_CP_SLEEP_CYC0_REG, * i.e. period number 0. ULP program code can use SLEEP instruction to select * which of the SENS_ULP_CP_SLEEP_CYCx_REG should be used for subsequent wakeups. * * However, please note that SLEEP instruction issued (from ULP program) while the system * is in deep sleep mode does not have effect, and sleep cycle count 0 is used. + * + * For ESP32-s2 the SLEEP instruction not exist. Instead a WAKE instruction will be used. * * @param period_index wakeup period setting number (0 - 4) * @param period_us wakeup period, us diff --git a/tools/sdk/esp32/ld/esp32.project.ld b/tools/sdk/esp32/ld/esp32.project.ld index e36073de..6e6209e0 100644 --- a/tools/sdk/esp32/ld/esp32.project.ld +++ b/tools/sdk/esp32/ld/esp32.project.ld @@ -14,7 +14,11 @@ SECTIONS { . = ALIGN(4); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.literal EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.text EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.text.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.literal EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.text EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.text.*) + *libesp_system.a:startup.*( .rtc.text.*) + *libesp_system.a:startup.*(.rtc.text.do_core_init) + *libesp_system.a:startup.*(.rtc.text.do_secondary_init) + *libesp_system.a:startup.*(.rtc.text.start_cpu0_default) *libfreertos.a:port.*( .rtc.text.*) *libfreertos.a:queue.*( .rtc.text.*) *libfreertos.a:port.*(.rtc.text.esp_startup_start_app) @@ -50,7 +54,11 @@ SECTIONS _rtc_force_fast_start = ABSOLUTE(.); _coredump_rtc_fast_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.fast.coredump EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .rtc.fast.coredump.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.fast.coredump EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .rtc.fast.coredump.*) + *libesp_system.a:startup.*( .rtc.fast.coredump.*) + *libesp_system.a:startup.*(.rtc.fast.coredump.do_core_init) + *libesp_system.a:startup.*(.rtc.fast.coredump.do_secondary_init) + *libesp_system.a:startup.*(.rtc.fast.coredump.start_cpu0_default) *libfreertos.a:port.*( .rtc.fast.coredump.*) *libfreertos.a:queue.*( .rtc.fast.coredump.*) *libfreertos.a:port.*(.rtc.fast.coredump.esp_startup_start_app) @@ -80,7 +88,11 @@ SECTIONS /* coredump mapping */ _coredump_rtc_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.coredump EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.coredump.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.coredump EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.coredump.*) + *libesp_system.a:startup.*( .rtc.coredump.*) + *libesp_system.a:startup.*(.rtc.coredump.do_core_init) + *libesp_system.a:startup.*(.rtc.coredump.do_secondary_init) + *libesp_system.a:startup.*(.rtc.coredump.start_cpu0_default) *libfreertos.a:port.*( .rtc.coredump.*) *libfreertos.a:queue.*( .rtc.coredump.*) *libfreertos.a:port.*(.rtc.coredump.esp_startup_start_app) @@ -92,7 +104,11 @@ SECTIONS _coredump_rtc_end = ABSOLUTE(.); /* should be placed after coredump mapping */ - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.data EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.data.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.rodata EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.rodata.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.data EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.data.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .rtc.rodata EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .rtc.rodata.*) + *libesp_system.a:startup.*( .rtc.data.* .rtc.rodata.*) + *libesp_system.a:startup.*(.rtc.data.do_core_init .rtc.rodata.do_core_init) + *libesp_system.a:startup.*(.rtc.data.do_secondary_init .rtc.rodata.do_secondary_init) + *libesp_system.a:startup.*(.rtc.data.start_cpu0_default .rtc.rodata.start_cpu0_default) *libfreertos.a:port.*( .rtc.data.* .rtc.rodata.*) *libfreertos.a:queue.*( .rtc.data.* .rtc.rodata.*) *libfreertos.a:port.*(.rtc.data.esp_startup_start_app .rtc.rodata.esp_startup_start_app) @@ -211,7 +227,7 @@ SECTIONS /* Code marked as runnning out of IRAM */ _iram_text_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram1 EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram1.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram1 EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram1.*) *libapp_trace.a:SEGGER_RTT_esp32.*( .literal .literal.* .text .text.*) *libapp_trace.a:SEGGER_SYSVIEW.*( .literal .literal.* .text .text.*) *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.*( .literal .literal.* .text .text.*) @@ -350,10 +366,14 @@ SECTIONS *libesp_system.a:panic.*( .literal .literal.* .text .text.*) *libesp_system.a:panic_handler.*( .literal .literal.* .text .text.*) *libesp_system.a:reset_reason.*( .literal .literal.* .text .text.*) + *libesp_system.a:startup.*(.iram1.27.literal .iram1.26.literal .iram1.25 .iram1.27 .iram1.26) + *libesp_system.a:startup.*(.iram1.do_core_init) + *libesp_system.a:startup.*(.iram1.do_secondary_init) + *libesp_system.a:startup.*(.iram1.start_cpu0_default) *libesp_system.a:system_api.*(.literal.esp_system_abort .text.esp_system_abort) *libfreertos.a:( .literal EXCLUDE_FILE(*libfreertos.a:port.* *libfreertos.a:queue.*) .literal.* .text EXCLUDE_FILE(*libfreertos.a:port.* *libfreertos.a:queue.*) .text.*) - *libfreertos.a:port.*(.iram1.27.literal .iram1.28.literal .iram1.27 .iram1.28 .literal.pxPortInitialiseStack .literal.xPortStartScheduler .literal.vPortYieldOtherCore .literal.vPortReleaseTaskMPUSettings .literal.xPortInIsrContext .literal.xPortSysTickHandler .literal.vPortAssertIfInISR .literal.vPortSetStackWatchpoint .literal.vPortEnterCritical .literal.vPortExitCritical .literal.vApplicationStackOverflowHook .text.pxPortInitialiseStack .text.vPortEndScheduler .text.xPortStartScheduler .text.vPortYieldOtherCore .text.vPortStoreTaskMPUSettings .text.vPortReleaseTaskMPUSettings .text.xPortInIsrContext .text.xPortSysTickHandler .text.vPortAssertIfInISR .text.vPortSetStackWatchpoint .text.xPortGetTickRateHz .text.vPortEnterCritical .text.vPortExitCritical .text.vApplicationStackOverflowHook) - *libfreertos.a:queue.*( .iram1.* .literal.prvCopyDataToQueue .literal.prvCopyDataFromQueue .literal.prvNotifyQueueSetContainer .literal.xQueueGenericReset .literal.xQueueGenericCreate .literal.xQueueGetMutexHolder .literal.xQueueCreateCountingSemaphoreStatic .literal.xQueueCreateCountingSemaphore .literal.xQueueGenericSend .literal.xQueueCreateMutexStatic .literal.xQueueGiveMutexRecursive .literal.xQueueCreateMutex .literal.xQueueGenericSendFromISR .literal.xQueueGiveFromISR .literal.xQueueGenericReceive .literal.xQueueTakeMutexRecursive .literal.xQueueReceiveFromISR .literal.xQueuePeekFromISR .literal.uxQueueMessagesWaiting .literal.uxQueueSpacesAvailable .literal.uxQueueMessagesWaitingFromISR .literal.vQueueDelete .literal.xQueueIsQueueEmptyFromISR .literal.xQueueIsQueueFullFromISR .literal.vQueueWaitForMessageRestricted .literal.xQueueCreateSet .literal.xQueueAddToSet .literal.xQueueRemoveFromSet .literal.xQueueSelectFromSet .literal.xQueueSelectFromSetFromISR .text.prvCopyDataToQueue .text.prvCopyDataFromQueue .text.prvNotifyQueueSetContainer .text.xQueueGenericReset .text.xQueueGenericCreate .text.xQueueGetMutexHolder .text.xQueueCreateCountingSemaphoreStatic .text.xQueueCreateCountingSemaphore .text.xQueueGenericSend .text.xQueueCreateMutexStatic .text.xQueueGiveMutexRecursive .text.xQueueCreateMutex .text.xQueueGenericSendFromISR .text.xQueueGiveFromISR .text.xQueueGenericReceive .text.xQueueTakeMutexRecursive .text.xQueueReceiveFromISR .text.xQueuePeekFromISR .text.uxQueueMessagesWaiting .text.uxQueueSpacesAvailable .text.uxQueueMessagesWaitingFromISR .text.vQueueDelete .text.xQueueIsQueueEmptyFromISR .text.xQueueIsQueueFullFromISR .text.vQueueWaitForMessageRestricted .text.xQueueCreateSet .text.xQueueAddToSet .text.xQueueRemoveFromSet .text.xQueueSelectFromSet .text.xQueueSelectFromSetFromISR) + *libfreertos.a:port.*(.iram1.27.literal .iram1.28.literal .iram1.27 .iram1.28 .literal.pxPortInitialiseStack .literal.unlikely.vPortEndScheduler .literal.xPortStartScheduler .literal.vPortYieldOtherCore .literal.vPortReleaseTaskMPUSettings .literal.xPortInIsrContext .literal.xPortSysTickHandler .literal.vPortAssertIfInISR .literal.vPortSetStackWatchpoint .literal.vPortEnterCritical .literal.vPortExitCritical .literal.vApplicationStackOverflowHook .text.pxPortInitialiseStack .text.unlikely.vPortEndScheduler .text.xPortStartScheduler .text.vPortYieldOtherCore .text.vPortStoreTaskMPUSettings .text.vPortReleaseTaskMPUSettings .text.xPortInIsrContext .text.xPortSysTickHandler .text.vPortAssertIfInISR .text.vPortSetStackWatchpoint .text.xPortGetTickRateHz .text.vPortEnterCritical .text.vPortExitCritical .text.vApplicationStackOverflowHook) + *libfreertos.a:queue.*( .iram1.* .literal.prvCopyDataToQueue .literal.prvNotifyQueueSetContainer .literal.prvCopyDataFromQueue .literal.prvUnlockQueue .literal.xQueueGenericReset .literal.xQueueGenericCreate .literal.xQueueGetMutexHolder .literal.xQueueGetMutexHolderFromISR .literal.xQueueCreateCountingSemaphoreStatic .literal.xQueueCreateCountingSemaphore .literal.xQueueGenericSend .literal.xQueueCreateMutexStatic .literal.xQueueGiveMutexRecursive .literal.xQueueCreateMutex .literal.xQueueGenericSendFromISR .literal.xQueueGiveFromISR .literal.xQueueReceive .literal.xQueueSemaphoreTake .literal.xQueueTakeMutexRecursive .literal.xQueuePeek .literal.xQueueReceiveFromISR .literal.xQueuePeekFromISR .literal.uxQueueMessagesWaiting .literal.uxQueueSpacesAvailable .literal.uxQueueMessagesWaitingFromISR .literal.vQueueDelete .literal.xQueueIsQueueEmptyFromISR .literal.xQueueIsQueueFullFromISR .literal.vQueueWaitForMessageRestricted .literal.xQueueCreateSet .literal.xQueueAddToSet .literal.xQueueRemoveFromSet .literal.xQueueSelectFromSet .literal.xQueueSelectFromSetFromISR .text.prvCopyDataToQueue .text.prvNotifyQueueSetContainer .text.prvCopyDataFromQueue .text.prvUnlockQueue .text.xQueueGenericReset .text.xQueueGenericCreate .text.xQueueGetMutexHolder .text.xQueueGetMutexHolderFromISR .text.xQueueCreateCountingSemaphoreStatic .text.xQueueCreateCountingSemaphore .text.xQueueGenericSend .text.xQueueCreateMutexStatic .text.xQueueGiveMutexRecursive .text.xQueueCreateMutex .text.xQueueGenericSendFromISR .text.xQueueGiveFromISR .text.xQueueReceive .text.xQueueSemaphoreTake .text.xQueueTakeMutexRecursive .text.xQueuePeek .text.xQueueReceiveFromISR .text.xQueuePeekFromISR .text.uxQueueMessagesWaiting .text.uxQueueSpacesAvailable .text.uxQueueMessagesWaitingFromISR .text.vQueueDelete .text.xQueueIsQueueEmptyFromISR .text.xQueueIsQueueFullFromISR .text.vQueueWaitForMessageRestricted .text.xQueueCreateSet .text.xQueueAddToSet .text.xQueueRemoveFromSet .text.xQueueSelectFromSet .text.xQueueSelectFromSetFromISR) *libfreertos.a:port.*(.iram1.esp_startup_start_app) *libfreertos.a:port.*(.iram1.esp_startup_start_app_other_cores) *libfreertos.a:port.*(.iram1.main_task) @@ -373,6 +393,7 @@ SECTIONS *libhal.a:twai_hal_iram.*( .iram1 .iram1.*) *libhal.a:uart_hal_iram.*( .iram1 .iram1.*) *libhal.a:wdt_hal_iram.*( .literal .literal.* .text .text.*) + *libheap.a:heap_tlsf.*( .literal .literal.* .text .text.*) *libheap.a:multi_heap.*( .literal .literal.* .text .text.*) *libheap.a:multi_heap_poisoning.*( .literal .literal.* .text .text.*) *liblog.a:log.*(.literal.esp_log_write .text.esp_log_write) @@ -434,7 +455,11 @@ SECTIONS /* coredump mapping */ _coredump_dram_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .dram1.coredump EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .dram1.coredump.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .dram1.coredump EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .dram1.coredump.*) + *libesp_system.a:startup.*( .dram1.coredump.*) + *libesp_system.a:startup.*(.dram1.coredump.do_core_init) + *libesp_system.a:startup.*(.dram1.coredump.do_secondary_init) + *libesp_system.a:startup.*(.dram1.coredump.start_cpu0_default) *libfreertos.a:port.*( .dram1.coredump.*) *libfreertos.a:queue.*( .dram1.coredump.*) *libfreertos.a:port.*(.dram1.coredump.esp_startup_start_app) @@ -450,7 +475,7 @@ SECTIONS KEEP (*(SORT(.esp_system_init_fn) SORT(.esp_system_init_fn.*))) _esp_system_init_fn_array_end = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .data EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .data.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .dram1 EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .dram1.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .data EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .data.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .dram1 EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .dram1.*) *libapp_trace.a:SEGGER_RTT_esp32.*( .rodata .rodata.*) *libapp_trace.a:SEGGER_SYSVIEW.*( .rodata .rodata.*) *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.*( .rodata .rodata.*) @@ -588,6 +613,10 @@ SECTIONS *libesp_system.a:panic.*( .rodata .rodata.*) *libesp_system.a:panic_handler.*( .rodata .rodata.*) *libesp_system.a:reset_reason.*( .rodata .rodata.*) + *libesp_system.a:startup.*(.data.g_startup_fn .dram1.*) + *libesp_system.a:startup.*(.data.do_core_init .dram1.do_core_init) + *libesp_system.a:startup.*(.data.do_secondary_init .dram1.do_secondary_init) + *libesp_system.a:startup.*(.data.start_cpu0_default .dram1.start_cpu0_default) *libesp_system.a:system_api.*(.rodata.esp_system_abort) *libfreertos.a:port.*( .data.* .dram1.*) *libfreertos.a:queue.*( .data.* .dram1.*) @@ -609,6 +638,7 @@ SECTIONS *libhal.a:twai_hal_iram.*( .data .data.* .dram1 .dram1.*) *libhal.a:uart_hal_iram.*( .data .data.* .dram1 .dram1.*) *libhal.a:wdt_hal_iram.*( .rodata .rodata.*) + *libheap.a:heap_tlsf.*( .rodata .rodata.*) *libheap.a:multi_heap.*( .rodata .rodata.*) *libheap.a:multi_heap_poisoning.*( .rodata .rodata.*) *liblog.a:log.*(.rodata.esp_log_write) @@ -668,7 +698,11 @@ SECTIONS . = ALIGN (4); _nimble_bss_end = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .bss EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .bss.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) COMMON) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .bss EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .bss.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) COMMON) + *libesp_system.a:startup.*(.bss.ob$11551 .bss.s_system_full_inited .bss.s_system_inited .bss.g_startup_time) + *libesp_system.a:startup.*(.bss.do_core_init) + *libesp_system.a:startup.*(.bss.do_secondary_init) + *libesp_system.a:startup.*(.bss.start_cpu0_default) *libfreertos.a:port.*(.bss.port_uxOldInterruptState .bss.port_uxCriticalNesting .bss.port_interruptNesting .bss.port_xSchedulerRunning) *libfreertos.a:queue.*( .bss.*) *libfreertos.a:port.*(.bss.esp_startup_start_app) @@ -705,12 +739,16 @@ SECTIONS *(.rodata_desc .rodata_desc.*) /* Should be the first. App version info. DO NOT PUT ANYTHING BEFORE IT! */ *(.rodata_custom_desc .rodata_custom_desc.*) /* Should be the second. Custom app version info. DO NOT PUT ANYTHING BEFORE IT! */ - *(EXCLUDE_FILE(*libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libxtensa.a:stdatomic.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libphy.a) .rodata EXCLUDE_FILE(*libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log_freertos.* *liblog.a:log.* *libgcc.a:_divsf3.* *libesp_event.a:esp_event.* *libesp_event.a:default_event_loop.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libesp_system.a:system_api.* *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libxtensa.a:stdatomic.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.* *libphy.a) .rodata.*) + *(EXCLUDE_FILE(*libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libxtensa.a:stdatomic.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libphy.a) .rodata EXCLUDE_FILE(*libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log_freertos.* *liblog.a:log.* *libgcc.a:_divsf3.* *libesp_event.a:esp_event.* *libesp_event.a:default_event_loop.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libesp_system.a:startup.* *libesp_system.a:system_api.* *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *libsoc.a:rtc_init.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libxtensa.a:stdatomic.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.* *libphy.a) .rodata.*) *libesp_event.a:default_event_loop.*(.rodata.esp_event_loop_create_default.str1.4 .rodata.esp_event_send_to_default_loop) - *libesp_event.a:esp_event.*(.rodata.base_node_add_handler.str1.4 .rodata.loop_node_add_handler.str1.4 .rodata.esp_event_loop_create.str1.4 .rodata.esp_event_loop_run.str1.4 .rodata.esp_event_loop_run_task.str1.4 .rodata.esp_event_handler_register_with_internal.str1.4 .rodata.esp_event_handler_unregister_with_internal.str1.4 .rodata.__func__$9037 .rodata.__func__$9024 .rodata.__func__$8991 .rodata.__func__$8959 .rodata.__func__$8934 .rodata.__func__$8893 .rodata.__func__$8884) + *libesp_event.a:esp_event.*(.rodata.base_node_add_handler.str1.4 .rodata.loop_node_add_handler.str1.4 .rodata.esp_event_loop_create.str1.4 .rodata.esp_event_loop_run.str1.4 .rodata.esp_event_loop_run_task.str1.4 .rodata.esp_event_handler_register_with_internal.str1.4 .rodata.esp_event_handler_unregister_with_internal.str1.4 .rodata.__func__$9170 .rodata.__func__$9157 .rodata.__func__$9124 .rodata.__func__$9092 .rodata.__func__$9067 .rodata.__func__$9026 .rodata.__func__$9017) + *libesp_system.a:startup.*(.rodata.start_cpu0_default.str1.4 .rodata.__func__$11587) *libesp_system.a:system_api.*(.rodata.esp_get_idf_version.str1.4) - *libfreertos.a:port.*(.rodata.main_task.str1.4 .rodata.vPortAssertIfInISR.str1.4 .rodata.vPortEnterCritical.str1.4 .rodata.vPortExitCritical.str1.4 .rodata.vApplicationStackOverflowHook.str1.4 .rodata.esp_startup_start_app.str1.4 .rodata.__func__$5469 .rodata.__func__$5482 .rodata.__func__$4347 .rodata.__func__$4334 .rodata.__FUNCTION__$5431) - *libfreertos.a:queue.*(.rodata.prvNotifyQueueSetContainer.str1.4 .rodata.__FUNCTION__$5362 .rodata.__FUNCTION__$5352 .rodata.__FUNCTION__$5332 .rodata.__FUNCTION__$5327 .rodata.__FUNCTION__$5321 .rodata.__FUNCTION__$5315 .rodata.__FUNCTION__$5309 .rodata.__FUNCTION__$5300 .rodata.__FUNCTION__$5290 .rodata.__FUNCTION__$5279 .rodata.__FUNCTION__$5271 .rodata.__FUNCTION__$5398 .rodata.__FUNCTION__$5260 .rodata.__FUNCTION__$5249 .rodata.__FUNCTION__$5243 .rodata.__FUNCTION__$5236 .rodata.__FUNCTION__$5229 .rodata.__FUNCTION__$5195 .rodata.__FUNCTION__$5185 .rodata.__FUNCTION__$5176) + *libesp_system.a:startup.*(.rodata.do_core_init) + *libesp_system.a:startup.*(.rodata.do_secondary_init) + *libesp_system.a:startup.*(.rodata.start_cpu0_default) + *libfreertos.a:port.*(.rodata.main_task.str1.4 .rodata.vPortAssertIfInISR.str1.4 .rodata.vPortEnterCritical.str1.4 .rodata.vPortExitCritical.str1.4 .rodata.vApplicationStackOverflowHook.str1.4 .rodata.esp_startup_start_app.str1.4 .rodata.__func__$5604 .rodata.__func__$5617 .rodata.__func__$4432 .rodata.__func__$4419 .rodata.__FUNCTION__$5566) + *libfreertos.a:queue.*(.rodata.prvNotifyQueueSetContainer.str1.4 .rodata.__FUNCTION__$5560 .rodata.__FUNCTION__$5550 .rodata.__FUNCTION__$5513 .rodata.__FUNCTION__$5508 .rodata.__FUNCTION__$5502 .rodata.__FUNCTION__$5496 .rodata.__FUNCTION__$5490 .rodata.__FUNCTION__$5479 .rodata.__FUNCTION__$5468 .rodata.__FUNCTION__$5455 .rodata.__FUNCTION__$5444 .rodata.__FUNCTION__$5433 .rodata.__FUNCTION__$5424 .rodata.__FUNCTION__$5597 .rodata.__FUNCTION__$5412 .rodata.__FUNCTION__$5401 .rodata.__FUNCTION__$5395 .rodata.__FUNCTION__$5388 .rodata.__FUNCTION__$5381 .rodata.__FUNCTION__$5375 .rodata.__FUNCTION__$5342 .rodata.__FUNCTION__$5332 .rodata.__FUNCTION__$5323) *libfreertos.a:port.*(.rodata.esp_startup_start_app) *libfreertos.a:port.*(.rodata.esp_startup_start_app_other_cores) *libfreertos.a:port.*(.rodata.main_task) @@ -781,10 +819,14 @@ SECTIONS _stext = .; _text_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libxt_hal.a *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .literal EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log.* *liblog.a:log_freertos.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libesp_event.a:default_event_loop.* *libesp_event.a:esp_event.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libxt_hal.a *libesp_system.a:system_api.* *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:rtc_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .literal.* EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libxt_hal.a *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .text EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log.* *liblog.a:log_freertos.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libesp_event.a:default_event_loop.* *libesp_event.a:esp_event.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libxt_hal.a *libesp_system.a:system_api.* *libesp_system.a:panic_handler.* *libesp_system.a:reset_reason.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:rtc_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .text.* EXCLUDE_FILE(*libpp.a *libnet80211.a *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .wifi0iram EXCLUDE_FILE(*libpp.a *libnet80211.a *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .wifi0iram.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .wifirxiram EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .wifirxiram.*) + *(EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libxt_hal.a *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .literal EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log.* *liblog.a:log_freertos.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libesp_event.a:default_event_loop.* *libesp_event.a:esp_event.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libxt_hal.a *libesp_system.a:startup.* *libesp_system.a:system_api.* *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:rtc_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .literal.* EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libxt_hal.a *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .text EXCLUDE_FILE(*libesp_ringbuf.a *libgcov.a *libapp_trace.a:SEGGER_RTT_esp32.* *libapp_trace.a:SEGGER_SYSVIEW_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW_Config_FreeRTOS.* *libapp_trace.a:SEGGER_SYSVIEW.* *libapp_trace.a:app_trace.* *libapp_trace.a:app_trace_util.* *liblog.a:log.* *liblog.a:log_freertos.* *libgcc.a:lib2funcs.* *libgcc.a:_divsf3.* *libesp_event.a:default_event_loop.* *libesp_event.a:esp_event.* *libc.a:lib_a-tzvars.* *libc.a:lib_a-isblank.* *libc.a:lib_a-sysopen.* *libc.a:lib_a-time.* *libc.a:lib_a-rand_r.* *libc.a:lib_a-tzset.* *libc.a:lib_a-raise.* *libc.a:lib_a-sysread.* *libc.a:lib_a-systimes.* *libc.a:lib_a-strlwr.* *libc.a:lib_a-gmtime.* *libc.a:lib_a-sf_nan.* *libc.a:lib_a-strcasecmp.* *libc.a:lib_a-strftime.* *libc.a:lib_a-wbuf.* *libc.a:lib_a-strnlen.* *libc.a:lib_a-close.* *libc.a:lib_a-strupr.* *libc.a:lib_a-bzero.* *libc.a:lib_a-gmtime_r.* *libc.a:lib_a-memchr.* *libc.a:lib_a-isdigit.* *libc.a:lib_a-isupper.* *libc.a:lock.* *libc.a:lib_a-itoa.* *libc.a:lib_a-asctime_r.* *libc.a:lib_a-wctomb_r.* *libc.a:lib_a-fclose.* *libc.a:lib_a-strncpy.* *libc.a:lib_a-open.* *libc.a:lib_a-lcltime_r.* *libc.a:lib_a-syswrite.* *libc.a:creat.* *libc.a:lib_a-tolower.* *libc.a:lib_a-strlcpy.* *libc.a:lib_a-abs.* *libc.a:lib_a-system.* *libc.a:lib_a-strcspn.* *libc.a:isatty.* *libc.a:lib_a-gettzinfo.* *libc.a:lib_a-s_fpclassify.* *libc.a:lib_a-tzset_r.* *libc.a:lib_a-strncmp.* *libc.a:lib_a-strcat.* *libc.a:lib_a-strndup_r.* *libc.a:lib_a-strcmp.* *libc.a:lib_a-memccpy.* *libc.a:lib_a-fwalk.* *libc.a:lib_a-tzlock.* *libc.a:lib_a-strncasecmp.* *libc.a:lib_a-refill.* *libc.a:lib_a-longjmp.* *libc.a:lib_a-memrchr.* *libc.a:lib_a-toascii.* *libc.a:lib_a-ctime.* *libc.a:lib_a-strspn.* *libc.a:lib_a-ungetc.* *libc.a:lib_a-strndup.* *libc.a:lib_a-strtoul.* *libc.a:lib_a-strtol.* *libc.a:lib_a-memcpy.* *libc.a:lib_a-isprint.* *libc.a:lib_a-sbrk.* *libc.a:lib_a-strchr.* *libc.a:lib_a-strdup.* *libc.a:lib_a-isspace.* *libc.a:lib_a-isalpha.* *libc.a:lib_a-isascii.* *libc.a:lib_a-rand.* *libc.a:lib_a-strncat.* *libc.a:lib_a-creat.* *libc.a:lib_a-read.* *libc.a:lib_a-memcmp.* *libc.a:lib_a-fflush.* *libc.a:lib_a-fputwc.* *libc.a:lib_a-toupper.* *libc.a:lib_a-quorem.* *libc.a:lib_a-div.* *libc.a:lib_a-tzcalc_limits.* *libc.a:lib_a-labs.* *libc.a:lib_a-strtok_r.* *libc.a:lib_a-strcpy.* *libc.a:lib_a-iscntrl.* *libc.a:lib_a-mktime.* *libc.a:lib_a-strdup_r.* *libc.a:lib_a-strstr.* *libc.a:lib_a-strsep.* *libc.a:lib_a-stdio.* *libc.a:lib_a-isgraph.* *libc.a:lib_a-wsetup.* *libc.a:lib_a-timelocal.* *libc.a:lib_a-strlcat.* *libc.a:lib_a-islower.* *libc.a:lib_a-ldiv.* *libc.a:lib_a-lcltime.* *libc.a:lib_a-environ.* *libc.a:lib_a-sccl.* *libc.a:lib_a-getenv_r.* *libc.a:lib_a-sysclose.* *libc.a:lib_a-strcasestr.* *libc.a:lib_a-ctime_r.* *libc.a:lib_a-syssbrk.* *libc.a:lib_a-setjmp.* *libc.a:lib_a-isalnum.* *libc.a:lib_a-strcoll.* *libc.a:lib_a-memmove.* *libc.a:lib_a-rshift.* *libc.a:lib_a-envlock.* *libc.a:lib_a-strlen.* *libc.a:lib_a-wcrtomb.* *libc.a:lib_a-strptime.* *libc.a:lib_a-findfp.* *libc.a:lib_a-impure.* *libc.a:lib_a-fvwrite.* *libc.a:lib_a-ispunct.* *libc.a:lib_a-utoa.* *libc.a:lib_a-srand.* *libc.a:lib_a-month_lengths.* *libc.a:lib_a-asctime.* *libc.a:lib_a-strrchr.* *libc.a:lib_a-makebuf.* *libc.a:lib_a-atoi.* *libc.a:lib_a-ctype_.* *libc.a:lib_a-memset.* *libc.a:lib_a-atol.* *libheap.a:multi_heap.* *libheap.a:multi_heap_poisoning.* *libheap.a:heap_tlsf.* *libxt_hal.a *libesp_system.a:startup.* *libesp_system.a:system_api.* *libesp_system.a:reset_reason.* *libesp_system.a:panic_handler.* *libesp_system.a:panic.* *libesp_common.a:esp_err.* *libspi_flash.a:spi_flash_chip_mxic.* *libspi_flash.a:spi_flash_chip_issi.* *libspi_flash.a:spi_flash_rom_patch.* *libspi_flash.a:spi_flash_chip_gd.* *libspi_flash.a:memspi_host_driver.* *libspi_flash.a:spi_flash_chip_generic.* *librtc.a *libsoc.a:rtc_init.* *libsoc.a:cpu_util.* *libsoc.a:rtc_sleep.* *libsoc.a:rtc_pm.* *libsoc.a:rtc_clk.* *libsoc.a:lldesc.* *libsoc.a:rtc_wdt.* *libsoc.a:rtc_time.* *libsoc.a:rtc_periph.* *libxtensa.a:stdatomic.* *libxtensa.a:eri.* *libnewlib.a:heap.* *libnewlib.a:abort.* *libhal.a:spi_flash_hal_iram.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libhal.a:i2c_hal_iram.* *libhal.a:soc_hal.* *libhal.a:spi_flash_hal_gpspi.* *libhal.a:cpu_hal.* *libhal.a:ledc_hal_iram.* *libhal.a:spi_slave_hal_iram.* *libhal.a:systimer_hal.* *libhal.a:wdt_hal_iram.* *libhal.a:spi_hal_iram.* *libfreertos.a) .text.* EXCLUDE_FILE(*libpp.a *libnet80211.a *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .wifi0iram EXCLUDE_FILE(*libpp.a *libnet80211.a *libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .wifi0iram.* EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .wifirxiram EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .wifirxiram.*) *libesp_event.a:default_event_loop.*(.literal.esp_event_handler_register .literal.esp_event_handler_instance_register .literal.esp_event_handler_unregister .literal.esp_event_handler_instance_unregister .literal.esp_event_post .literal.esp_event_loop_create_default .literal.esp_event_loop_delete_default .literal.esp_event_send_to_default_loop .text.esp_event_handler_register .text.esp_event_handler_instance_register .text.esp_event_handler_unregister .text.esp_event_handler_instance_unregister .text.esp_event_post .text.esp_event_loop_create_default .text.esp_event_loop_delete_default .text.esp_event_send_to_default_loop) *libesp_event.a:esp_event.*(.literal.handler_instances_add .literal.base_node_add_handler .literal.loop_node_add_handler .literal.handler_instances_remove .literal.handler_instances_remove_all$isra$1 .literal.esp_event_loop_create .literal.esp_event_loop_run .literal.esp_event_loop_run_task .literal.esp_event_loop_delete .literal.esp_event_handler_register_with_internal .literal.esp_event_handler_register_with .literal.esp_event_handler_instance_register_with .literal.esp_event_handler_unregister_with_internal .literal.esp_event_handler_unregister_with .literal.esp_event_handler_instance_unregister_with .literal.esp_event_post_to .text.handler_instances_add .text.base_node_add_handler .text.loop_node_add_handler .text.handler_instances_remove .text.handler_instances_remove_all$isra$1 .text.esp_event_loop_create .text.esp_event_loop_run .text.esp_event_loop_run_task .text.esp_event_loop_delete .text.esp_event_handler_register_with_internal .text.esp_event_handler_register_with .text.esp_event_handler_instance_register_with .text.esp_event_handler_unregister_with_internal .text.esp_event_handler_unregister_with .text.esp_event_handler_instance_unregister_with .text.esp_event_post_to .text.esp_event_dump) + *libesp_system.a:startup.*(.literal.do_system_init_fn .literal.esp_startup_start_app_other_cores_default .text.do_system_init_fn .text.esp_startup_start_app_other_cores_default .wifi0iram.* .wifirxiram.*) *libesp_system.a:system_api.*(.literal.esp_register_shutdown_handler .literal.esp_unregister_shutdown_handler .literal.esp_get_free_heap_size .literal.esp_get_free_internal_heap_size .literal.esp_get_minimum_free_heap_size .literal.esp_get_idf_version .text.esp_register_shutdown_handler .text.esp_unregister_shutdown_handler .text.esp_get_free_heap_size .text.esp_get_free_internal_heap_size .text.esp_get_minimum_free_heap_size .text.esp_get_idf_version) + *libesp_system.a:startup.*(.literal.do_core_init .text.do_core_init .wifi0iram.do_core_init .wifirxiram.do_core_init) + *libesp_system.a:startup.*(.literal.do_secondary_init .text.do_secondary_init .wifi0iram.do_secondary_init .wifirxiram.do_secondary_init) + *libesp_system.a:startup.*(.literal.start_cpu0_default .text.start_cpu0_default .wifi0iram.start_cpu0_default .wifirxiram.start_cpu0_default) *libfreertos.a:port.*( .wifi0iram.* .wifirxiram.*) *libfreertos.a:queue.*( .wifi0iram.* .wifirxiram.*) *libfreertos.a:port.*(.literal.esp_startup_start_app .text.esp_startup_start_app .wifi0iram.esp_startup_start_app .wifirxiram.esp_startup_start_app) @@ -826,7 +868,11 @@ SECTIONS /* coredump mapping */ _coredump_iram_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.data.coredump EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram.data.coredump.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.data.coredump EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram.data.coredump.*) + *libesp_system.a:startup.*( .iram.data.coredump.*) + *libesp_system.a:startup.*(.iram.data.coredump.do_core_init) + *libesp_system.a:startup.*(.iram.data.coredump.do_secondary_init) + *libesp_system.a:startup.*(.iram.data.coredump.start_cpu0_default) *libfreertos.a:port.*( .iram.data.coredump.*) *libfreertos.a:queue.*( .iram.data.coredump.*) *libfreertos.a:port.*(.iram.data.coredump.esp_startup_start_app) @@ -838,7 +884,11 @@ SECTIONS _coredump_iram_end = ABSOLUTE(.); /* should be placed after coredump mapping */ - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.data EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .iram.data.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.data EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:queue.* *libfreertos.a:port.*) .iram.data.*) + *libesp_system.a:startup.*( .iram.data.*) + *libesp_system.a:startup.*(.iram.data.do_core_init) + *libesp_system.a:startup.*(.iram.data.do_secondary_init) + *libesp_system.a:startup.*(.iram.data.start_cpu0_default) *libfreertos.a:port.*( .iram.data.*) *libfreertos.a:queue.*( .iram.data.*) *libfreertos.a:port.*(.iram.data.esp_startup_start_app) @@ -856,7 +906,11 @@ SECTIONS . = ALIGN(4); _iram_bss_start = ABSOLUTE(.); - *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.bss EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram.bss.*) + *(EXCLUDE_FILE(*libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.*) .iram.bss EXCLUDE_FILE(*libesp_system.a:startup.* *libhal.a:uart_hal_iram.* *libhal.a:twai_hal_iram.* *libfreertos.a:port.* *libfreertos.a:queue.*) .iram.bss.*) + *libesp_system.a:startup.*( .iram.bss.*) + *libesp_system.a:startup.*(.iram.bss.do_core_init) + *libesp_system.a:startup.*(.iram.bss.do_secondary_init) + *libesp_system.a:startup.*(.iram.bss.start_cpu0_default) *libfreertos.a:port.*( .iram.bss.*) *libfreertos.a:queue.*( .iram.bss.*) *libfreertos.a:port.*(.iram.bss.esp_startup_start_app) diff --git a/tools/sdk/esp32/lib/libapp_trace.a b/tools/sdk/esp32/lib/libapp_trace.a index 634912a90fe44f6c3ea7664cd853317321d8b260..b06904e5f671b5687e4c81797e0286320907455c 100644 GIT binary patch delta 14175 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 O21!7C`(Go*({liBnXE7X delta 13925 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 diff --git a/tools/sdk/esp32/lib/libapp_update.a b/tools/sdk/esp32/lib/libapp_update.a index 93e460a7e6707cc69d514375bc2f750ebcb606fa..6e8c93f16f4b09e31fad2f3c88c91296a4a8299d 100644 GIT binary patch delta 296 zcmeyio#WefjtSE2CdQ_QMrOtvmHsn9*oG$41lH=o5 z%#2Jd7^W9)VN}>G{;1}%5s0f-l%JAVlBkEI$k?1gFR8d#4~y~B8@4ivFj<;FXfuoL zAGb0}h{2q?UEmC3JR?U^Vq#jFg^9)V^0SQUc1Ffl24+^K#tcy4mtUr!V5DGVU}OLm yDKpVC)=fz*(={|TGt^BtHZ@N)GB-Cf&`rrKDyf`&ku`7f0%n%&e&-lh_yPbn1zLFk delta 324 zcmeyio#WefjtSE2M&<^V<|bwvmHsn9*apVa1lH=o5 z%nS{U8KxI*VN}>G{;1}19Eht|l%JAVlBkEI$iRp}FR8d#51a9r$_-2{8L)^N8*l%( zl~F<>ZU3d6O3~vuyV}$GE~509R{ceE%O)_lFPp&9zH9<( z`?3ja?aL;xw=bK((Y|Z~XZx}VTY=U6> zvI#=%%O(i7FPk9JzHEYM`?3jQ?aL;Jw=bI@(Y|bgWc#uSQtitoNVhMWAk)5Vf^7S; z33BbrCdjuho1oCXY=UC@vI$D<%O)tdFPos!zHEYO`?3jY?aL;pw=bKZ(Y|bgX8W=U MTHBXR(7yE?08*Y?t^fc4 diff --git a/tools/sdk/esp32/lib/libbootloader_support.a b/tools/sdk/esp32/lib/libbootloader_support.a index 990b7f9834d177647f1d052a835459a77113b91d..65cea384b9413d4127112d4fa9a7c42b8afd6658 100644 GIT binary patch delta 83990 zcmeC1tU0G!Yl1YpiLt4nk(tRvCC&OD3=Eu@n9)9l0T*U+UBkdE*FYFQI>W%Cd4ho@ z^8*;OZhgRjf%A|A**!TJuwjn00}ODyRfK_)=?4UtEMVZofw{P6Fu<|12m==cPj|Ft zlGq%;D9p}iIXQ)66HifMUP^v$d}?ulvC(8^&TCTo1_~&^(98fFT875c7ihAGv6@>N znwU)H=Tc|XrJo*d_lBSdU(^MJlCvQztsCO4y63W0JvO^@%X%8Yz#zcHz`(;aIXClEy(tp|gCP?GgWfA+1_s6? zuNH0whHxeZhF~TJ26KCU1_s6y#fE4GhDs&|hH@qb28(QvSgPOwHU3v(m>3vLj~XyAFs6e;k!hlfQBi6M17ijk$k;7R3=Hd-7#J)Q7#J9~L@_WJ zWiqHSmJ5Mg`Iw1;;XV@sgH;0q1A}>!83O}jg(k>eHf9C}Cg#a^vb0!rm>C$L_!~4kxa{J`v8HGWPVfKqO4sudlm); zYZe9u?;Ft!3@I!O3`r~u48BjI8NlFrECYl0Q&4EKFff!){*c$sI)#OSp=WYUz75|r zCNclbvJ4C$EH!`fvHZo73T%GDVhju*tfa~2H-VXf0fZIRH#ZghVqs*MTwQvG&4Ph} z!HQuz<6{ot$?;rlo1@E;_!ZtTaC$;fc?qthRJ>J35R&JXrJgDDa_5s96O#O_97 z_am{_Be6Flv2P%;?;x@NK-l#Vn;97x7@>{;WgJF6h_EzB9LiQgVyhvs4UpI-NNj5) zwmlL%7Kxq6SkJ%!vn&HiA_s|GhQzKyVmBhOTanoPNbJc->{&?cc`!D}|DYlO=7_y8 z2?hp+BS`EMNbE~U>}yEuyGZPZNbJ{0?Dt6QZ;T8KqA-hpAxQ{KfB%q4TveJ05jgTl zY*3lR$P0-f%jx;Q*u?8yK+;elQ1Jwljz$tsLSm;Ou|Y)_OnohqIH<^iiBCZipN+(x z4`B;|9Rn)BU>bHzm;b}A%y?${|6gq4iJ;;OCi5Jk1+3#e68kd}8&s;n)N?U2Fu>S? zNNiCgw$AkU-)!R3o367-@VX$0drY4%!>C-JjU<$h#4bZ(S0S-MMJCM3iAdt0@)MM~ zL2h3G5(m}U3=9nGk=UD&*q~CDk(0p>q@Lk4k_4!5g&Fh!NgPzv!oCR@1{)|VaPX<|hp6SAtjOC0e)4MGh z{TUBTzYXI3nI3G#=+BrieKCj%nEn|=ZJ6$C%~;NOV)|}tMt{bN>D)Gq!Hnmo$J;O} zv(DgSWOy;X-G)(_iM3$*8XHD6#)j#aZ5Y)VL#O`+Q6|%sZ5h=Wb*FoSD4prWAnM@s z*|v=8Oxt!&H_%`an|{ldQGn^r&glZO%wj^8An$?$1VV`H0*g=AvSSorjF@h1$EeQe zGd&qZt(o2pq8z4g22m5H-?n2^XIr4o$l%X1eSsE-$aEQdMnOo+8`_rK?q$y?5>cU_1JKn44iR|Cvp;YrhFVBpmRbHIM()dI75c=DMT z7C+fV_@Lb19N0}7DzHM@als(3Op5Z3=A&3 z24J2FkFo><1Fs>NqrtOAiGhLF2+YypnE~P$gEW*OlVpatN8ZakC^Yd!9=DjuyaW;8c%oRW!IEXv1VXk zUFVlbFFGVEnu%QT%)heK5vRHw5rGcYjlDKJ!lTIOISER0{c85nq8 zaWOF5W}cp?%q%wDUXO*felw^UcSGEkfq{XQg*}Lofq@y!W@5JxU|?YO1c@`UsR}SK zurhL7;bUN6jsXcVv7Y5-U|@L!67ZJ<>)>GRTsK z<6-G~kS4Z&AnzT4m=ev%zz~3BiUT790~bp=C}2WCW-)T4urn|)ConQFunB+!j!A=* zvvmnFFtA<*o5A*wmw|!xnoKgt0r4O;Hz4ddkeWL(U^@?ieD}T{!g&YM@ByNz2PE+W z!u|;g>z@#IDIWs^>u=crkfAmpL;pb7s-V#Q4>pJUB`X61D+42h!wJ&B#0b{SEf3NW z%_yY9z`(%m01C}Mkg|FP25x1Lx_%Ikfr0xmI|Bpj1V$N9FmNvgX_^S-q=DQr8EV`^ zHU zfuWvtDb(X)Anz@Qax_7l6;RG%koQ(XIldq#tb%etIg52QG<+U_oUjJUaRMc^g-j6N zfm*h#i=mt}P{LaZ;jp`a+oH_SG|SJxypoxLfja|a;R+_{oghvxD6UpPIP9Pl^#Z0` zo`LxWNX1-`lh!iHfF!v8fTC;zgaghI;w(_pxfqz)Sr{0&LqNg1nMoQX!Cnta51@(* zoN1UDm^DF4rh{T?8xy!j@=QTePobPOAWuDmaCo?nfOve&f}lc!dltxW2`FbV zD1AsnISn9=1~VkokAsZUgmSDwGFnj1R*;M~m{ZTdy#?e89Wajp9Ab{F3=F&s%x0_% z4BUr7zA|8z0f}+vg7g_eITu0NjG!D9kTPQ^XBWsW6DWrn6ndsm&UJ1E239jDXFtdr z_2y9CDNs(afN~;0nk=E5YoG*R1?6~xV#XTE2>_)y8z`p&6w0`zzvm&1sTl)l~G}5U|{2~ zhf0|je&t<73*;h1_l-emSvpv3=ABrnL+wkc7se_FWnDz8@o9l z0|QG869WUMn4~Eu1B2)vCI$uxPJNC=ATuKb85lSXg+XivvG{BTP9w1SEFzP585lT? zxIvb2h&O7#KuOaWXJ)T7uir3?i4985lUNz#JA4F@6RHPHQlSLnM=(fq~No z%;6CU;bLImv;}hnM7%i|7&z^~91#&v^N`aX#HnYH5MgCwVBmBB@fc)8R6v>>!5jq! z@%ao43>=J{UK|Y|N5~2=FmQTvf!GWp-FyrToIac&PJ@IuNXCx~CN;n%RkXS_SfI>fl^9D$( z$TyJBA{E|oF)(y6aIt{QV}HTLzyQMFx=Wsci{&f}sI3MHFwt533=ABcr5rNc3=ATN zK%OrX1hE-JVnA*!huFbT&&2{tIHGnO3=9gKGdZSmGcbt77cg+n5(29hi!Wl}oDGRw zvG{TZ&N*N10*VW1EivY5v-m;vK-{>T1IXweg*~> z$+@85sAUuZ@i-)NKw(_VC|hjHA;7?(A~^??=DHZUb_y^sXh_z9 z9Mc2Qs3X}0@^L?eXCQe7lolpHEHsh)!oa}5If+qtzW@V+g=95I`l}fs17pHv@xchyVja2Ip1| zCq8KWZiB>cJvf55g9Dre9Kk!lY-j}U1ji{ff_H&A&YL4?*#D zm17DE=PtXmTHaj#9);m{~@Ua^`5}R z9|IRl4j%)9)H+c68{};yMIbSlq6r{HAfrK{fl$N1#j=Hu0aDw+ zz#y;({mCFX8I-ovAc>hp@-C>P zQHP{04hAk3P>SPX0h!Ea!2+rS>=`-QL8i!n!rg&U2*hEKd;y9%M+lEiG7)5?6QdBQ z|I8y<1PW4DMwKSed>;clNN_r+e6nSzXJBAr;FINLU=ZMpVC1+5GFJ^$yhk%aY8Ocd zkT+srj{6GA=&=wv4#|5UJL4EdK-zd1xL82-5uXPy149635+g^i00V>MFOWl0A-RD; z(gEbRG)8dbvPd3gV5n!{OowoJB-uf6odMyANbUe>%!HUCBgqNkWkFn_BAEh8&Dju@ z8j^h=LvtWJ1IbX3n{pvM3rR6h8IlL#IY{b*Dwli+&x3(Ifsvt}VJ@ip2es?j8DxwE zLFG3{go_0fK(e5s2ORSZTrBGZK#~spAQDth%7O|FSX#LQmOKq6pYSs<7nwCogP3nouf?IT;d6PMX zf(#7umqGJ9;#Q!f&ln_smxqCYQQQ+epA)PA8jA-hQe=!`Dq>J%jAklkU|>*cWMg0e zVeZ9j(-k9_6{f$N%c!{BYc7io2hls<)_OmW8s|szMWlc`@_G?F-+4VzOnF3jbf?WdY@%G6I*d+Rcd_6 zbip=u(dnz0S-ht^C$Y&)muF$Im|n=jBEk)n78Zr+jjNf2 zxBq2fDP-JU&BhYQIQ`*Q4$eR^XxyV&#(hHMhue|EUTvTF67|cK9`S0f^qtXUmSANAM>+RPA~Y) z!885NZw`*hYme|uclggDGkt>q3)l3u|5@axU%1WWF#XPd7J=!1{XJqwu0*NvTgGdGjb_NCp5m2H6HK0Mm zHc)YptS}p>0n5N3z`(!&VvB&(f|4oQG*(uvdeDpjBPh~9%@dF?4@eUOgCG(c^dZND-yd4i9HR8 z4eFr79C`pr{0tHsJmm>>=o3(>3e)fbNs%CEz748K7KyEi#5P4@CnK?Qk=T_;Z15~3 z)Xa%6aghJ#!Z-{J3@ee?TanlYk=SRE*f){bPm$Q5rX0*;f04vNBd9QOaV7=^T^L6N zG{FXS9cW1dOxzAh+?R3sr#M;@lM9!VUungJ$06G?m-5_>Ze8`K+zsXvP( zehY~Wo*U!=MHvGF!xtn8Mo=LIbvtM%7-o<(lDGyE+Z2iIgv9noV#gq{Gm+S3%%DkW zsAbJa5}>sOFpK9RiSI{ZpFv{3Lt_6%V#|W&hM?wy=kK6wADB33AU_huVPIfLLt+TNDw6mjB=&k%q!`+RBykdneGQ5I7>WG>iTxLe z&BccBr8p8>1&M74V}tx}2jeg>FnA-eBaqmsNbDjcHmFdB`LYK|d?pfm84`Ol5*xI% zs2-;IERw`6B=&P8_7@~JBRj&Ed`N6*B(??;+Z2iIgkaY*_#-$BF-YuIB=&M7_7)`e zK_vD$B=&72_6sETS0pwQ2gn1U@CQ|xU=BF_F~}gXHIdk6NNi^$b^sDP7KxpO#0GV` zVIkduBtD@Yi8Bw0y%>qT9*MmhiG2}?eHV!h8XbmNCID($LW>1CB(@fm4fekUlmqg= zEfU)ki5-T-&PQU`AhA1<*gKKf$B@|Iwl35`4?sgzFqghXQuGUn&CUgiCy>(^7(|fR zib!ldB(@C_+Y5;uj>JxZv+Efcir^duhKWe*c}VQlNbDU*?4wBRuSjerZiJ)xk=V*e z><|#U9vT#hAP$sWjl}LiV$VimuS8;RM`9mEVqZpLKSW}`M`G9iMdEOSdLB?mNFuRK zk=V{i>_8-TJQ6z>iCvAv?nGiwhp@rvk6|f<1CHd)NbG}1?DI%$a2E;c(AP-f47`Y7 zH$-CFA+aNn*r~io<$n>9L_HF_2Z=osiM_13sE>I^D>U#+!wi*)K5sB@O#EwN`gI1Wr%l}Fwi5W=jWk~ETNNmv9 z2h3*|ki?%Nu|FfR83ho&=SQ&X89?K|FoU!a5)76|Y8pV zQv_l|)szV$alrj6_UQ-onB=Ah`LIePJ_fb*pt?Y9Kp`mmJ2L|VjLpCTVT0CYfL3>b z#6fHxs5rE%2VeOHax-j68qak7h3w*NDxlsB>of^wD{kbjs^K+ejp-`ItU}YTDzlhR zmr-Gv09jxaXUn9bxkH6yYpxQx>0Lg*0gS(6%eNYVQX4Zi^xllgHA0Q^E zn+ehbGfzc_fgytz;v7)77bFKV58Ul!U@!*h0poXq3=EfHrXaa>B@!E?@SyPY3)0MD zR!h+Q-DAnX0E#q_zd`W}vuH1x{)fWT6=ayj>UW^&-(ZOdH_%W4O#cNm{U3!H7z9C* zAjcrdoklb7ge4*%LE!|_0`fR`nJ~!X22cY)<4_AhDxiE&7=Z9|sNpbmi#5S3;e@GAu@AtQZ(TZUP0g#B_Zv4ryK+Ed~bA>K$nY1_q(&`|TK|S!=Wz7;L7m zKgOZLV#UB9G5vBSs~UWz)dEcxaTXIxLo?8h4dEU)(2^g-S}R2ch3P*vS&nQ!tHr{} zJpG+6i;DQbQu^}i@XFK^*X~ zv4B8)1p~V=H)x5N2m>EWJ!qn=n2~`2v|yVH)Y z?F1#}E=I0z91IK^q7ljr4D7IJSkW%fdJ5Pytf+<*0|Wa6h9>LLwMC4GW3j-N^9^orZ

_=s1urV;G@aTd9;kYblp_m3wwJrk#`zhYn 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�+5;#2bK$cSy6+1nMSGkx-G7n+a-c<)tK5 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

O*xH7({}=>X~|_85l$jl)lP? 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�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�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