mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 19:13:21 +00:00
Merge branch 'fix/check_usj_status_before_access_v5.4' into 'release/v5.4'
fix(esp_driver_usb_serial_jtag): check USJ accessibility before read/write (v5.4) See merge request espressif/esp-idf!43394
This commit is contained in:
@@ -182,6 +182,10 @@ static int usb_serial_jtag_rx_char_no_driver(int fd)
|
||||
|
||||
static ssize_t usb_serial_jtag_write(int fd, const void * data, size_t size)
|
||||
{
|
||||
if (!usb_serial_jtag_is_connected()) {
|
||||
// TODO: IDF-14303
|
||||
return -1;
|
||||
}
|
||||
const char *data_c = (const char *)data;
|
||||
/* Even though newlib does stream locking on each individual stream, we need
|
||||
* a dedicated lock if two streams (stdout and stderr) point to the
|
||||
@@ -226,6 +230,10 @@ static void usb_serial_jtag_return_char(int fd, int c)
|
||||
|
||||
static ssize_t usb_serial_jtag_read(int fd, void* data, size_t size)
|
||||
{
|
||||
if (!usb_serial_jtag_is_connected()) {
|
||||
// TODO: IDF-14303
|
||||
return -1;
|
||||
}
|
||||
assert(fd == USJ_LOCAL_FD);
|
||||
char *data_c = (char *) data;
|
||||
size_t received = 0;
|
||||
@@ -349,6 +357,10 @@ static int usb_serial_jtag_wait_tx_done_no_driver(int fd)
|
||||
|
||||
static int usb_serial_jtag_fsync(int fd)
|
||||
{
|
||||
if (!usb_serial_jtag_is_connected()) {
|
||||
// TODO: IDF-14303
|
||||
return -1;
|
||||
}
|
||||
_lock_acquire_recursive(&s_ctx.write_lock);
|
||||
int r = s_ctx.fsync_func(fd);
|
||||
_lock_release_recursive(&s_ctx.write_lock);
|
||||
|
||||
@@ -5,5 +5,5 @@ set(sources "test_app_main.c"
|
||||
# the component must be registered as a WHOLE_ARCHIVE
|
||||
idf_component_register(SRCS ${sources}
|
||||
INCLUDE_DIRS "."
|
||||
PRIV_REQUIRES unity esp_pm ulp driver esp_timer esp_psram
|
||||
PRIV_REQUIRES unity esp_pm ulp driver esp_timer esp_psram esp_vfs_console
|
||||
WHOLE_ARCHIVE)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/param.h>
|
||||
@@ -400,6 +401,29 @@ TEST_CASE("esp_timer with SKIP_UNHANDLED_EVENTS does not wake up CPU from sleep"
|
||||
TEST_ESP_OK(esp_timer_delete(periodic_timer));
|
||||
}
|
||||
|
||||
TEST_CASE("Test USJ printing doesn't block CPU on chip wake-up", "[pm]")
|
||||
{
|
||||
light_sleep_enable();
|
||||
fflush(stdout);
|
||||
fsync(fileno(stdout));
|
||||
int64_t printing_time_cost_us = 0, time_end, time_start;
|
||||
|
||||
for (int i = 0; i < 20; ++i)
|
||||
{
|
||||
time_start = esp_timer_get_time();
|
||||
printf("Dummy print %02d\n", i);
|
||||
fflush(stdout);
|
||||
fsync(fileno(stdout));
|
||||
time_end = esp_timer_get_time();
|
||||
printing_time_cost_us += time_end - time_start;
|
||||
vTaskDelay(10);
|
||||
}
|
||||
int32_t avg_cost = (int32_t)(printing_time_cost_us / 20);
|
||||
printf("Average cost per print %ld\n", avg_cost);
|
||||
TEST_ASSERT_LESS_THAN(5000, avg_cost);
|
||||
light_sleep_disable();
|
||||
}
|
||||
|
||||
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||
|
||||
#endif // CONFIG_PM_ENABLE
|
||||
|
||||
Reference in New Issue
Block a user