kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'feature/linux_improve_delay_func' into 'master'
feat(esp_rom): Improves esp_rom_delay_us for linux target See merge request espressif/esp-idf!30217pull/13651/head
commit
b6c8a139be
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +10,8 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <time.h>
|
||||||
#include "esp_rom_sys.h"
|
#include "esp_rom_sys.h"
|
||||||
|
|
||||||
static void call_linux_putc(char c);
|
static void call_linux_putc(char c);
|
||||||
|
@ -264,9 +266,16 @@ int esp_rom_printf(const char *fmt, ...)
|
||||||
|
|
||||||
void esp_rom_delay_us(uint32_t us)
|
void esp_rom_delay_us(uint32_t us)
|
||||||
{
|
{
|
||||||
int sleep_result = usleep(us);
|
struct timespec wait_time = {
|
||||||
assert(sleep_result == 0);
|
.tv_sec = us / 1000000,
|
||||||
(void)sleep_result; // Prevents compiler from optimizing out usleep() due to unused result. Also prevents warning.
|
.tv_nsec = us % 1000000 * 1000,
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
If nanosleep() is interrupted by a signal handler, nanosleep()
|
||||||
|
returns -1, sets errno to EINTR, and writes the remaining time.
|
||||||
|
The remaining time is used to call nanosleep() again and complete the specified pause.
|
||||||
|
*/
|
||||||
|
while (nanosleep(&wait_time, &wait_time) == -1 && errno == EINTR) { };
|
||||||
}
|
}
|
||||||
|
|
||||||
void esp_rom_install_channel_putc(int channel, void (*putc)(char c))
|
void esp_rom_install_channel_putc(int channel, void (*putc)(char c))
|
||||||
|
|
|
@ -60,7 +60,7 @@ static void tsk_blocks_frequently(void *param)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("FreeRTOS Delete Blocked Tasks", "[freertos][ignore]") // TODO: esp_rom_delay_us is interrupted by signal
|
TEST_CASE("FreeRTOS Delete Blocked Tasks", "[freertos]")
|
||||||
{
|
{
|
||||||
TaskHandle_t blocking_tasks[configNUM_CORES + 1]; // one per CPU, plus one unpinned task
|
TaskHandle_t blocking_tasks[configNUM_CORES + 1]; // one per CPU, plus one unpinned task
|
||||||
tsk_blocks_param_t params[configNUM_CORES + 1] = { 0 };
|
tsk_blocks_param_t params[configNUM_CORES + 1] = { 0 };
|
||||||
|
|
Ładowanie…
Reference in New Issue