Просмотр исходного кода

fix: idf5执行task_create时栈大小需要*4的原因找到了.不同bsp的StackType_t大小的差异

Wendal Chen 2 лет назад
Родитель
Сommit
71472a4198

+ 1 - 5
components/max30102/luat_lib_max30102.c

@@ -154,11 +154,7 @@ static int l_max30102_get(lua_State *L) {
         luat_pushcwait_error(L,1);
     }else{
         max30102_idp = luat_pushcwait(L);
-        #if (defined(CONFIG_IDF_CMAKE))
-        int ret = luat_rtos_task_create(&max30102_task_handle, 8*1024, 50, "max30102", max30102_task, NULL, 0);
-        #else
-        int ret = luat_rtos_task_create(&max30102_task_handle, 4*1024, 10, "max30102", max30102_task, NULL, 0);
-        #endif
+        int ret = luat_rtos_task_create(&max30102_task_handle, 3*1024, 10, "max30102", max30102_task, NULL, 0);
         if (ret) {
             LLOGE("max30102线程启动失败 %d", ret);
             luat_pushcwait_error(L,1);

+ 0 - 4
components/network/libftp/luat_ftp_client.c

@@ -895,11 +895,7 @@ static int l_ftp_login(lua_State *L) {
 	}
 
 	network_set_ip_invaild(&g_s_ftp.network->ip_addr);
-#if (defined(CONFIG_IDF_CMAKE))
-	result = luat_rtos_task_create(&g_s_ftp.task_handle, 8*1024, 10, "ftp", ftp_task, NULL, 16);
-#else
 	result = luat_rtos_task_create(&g_s_ftp.task_handle, 2*1024, 10, "ftp", ftp_task, NULL, 16);
-#endif
 	if (result) {
 		LLOGE("创建ftp task失败!! %d", result);
 		goto error;

+ 18 - 1
components/rtos/freertos/luat_common_freertos.c

@@ -44,7 +44,24 @@ void *create_event_task(TaskFun_t task_fun, void *param, uint32_t stack_bytes, u
 	priority = configMAX_PRIORITIES * priority / 100;
 	if (!priority) priority = 2;
 	if (priority >= configMAX_PRIORITIES) priority -= 1;
-	stack_bytes = (stack_bytes + 3) >> 2;
+
+	// 不同的BSP的StackType_t大小不一样,这导致stack_bytes需要适配
+	if (sizeof(StackType_t) == 1) {
+		// nop
+	}
+	else if (sizeof(StackType_t) == 2) {
+		stack_bytes = (stack_bytes + 1) >> 1;
+	}
+	else if (sizeof(StackType_t) == 4) {
+		stack_bytes = (stack_bytes + 3) >> 2;
+	}
+	else if (sizeof(StackType_t) == 8) {
+		stack_bytes = (stack_bytes + 7) >> 3;
+	}
+	else {
+		LLOGW("unkown sizeof(StackType_t) , fallback to 4");
+		stack_bytes = (stack_bytes + 3) >> 2;
+	}
 
 	task_handle_t *handle = luat_heap_zalloc(sizeof(task_handle_t));