Taiga Develop před 3 měsíci
rodič
revize
ae7884e9a9

+ 8 - 0
headers/zivuos.h

@@ -0,0 +1,8 @@
+#ifndef CX_ZIVUOS_H_INCLUDED
+#define CX_ZIVUOS_H_INCLUDED
+
+#include "zivuos/systypes.h"
+#include "zivuos/zalloc.h"
+#include "zivuos/mutex.h"
+
+#endif

+ 0 - 0
headers/zivuos/vector.h → headers/zivuos/.vector.h


+ 33 - 0
headers/zivuos/mutex.h

@@ -0,0 +1,33 @@
+#ifndef CX_ZIVUOS_MUTEX_H_INCLUDED
+#define CX_ZIVUOS_MUTEX_H_INCLUDED
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef volatile enum zv_mutex_e {
+    ZV_MUTEX_FREE,
+    ZV_MUTEX_LOCKED
+} zv_mutex_t;
+
+static inline bool zv_mutex_try_lock(zv_mutex_t *self) {
+    zv_mutex_t required = ZV_MUTEX_FREE;
+
+    return __atomic_compare_exchange_n(
+        self, 
+        &required, 
+        ZV_MUTEX_LOCKED, 
+        false, 
+        __ATOMIC_ACQ_REL, 
+        __ATOMIC_ACQUIRE
+    );
+}
+
+static inline bool zv_mutex_is_free(zv_mutex_t *self) {
+    return __atomic_load_n(self, __ATOMIC_ACQUIRE) == ZV_MUTEX_FREE; 
+}
+
+static inline void zv_mutex_unlock(zv_mutex_t *self) {
+    __atomic_store_n(self, ZV_MUTEX_FREE, __ATOMIC_RELEASE);
+}
+
+#endif

+ 11 - 0
headers/zivuos/semaphore.h

@@ -0,0 +1,11 @@
+#ifndef CX_ZIVUOS_SEMAPHORE_H_INCLUDED
+#define CX_ZIVUOS_SEMAPHORE_H_INCLUDED
+
+#include "systypes.h"
+
+typedef struct zv_semaphore_s {
+    volatile uint8_t content;
+} zv_semaphore_t;
+
+
+#endif

+ 42 - 2
headers/zivuos/task.h

@@ -1,10 +1,50 @@
 #ifndef CX_ZIVUOS_TASK_H_INCLUDED
 #define CX_ZIVUOS_TASK_H_INCLUDED
 
-#include "models.h"
+#include "systypes.h"
+
+typedef enum zv_task_type_e {
+    ZV_COROUTINE_TASK,
+    ZV_PROCESS_TASK,
+    ZV_ONESHOT_TASK
+} zv_task_type_t;
+
+typedef enum zv_state_e {
+    ZV_KILLED,
+    ZV_RUNNING,
+    ZV_READY,
+    ZV_SLEEP
+} zv_state_t;
+
+struct zv_kernel_s;
+typedef zv_state_t (*zv_worker_t) (struct zv_kernel_t *, zv_pid_t);
+
+typedef struct zv_coroutine_s {
+    zv_worker_t worker;
+    zv_universal_t param;
+} zv_coroutine_t;
+
+typedef struct zv_process_s {
+} zv_process_t;
+
+typedef struct zv_oneshot_s {
+    zv_worker_t worker;
+    zv_universal_t param;
+} zv_oneshot_t;
+
+typedef union zv_task_selector_u {
+    zv_coroutine_t coroutine;
+    zv_process_t process;
+    zv_oneshot_t oneshot;
+} zv_task_selector_t;
 
 typedef struct zv_task_s {
-    
+    zv_pid_t pid;
+    zv_state_t state;
+    zv_priority_t priority;
+    zv_task_type_t type;
+
+     
 } zv_task_t;
 
 #endif

+ 0 - 0
sources/vector.c → sources/.vector.c