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

update: 把luat_rtos.h改改, 并加个luat_types.h

Wendal Chen 3 лет назад
Родитель
Сommit
309877e397

+ 50 - 0
components/rtos/freertos/luat_rtos_freertos_queue.c

@@ -0,0 +1,50 @@
+#include "luat_base.h"
+#include "luat_rtos.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semaphore.h"
+
+LUAT_RET luat_queue_create(luat_rtos_queue_t* queue, size_t msgcount, size_t msgsize) {
+    QueueHandle_t q = xQueueCreate(msgcount, msgsize);
+    if (q == NULL) {
+        return -1;
+    }
+    queue->userdata = q;
+    return LUAT_ERR_OK;
+}
+
+LUAT_RET luat_queue_send(luat_rtos_queue_t*   queue, void* msg,  size_t msg_size, size_t timeout) {
+    if (queue->userdata == NULL)
+        return LUAT_ERR_FAIL;
+    if (xQueueSend(queue->userdata, msg, timeout) == pdTRUE) {
+        return LUAT_ERR_OK;
+    }
+    return LUAT_ERR_FAIL;
+}
+LUAT_RET luat_queue_recv(luat_rtos_queue_t*   queue, void* msg, size_t msg_size, size_t timeout) {
+    if (queue->userdata == NULL)
+        return LUAT_ERR_FAIL;
+    if (xQueueReceive(queue->userdata, msg, timeout) == pdTRUE) {
+        return LUAT_ERR_OK;
+    }
+    return LUAT_ERR_FAIL;
+}
+
+LUAT_RET luat_queue_reset(luat_rtos_queue_t*   queue) {
+    if (queue->userdata == NULL)
+        return LUAT_ERR_FAIL;
+    if (pdTRUE == xQueueReset((QueueHandle_t)queue->userdata)) {
+        return LUAT_ERR_OK;
+    }
+    return LUAT_ERR_FAIL;
+}
+
+LUAT_RET luat_queue_delete(luat_rtos_queue_t*   queue) {
+    if (queue->userdata) {
+        xQueueDelete((QueueHandle_t)queue->userdata);
+    }
+    queue->userdata = NULL;
+    return LUAT_ERR_OK;
+}

+ 37 - 0
components/rtos/freertos/luat_rtos_freertos_task.c

@@ -0,0 +1,37 @@
+#include "luat_base.h"
+#include "luat_rtos.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "queue.h"
+#include "semaphore.h"
+
+#define LUAT_LOG_TAG "thread"
+#include "luat_log.h"
+
+static void task_proxy(void* params) {
+    luat_thread_t* thread = (luat_thread_t*)params;
+    thread->thread(thread->userdata);
+    xTaskDelete(NULL); // 代理删除自身
+    
+    LLOGD("impossible %s %d", __FILE__, __LINE__);
+    // 不可能到这里
+    while (1);
+}
+
+LUAT_RET luat_thread_start(luat_thread_t* thread) {
+    int ret = xTaskCreate(task_proxy, thread->name, thread->stack_size, thread, thread->priority, NULL);
+    if (ret == pdPASS) {
+        return LUAT_ERR_OK;
+    }
+    LLOGD("thread start fail %d", ret);
+    return LUAT_ERR_FAIL;
+}
+
+LUAT_RET luat_thread_stop(luat_thread_t* thread) {
+    return LUAT_ERR_FAIL;
+}
+
+LUAT_RET luat_thread_delete(luat_thread_t* thread) {
+    return LUAT_ERR_FAIL;
+}

+ 1 - 6
luat/include/luat_base.h

@@ -22,13 +22,8 @@
 #include "lstate.h"
 #include "stdint.h"
 #include "string.h"
+#include "luat_types.h"
 
