kopia lustrzana https://github.com/espressif/esp-idf
56 wiersze
1.2 KiB
C
56 wiersze
1.2 KiB
C
/* Implementation of utility functions to verify
|
|
unit tests aren't performing SMP-unsafe DPORT reads.
|
|
*/
|
|
|
|
#include "unity.h"
|
|
#include "sdkconfig.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "soc/uart_reg.h"
|
|
#include "test_apb_dport_access.h"
|
|
|
|
#ifndef CONFIG_FREERTOS_UNICORE
|
|
|
|
static void apb_access_loop_task(void *ignore);
|
|
|
|
static volatile bool apb_access_corrupt;
|
|
static TaskHandle_t apb_task_handle;
|
|
|
|
void start_apb_access_loop()
|
|
{
|
|
apb_access_corrupt = false;
|
|
xTaskCreatePinnedToCore(apb_access_loop_task, "accessAPB", 2048, NULL,
|
|
UNITY_FREERTOS_PRIORITY - 1,
|
|
&apb_task_handle, !UNITY_FREERTOS_CPU);
|
|
}
|
|
|
|
void verify_apb_access_loop()
|
|
{
|
|
vTaskDelete(apb_task_handle);
|
|
apb_task_handle = NULL;
|
|
TEST_ASSERT_FALSE(apb_access_corrupt);
|
|
printf("Verified no APB corruption from operations\n");
|
|
}
|
|
|
|
static void apb_access_loop_task(void *ignore)
|
|
{
|
|
uint32_t initial = REG_READ(UART_DATE_REG(0));
|
|
while(1) {
|
|
if (REG_READ(UART_DATE_REG(0)) != initial) {
|
|
apb_access_corrupt = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
#else /*CONFIG_FREERTOS_UNICORE */
|
|
|
|
void start_apb_access_loop()
|
|
{
|
|
}
|
|
|
|
void verify_apb_access_loop()
|
|
{
|
|
}
|
|
|
|
#endif
|