forked from espressif/esp-idf
esp_system: Place ipc_task semaphores on DRAM
- For CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL < 92, the ipc_task semaphores were allocated on SPIRAM rather than internal RAM - SemaphoreHandle_t has a size of 92, thus the failure
This commit is contained in:
@@ -19,6 +19,10 @@
|
|||||||
|
|
||||||
#if !defined(CONFIG_FREERTOS_UNICORE) || defined(CONFIG_APPTRACE_GCOV_ENABLE)
|
#if !defined(CONFIG_FREERTOS_UNICORE) || defined(CONFIG_APPTRACE_GCOV_ENABLE)
|
||||||
|
|
||||||
|
static DRAM_ATTR StaticSemaphore_t s_ipc_mutex_buffer[portNUM_PROCESSORS];
|
||||||
|
static DRAM_ATTR StaticSemaphore_t s_ipc_sem_buffer[portNUM_PROCESSORS];
|
||||||
|
static DRAM_ATTR StaticSemaphore_t s_ipc_ack_buffer[portNUM_PROCESSORS];
|
||||||
|
|
||||||
static TaskHandle_t s_ipc_task_handle[portNUM_PROCESSORS];
|
static TaskHandle_t s_ipc_task_handle[portNUM_PROCESSORS];
|
||||||
static SemaphoreHandle_t s_ipc_mutex[portNUM_PROCESSORS]; // This mutex is used as a global lock for esp_ipc_* APIs
|
static SemaphoreHandle_t s_ipc_mutex[portNUM_PROCESSORS]; // This mutex is used as a global lock for esp_ipc_* APIs
|
||||||
static SemaphoreHandle_t s_ipc_sem[portNUM_PROCESSORS]; // Two semaphores used to wake each of ipc tasks
|
static SemaphoreHandle_t s_ipc_sem[portNUM_PROCESSORS]; // Two semaphores used to wake each of ipc tasks
|
||||||
@@ -104,9 +108,9 @@ static void esp_ipc_init(void)
|
|||||||
|
|
||||||
for (int i = 0; i < portNUM_PROCESSORS; ++i) {
|
for (int i = 0; i < portNUM_PROCESSORS; ++i) {
|
||||||
snprintf(task_name, sizeof(task_name), "ipc%d", i);
|
snprintf(task_name, sizeof(task_name), "ipc%d", i);
|
||||||
s_ipc_mutex[i] = xSemaphoreCreateMutex();
|
s_ipc_mutex[i] = xSemaphoreCreateMutexStatic(&s_ipc_mutex_buffer[i]);
|
||||||
s_ipc_ack[i] = xSemaphoreCreateBinary();
|
s_ipc_ack[i] = xSemaphoreCreateBinaryStatic(&s_ipc_ack_buffer[i]);
|
||||||
s_ipc_sem[i] = xSemaphoreCreateBinary();
|
s_ipc_sem[i] = xSemaphoreCreateBinaryStatic(&s_ipc_sem_buffer[i]);
|
||||||
portBASE_TYPE res = xTaskCreatePinnedToCore(ipc_task, task_name, CONFIG_ESP_IPC_TASK_STACK_SIZE, (void*) i,
|
portBASE_TYPE res = xTaskCreatePinnedToCore(ipc_task, task_name, CONFIG_ESP_IPC_TASK_STACK_SIZE, (void*) i,
|
||||||
configMAX_PRIORITIES - 1, &s_ipc_task_handle[i], i);
|
configMAX_PRIORITIES - 1, &s_ipc_task_handle[i], i);
|
||||||
assert(res == pdTRUE);
|
assert(res == pdTRUE);
|
||||||
|
Reference in New Issue
Block a user