瀏覽代碼

add the interrupt disable

supperthomas 3 年之前
父節點
當前提交
b4a46f8bbe

+ 0 - 2
examples/utest/testcases/kernel/Kconfig

@@ -14,11 +14,9 @@ config UTEST_SEMAPHORE_TC
     default n
     depends on RT_USING_SEMAPHORE
 
-
 config UTEST_EVENT_TC
     bool "event test"
     default n
     depends on RT_USING_EVENT
 
-
 endmenu

+ 0 - 1
examples/utest/testcases/kernel/SConscript

@@ -17,7 +17,6 @@ if GetDepend(['UTEST_SEMAPHORE_TC']):
 if GetDepend(['UTEST_EVENT_TC']):
     src += ['event_tc.c']
 
-
 CPPPATH = [cwd]
 
 group = DefineGroup('utestcases', src, depend = [], CPPPATH = CPPPATH)

+ 28 - 2
examples/utest/testcases/kernel/irq_tc.c

@@ -10,6 +10,8 @@
 
 #include <rtthread.h>
 #include "utest.h"
+#include "rthw.h"
+
 #define UTEST_NAME "irq_tc"
 static uint32_t irq_count = 0;
 static uint32_t max_get_nest_count = 0;
@@ -25,12 +27,16 @@ static void irq_callback()
 
 static void irq_test(void)
 {
+    irq_count = 0;
     rt_interrupt_enter_sethook(irq_callback);
-    rt_thread_delay(2);
-    LOG_D("start irq_test OK!\n");
+    rt_interrupt_leave_sethook(irq_callback);
+    rt_thread_mdelay(2);
     LOG_D("%s test irq_test! irq_count %d  max_get_nest_count %d\n", UTEST_NAME, irq_count, max_get_nest_count);
     uassert_int_not_equal(0, irq_count);
     uassert_int_not_equal(0, max_get_nest_count);
+    rt_interrupt_enter_sethook(RT_NULL);
+    rt_interrupt_leave_sethook(RT_NULL);
+    LOG_D("irq_test OK!\n");
 }
 
 static rt_err_t utest_tc_init(void)
@@ -45,8 +51,28 @@ static rt_err_t utest_tc_cleanup(void)
     return RT_EOK;
 }
 
+static void interrupt_test(void)
+{
+    rt_base_t level;
+    uint32_t i = 1000;
+
+    rt_interrupt_enter_sethook(irq_callback);
+    rt_interrupt_leave_sethook(irq_callback);
+    irq_count = 0;
+    level = rt_hw_interrupt_disable();
+    while(i)
+    {
+        i --;
+    }
+    uassert_int_equal(0, irq_count);
+    rt_hw_interrupt_enable(level);
+    rt_interrupt_enter_sethook(RT_NULL);
+    rt_interrupt_leave_sethook(RT_NULL);
+
+}
 static void testcase(void)
 {
     UTEST_UNIT_RUN(irq_test);
+    UTEST_UNIT_RUN(interrupt_test);
 }
 UTEST_TC_EXPORT(testcase, "testcases.kernel.irq_tc", utest_tc_init, utest_tc_cleanup, 10);