瀏覽代碼

add __platform_panic_hanlde

lyon 3 年之前
父節點
當前提交
765d32483f

+ 5 - 3
port/linux/package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.c

@@ -53,6 +53,7 @@ __exit:
     __platform_printf("Error: dev_open failed.\r\n");
     if (dev->ioctl_config) {
         pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type));
+        dev->ioctl_config = NULL;
     }
     if (dev) {
         pikaFree(dev, sizeof(pika_dev));
@@ -71,11 +72,12 @@ int pika_hal_close(pika_dev* dev) {
     }
     ret = impl->close(dev);
 __exit:
-    if (NULL != dev) {
-        pikaFree(dev, sizeof(pika_dev));
-    }
     if (NULL != dev->ioctl_config) {
         pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev->type));
+        dev->ioctl_config = NULL;
+    }
+    if (NULL != dev) {
+        pikaFree(dev, sizeof(pika_dev));
     }
     return ret;
 }

+ 1 - 2
port/linux/package/pikascript/pikascript-lib/ctypes/ctypes.c

@@ -98,7 +98,6 @@ void ctypes_c_buffer___init__(PikaObj *self, Arg* value, int size){
                           strGetSize((char*)value_buffer) + 1);
     } else {
         __platform_printf("value type is not support!");
-        while (1)
-            ;
+        __platform_panic_handle();
     }
 }

+ 1 - 1
src/PikaObj.h

@@ -388,7 +388,7 @@ static inline uint8_t obj_refcntNow(PikaObj* self) {
 #define WEAK_FUNCTION_NEED_OVERRIDE_ERROR(_)                            \
     __platform_printf("Error: weak function `%s()` need override.\r\n", \
                       __FUNCTION__);                                    \
-    while (1)
+    __platform_panic_handle();
 
 char* obj_cacheStr(PikaObj* self, char* str);
 PikaObj* _arg_to_obj(Arg* self, PIKA_BOOL* pIsTemp);

+ 5 - 0
src/PikaPlatform.c

@@ -65,6 +65,11 @@ PIKA_WEAK void __platform_error_handle() {
     return;
 }
 
+PIKA_WEAK void __platform_panic_handle() {
+    while (1) {
+    };
+}
+
 PIKA_WEAK uint8_t __is_locked_pikaMemory(void) {
     return 0;
 }

+ 3 - 0
src/PikaPlatform.h

@@ -168,6 +168,9 @@ long __platform_ftell(FILE* stream);
 /* error */
 void __platform_error_handle(void);
 
+/* panic */
+void __platform_panic_handle(void);
+
 void __pks_hook_instruct(void);
 PIKA_BOOL __pks_hook_arg_cache_filter(void* self);
 PIKA_WEAK void __platform_thread_delay(void);

+ 6 - 12
src/PikaVM.c

@@ -65,8 +65,7 @@ static PIKA_BOOL _cq_isFull(volatile EventCQ* cq) {
 void VMSignal_deinit(void) {
 #if !PIKA_EVENT_ENABLE
     __platform_printf("PIKA_EVENT_ENABLE is not enable");
-    while (1) {
-    };
+    __platform_panic_handle();
 #else
     for (int i = 0; i < PIKA_EVENT_LIST_SIZE; i++) {
         if (NULL != PikaVMSignal.cq.res[i]) {
@@ -82,8 +81,7 @@ PIKA_RES VMSignal_pushEvent(PikaEventListener* lisener,
                             int eventSignal) {
 #if !PIKA_EVENT_ENABLE
     __platform_printf("PIKA_EVENT_ENABLE is not enable");
-    while (1) {
-    };
+    __platform_panic_handle();
 #else
     /* push to event_cq_buff */
     if (_cq_isFull(&PikaVMSignal.cq)) {
@@ -107,8 +105,7 @@ PIKA_RES VMSignal_popEvent(PikaEventListener** lisener_p,
                            int* head) {
 #if !PIKA_EVENT_ENABLE
     __platform_printf("PIKA_EVENT_ENABLE is not enable");
-    while (1) {
-    };
+    __platform_panic_handle();
 #else
     /* pop from event_cq_buff */
     if (_cq_isEmpty(&PikaVMSignal.cq)) {
@@ -126,8 +123,7 @@ PIKA_RES VMSignal_popEvent(PikaEventListener** lisener_p,
 void VMSignale_pickupEvent(void) {
 #if !PIKA_EVENT_ENABLE
     __platform_printf("PIKA_EVENT_ENABLE is not enable");
-    while (1) {
-    };
+    __platform_panic_handle();
 #else
     PikaObj* event_lisener;
     uint32_t event_id;
@@ -1138,8 +1134,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
         __platform_printf(
             "OverflowError: type list is too long, please use bigger "
             "PIKA_LINE_BUFF_SIZE\r\n");
-        while (1)
-            ;
+        __platform_panic_handle();
     }
     f.method_type = arg_getType(method_arg);
 
@@ -1527,8 +1522,7 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self,
             __platform_printf(
                 "[ERROR] Too many args in RUN instruction, please use bigger "
                 "#define PIKA_ARG_NUM_MAX\n");
-            while (1) {
-            }
+            __platform_panic_handle();
         }
         for (int i = 0; i < n_arg; i++) {
             stack_tmp[i] = stack_popArg_alloc(&(vm->stack));

+ 1 - 1
src/PikaVersion.h

@@ -2,4 +2,4 @@
 #define PIKA_VERSION_MINOR       11
 #define PIKA_VERSION_MICRO       9
 
-#define PIKA_EDIT_TIME      "2022/12/17 15:47:06"
+#define PIKA_EDIT_TIME      "2022/12/17 16:02:58"

+ 11 - 1
test/hal-test.cpp

@@ -1,9 +1,19 @@
 #include "test_common.h"
 extern "C" {
 #include "../package/pikascript/pikascript-lib/PikaStdDevice/pika_hal.h"
+
+int pika_hal_platform_GPIO_open(pika_dev* dev, char* name){
+    return 0;
+}
+
+int pika_hal_platform_GPIO_close(pika_dev* dev){
+    return 0;
 }
 
+}
+
+
 TEST(hal, open) {
     pika_dev* io = pika_hal_open(PIKA_HAL_GPIO, "PA10");
-    EXPECT_EQ(0, (uintptr_t)io);
+    pika_hal_close(io);
 }