-//以下是u8g2的字库,默认不开启,根据需要自行开启对应宏定义
-//#define USE_U8G2_WQY12_T_GB2312      //enable u8g2 chinese font
-//#define USE_U8G2_UNIFONT_SYMBOLS
-//#define USE_U8G2_ICONIC_WEATHER_6X
-
-//lua_State * luat_get_state();
 /**
  * LuatOS主入口函数, 从这里开始就交由LuatOS控制了.
  * 集成时,该函数应在独立的thread/task中启动

+ 1 - 1
luat/include/luat_pm.h

@@ -5,7 +5,7 @@
 
 #define LUAT_PM_SLEEP_MODE_NONE     0	//系统处于活跃状态,未采取任何的降低功耗状态
 #define LUAT_PM_SLEEP_MODE_IDLE     1	//空闲模式,该模式在系统空闲时停止 CPU 和部分时钟,任意事件或中断均可以唤醒
-#define LUAT_PM_SLEEP_MODE_LIGHT    2	//轻度睡眠模式,CPU 停止,多数时钟和外设停止,唤醒后需要进行时间补偿
+#define LUAT_PM_SLEEP_MODE_LIGHT    2	//轻度睡眠模式,CPU 停止,多数时钟和外设停止
 #define LUAT_PM_SLEEP_MODE_DEEP     3	//深度睡眠模式,CPU 停止,仅少数低功耗外设工作,可被特殊中断唤醒
 #define LUAT_PM_SLEEP_MODE_STANDBY	4	//待机模式,CPU 停止,设备上下文丢失(可保存至特殊外设),唤醒后通常复位
 //#define LUAT_PM_SLEEP_MODE_SHUTDOWN	5	//关断模式,比 Standby 模式功耗更低, 上下文通常不可恢复, 唤醒后复位

+ 18 - 5
luat/include/luat_rtos.h

@@ -14,7 +14,9 @@ typedef struct luat_thread{
     void* userdata;
 }luat_thread_t;
 
-int luat_thread_start(luat_thread_t* thread);
+LUAT_RET luat_thread_start(luat_thread_t* thread);
+LUAT_RET luat_thread_stop(luat_thread_t* thread);
+LUAT_RET luat_thread_delete(luat_thread_t* thread);
 
 /* ----------------------------------- semaphore ----------------------------------- */
 typedef struct luat_sem{
@@ -24,9 +26,20 @@ typedef struct luat_sem{
     void* userdata;
 }luat_sem_t;
 
-int luat_sem_create(luat_sem_t* semaphore);
-int luat_sem_delete(luat_sem_t* semaphore);
-int luat_sem_take(luat_sem_t* semaphore,uint32_t timeout);
-int luat_sem_release(luat_sem_t* semaphore);
+
+LUAT_RET luat_sem_create(luat_sem_t* semaphore);
+LUAT_RET luat_sem_delete(luat_sem_t* semaphore);
+LUAT_RET luat_sem_take(luat_sem_t* semaphore,uint32_t timeout);
+LUAT_RET luat_sem_release(luat_sem_t* semaphore);
+
+
+typedef struct luat_rtos_queue {
+    void* userdata;
+}luat_rtos_queue_t;
+
+LUAT_RET luat_queue_create(luat_rtos_queue_t* queue, size_t msgcount, size_t msgsize);
+LUAT_RET luat_queue_send(luat_rtos_queue_t*   queue, void* msg,  size_t msg_size, size_t timeout);
+LUAT_RET luat_queue_recv(luat_rtos_queue_t*   queue, void** msg, size_t msg_size, size_t timeout);
+LUAT_RET luat_queue_free(luat_rtos_queue_t*   queue);
 
 #endif

+ 15 - 0
luat/include/luat_types.h

@@ -0,0 +1,15 @@
+#ifndef LUAT_TYPES_H
+#define LUAT_TYPES_H
+
+#define LUAT_RET int
+
+enum {
+    LUAT_ERR_OK   = (0) ,
+    LUAT_ERR_FAIL = (-1),
+    LUAT_TRUE     = (1) ,
+    LUAT_FALSE    = (0) ,
+    LUAT_NULL     = (0)
+};
+
+#endif
+