Explorar o código

ipc: initialise automatically, if called from the app

Ivan Grokhotkov %!s(int64=7) %!d(string=hai) anos
pai
achega
4ff262ecff
Modificáronse 3 ficheiros con 13 adicións e 17 borrados
  1. 0 1
      components/esp32/cpu_start.c
  2. 0 15
      components/esp32/include/esp_ipc.h
  3. 13 1
      components/esp32/ipc.c

+ 0 - 1
components/esp32/cpu_start.c

@@ -351,7 +351,6 @@ void start_cpu0_default(void)
     esp_cache_err_int_init();
     esp_crosscore_int_init();
 #ifndef CONFIG_FREERTOS_UNICORE
-    esp_ipc_init();
     esp_dport_access_int_init();
 #endif
     spi_flash_init();

+ 0 - 15
components/esp32/include/esp_ipc.h

@@ -33,21 +33,6 @@ typedef void (*esp_ipc_func_t)(void* arg);
  * These APIs can only be used when FreeRTOS scheduler is running.
  */
 
-
-/*
- * Initialize inter-processor call module. This function is called automatically
- * on CPU start and should not be called from the application.
- *
- * This function start two tasks, one on each CPU. These tasks are started
- * with high priority. These tasks are normally inactive, waiting until one of
- * the esp_ipc_call_* functions to be used. One of these tasks will be
- * woken up to execute the callback provided to esp_ipc_call_nonblocking or
- * esp_ipc_call_blocking.
- */
-/** @cond */
-void esp_ipc_init();
-/** @endcond */
-
 /**
  * @brief Execute a function on the given CPU
  *

+ 13 - 1
components/esp32/ipc.c

@@ -72,7 +72,19 @@ static void IRAM_ATTR ipc_task(void* arg)
     vTaskDelete(NULL);
 }
 
-void esp_ipc_init()
+/*
+ * Initialize inter-processor call module. This function is called automatically
+ * on CPU start and should not be called from the application.
+ *
+ * This function start two tasks, one on each CPU. These tasks are started
+ * with high priority. These tasks are normally inactive, waiting until one of
+ * the esp_ipc_call_* functions to be used. One of these tasks will be
+ * woken up to execute the callback provided to esp_ipc_call_nonblocking or
+ * esp_ipc_call_blocking.
+ */
+static void esp_ipc_init() __attribute__((constructor));
+
+static void esp_ipc_init()
 {
     s_ipc_mutex = xSemaphoreCreateMutex();
     s_ipc_ack = xSemaphoreCreateBinary();