Преглед изворни кода

Merge branch 'feature/http_server_pinned_to_core_support' into 'master'

HTTP Server: Added ability to select core

See merge request idf/esp-idf!4586
Ivan Grokhotkov пре 7 година
родитељ
комит
58314feff9

+ 2 - 0
components/esp_http_server/include/esp_http_server.h

@@ -34,6 +34,7 @@ initializer that should be kept in sync
 #define HTTPD_DEFAULT_CONFIG() {                        \
         .task_priority      = tskIDLE_PRIORITY+5,       \
         .stack_size         = 4096,                     \
+        .core_id            = tskNO_AFFINITY,           \
         .server_port        = 80,                       \
         .ctrl_port          = 32768,                    \
         .max_open_sockets   = 7,                        \
@@ -139,6 +140,7 @@ typedef bool (*httpd_uri_match_func_t)(const char *reference_uri,
 typedef struct httpd_config {
     unsigned    task_priority;      /*!< Priority of FreeRTOS task which runs the server */
     size_t      stack_size;         /*!< The maximum stack size allowed for the server task */
+    BaseType_t  core_id;            /*!< The core the HTTP server task will run on */
 
     /**
      * TCP Port number for receiving and transmitting HTTP traffic

+ 2 - 1
components/esp_http_server/src/httpd_main.c

@@ -363,7 +363,8 @@ esp_err_t httpd_start(httpd_handle_t *handle, const httpd_config_t *config)
     if (httpd_os_thread_create(&hd->hd_td.handle, "httpd",
                                hd->config.stack_size,
                                hd->config.task_priority,
-                               httpd_thread, hd) != ESP_OK) {
+                               httpd_thread, hd,
+                               hd->config.core_id) != ESP_OK) {
         /* Failed to launch task */
         httpd_delete(hd);
         return ESP_ERR_HTTPD_TASK;

+ 3 - 2
components/esp_http_server/src/port/esp32/osal.h

@@ -32,9 +32,10 @@ typedef TaskHandle_t othread_t;
 
 static inline int httpd_os_thread_create(othread_t *thread,
                                  const char *name, uint16_t stacksize, int prio,
-                                 void (*thread_routine)(void *arg), void *arg)
+                                 void (*thread_routine)(void *arg), void *arg,
+                                 BaseType_t core_id)
 {
-    int ret = xTaskCreate(thread_routine, name, stacksize, arg, prio, thread);
+    int ret = xTaskCreatePinnedToCore(thread_routine, name, stacksize, arg, prio, thread, core_id);
     if (ret == pdPASS) {
         return OS_SUCCESS;
     }

+ 1 - 0
components/esp_https_server/include/esp_https_server.h

@@ -80,6 +80,7 @@ typedef struct httpd_ssl_config httpd_ssl_config_t;
     .httpd = {                                    \
         .task_priority      = tskIDLE_PRIORITY+5, \
         .stack_size         = 10240,              \
+        .core_id            = tskNO_AFFINITY,     \
         .server_port        = 0,                  \
         .ctrl_port          = 32768,              \
         .max_open_sockets   = 4,                  \