summaryrefslogtreecommitdiff
path: root/examples/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'examples/kernel')
-rw-r--r--examples/kernel/heap_malloc.c24
-rw-r--r--examples/kernel/heap_realloc.c55
-rw-r--r--examples/kernel/semaphore_dynamic.c9
-rw-r--r--examples/kernel/semaphore_priority.c6
-rw-r--r--examples/kernel/semaphore_producer_consumer.c4
-rw-r--r--examples/kernel/tc_comm.c43
6 files changed, 83 insertions, 58 deletions
diff --git a/examples/kernel/heap_malloc.c b/examples/kernel/heap_malloc.c
index 0a6b46cc95..558c5403a9 100644
--- a/examples/kernel/heap_malloc.c
+++ b/examples/kernel/heap_malloc.c
@@ -9,8 +9,8 @@ static rt_bool_t mem_check(rt_uint8_t *ptr, rt_uint8_t value, rt_uint32_t len)
{
while (len)
{
- if (*ptr != value) return RT_FALSE;
-
+ if (*ptr != value)
+ return RT_FALSE;
ptr ++;
len --;
}
@@ -20,6 +20,7 @@ static rt_bool_t mem_check(rt_uint8_t *ptr, rt_uint8_t value, rt_uint32_t len)
static void heap_malloc_init()
{
+ rt_uint8_t res = TC_STAT_PASSED;
rt_uint8_t *ptr1, *ptr2, *ptr3, *ptr4, *ptr5;
ptr1 = rt_malloc(1);
@@ -33,14 +34,18 @@ static void heap_malloc_init()
memset(ptr3, 3, 31);
memset(ptr4, 4, 127);
- if (mem_check(ptr1, 1, 1) != RT_FALSE) goto _failed;
- if (mem_check(ptr2, 2, 13) != RT_FALSE) goto _failed;
- if (mem_check(ptr3, 3, 31) != RT_FALSE) goto _failed;
- if (mem_check(ptr4, 4, 127) != RT_FALSE) goto _failed;
+ if (mem_check(ptr1, 1, 1) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr2, 2, 13) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr3, 3, 31) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr4, 4, 127) == RT_FALSE)
+ res = TC_STAT_FAILED;
rt_free(ptr4);
rt_free(ptr3);
- rt_free(ptr3);
+ rt_free(ptr2);
rt_free(ptr1);
if (ptr5 != RT_NULL)
@@ -48,10 +53,7 @@ static void heap_malloc_init()
rt_free(ptr5);
}
- tc_done(TC_STAT_PASSED);
-
-_failed:
- tc_done(TC_STAT_FAILED);
+ tc_done(res);
}
#ifdef RT_USING_TC
diff --git a/examples/kernel/heap_realloc.c b/examples/kernel/heap_realloc.c
index a4974d5bf3..c77a60f7d9 100644
--- a/examples/kernel/heap_realloc.c
+++ b/examples/kernel/heap_realloc.c
@@ -20,6 +20,7 @@ static rt_bool_t mem_check(rt_uint8_t *ptr, rt_uint8_t value, rt_uint32_t len)
static void heap_realloc_init()
{
+ rt_uint8_t res = TC_STAT_PASSED;
rt_uint8_t *ptr1, *ptr2, *ptr3, *ptr4, *ptr5;
ptr1 = rt_malloc(1);
@@ -33,36 +34,54 @@ static void heap_realloc_init()
memset(ptr3, 3, 31);
memset(ptr4, 4, 127);
- if (mem_check(ptr1, 1, 1) != RT_FALSE) goto _failed;
- if (mem_check(ptr2, 2, 13) != RT_FALSE) goto _failed;
- if (mem_check(ptr3, 3, 31) != RT_FALSE) goto _failed;
- if (mem_check(ptr4, 4, 127) != RT_FALSE) goto _failed;
+ if (mem_check(ptr1, 1, 1) == RT_FALSE)
+ {
+ res = TC_STAT_FAILED;
+ goto _free;
+ }
+ if (mem_check(ptr2, 2, 13) == RT_FALSE)
+ {
+ res = TC_STAT_FAILED;
+ goto _free;
+ }
+ if (mem_check(ptr3, 3, 31) == RT_FALSE)
+ {
+ res = TC_STAT_FAILED;
+ goto _free;
+ }
+ if (mem_check(ptr4, 4, 127) == RT_FALSE)
+ {
+ res = TC_STAT_FAILED;
+ goto _free;
+ }
ptr1 = rt_realloc(ptr1, 13);
ptr2 = rt_realloc(ptr2, 31);
ptr3 = rt_realloc(ptr3, 127);
ptr4 = rt_realloc(ptr4, 1);
ptr5 = rt_realloc(ptr5, 0);
+ if (ptr5)
+ {
+ rt_kprintf("realloc(ptr, 0) should return NULL\n");
+ res = TC_STAT_FAILED;
+ }
- if (mem_check(ptr1, 1, 1) != RT_FALSE) goto _failed;
- if (mem_check(ptr2, 2, 13) != RT_FALSE) goto _failed;
- if (mem_check(ptr3, 3, 31) != RT_FALSE) goto _failed;
- if (mem_check(ptr4, 4, 1) != RT_FALSE) goto _failed;
+ if (mem_check(ptr1, 1, 1) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr2, 2, 13) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr3, 3, 31) == RT_FALSE)
+ res = TC_STAT_FAILED;
+ if (mem_check(ptr4, 4, 1) == RT_FALSE)
+ res = TC_STAT_FAILED;
+_free:
rt_free(ptr4);
rt_free(ptr3);
- rt_free(ptr3);
+ rt_free(ptr2);
rt_free(ptr1);
- if (ptr5 != RT_NULL)
- {
- rt_free(ptr5);
- }
-
- tc_done(TC_STAT_PASSED);
-
-_failed:
- tc_done(TC_STAT_FAILED);
+ tc_done(res);
}
#ifdef RT_USING_TC
diff --git a/examples/kernel/semaphore_dynamic.c b/examples/kernel/semaphore_dynamic.c
index 7f2c2ffd42..579d9daa9a 100644
--- a/examples/kernel/semaphore_dynamic.c
+++ b/examples/kernel/semaphore_dynamic.c
@@ -90,13 +90,16 @@ static void _tc_cleanup()
/* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
rt_enter_critical();
+ if (sem)
+ {
+ rt_sem_delete(sem);
+ sem = RT_NULL;
+ }
+
/* 删除线程 */
if (tid != RT_NULL && tid->stat != RT_THREAD_CLOSE)
{
rt_thread_delete(tid);
-
- /* 删除信号量 */
- rt_sem_delete(sem);
}
/* 调度器解锁 */
diff --git a/examples/kernel/semaphore_priority.c b/examples/kernel/semaphore_priority.c
index c106a25d5e..2bbeb80389 100644
--- a/examples/kernel/semaphore_priority.c
+++ b/examples/kernel/semaphore_priority.c
@@ -100,6 +100,12 @@ static void _tc_cleanup()
rt_thread_delete(t2);
rt_thread_delete(worker);
+ if (sem)
+ {
+ rt_sem_delete(sem);
+ sem = RT_NULL;
+ }
+
if (t1_count > t2_count)
tc_done(TC_STAT_FAILED);
else
diff --git a/examples/kernel/semaphore_producer_consumer.c b/examples/kernel/semaphore_producer_consumer.c
index ec0bf2234c..e7c0522223 100644
--- a/examples/kernel/semaphore_producer_consumer.c
+++ b/examples/kernel/semaphore_producer_consumer.c
@@ -119,6 +119,10 @@ static void _tc_cleanup()
/* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
rt_enter_critical();
+ rt_sem_detach(&sem_lock);
+ rt_sem_detach(&sem_empty);
+ rt_sem_detach(&sem_full);
+
/* 删除线程 */
if (producer_tid != RT_NULL && producer_tid->stat != RT_THREAD_CLOSE)
rt_thread_delete(producer_tid);
diff --git a/examples/kernel/tc_comm.c b/examples/kernel/tc_comm.c
index 60d843171f..7804701284 100644
--- a/examples/kernel/tc_comm.c
+++ b/examples/kernel/tc_comm.c
@@ -37,34 +37,25 @@ void tc_thread_entry(void* parameter)
_tc_current = index->name + 4;
rt_kprintf("Run TestCase: %s\n", _tc_current);
_tc_stat = TC_STAT_PASSED | TC_STAT_RUNNING;
- tick = index->func();
- if (tick > 0)
- {
- rt_sem_take(&_tc_sem, tick * _tc_scale);
+ tick = index->func();
+ if (tick > 0)
+ {
+ /* Make sure we are going to be blocked. */
+ rt_sem_control(&_tc_sem, RT_IPC_CMD_RESET, 0);
+ rt_sem_take(&_tc_sem, tick * _tc_scale);
+ }
- if (_tc_cleanup != RT_NULL)
- {
- /* perform testcase cleanup */
- _tc_cleanup();
- _tc_cleanup = RT_NULL;
- }
+ if (_tc_cleanup != RT_NULL)
+ {
+ /* perform testcase cleanup */
+ _tc_cleanup();
+ _tc_cleanup = RT_NULL;
+ }
- rt_sem_trytake(&_tc_sem);/* by nl1031 */
-
- if (_tc_stat & TC_STAT_FAILED)
- rt_kprintf("TestCase[%s] failed\n", _tc_current);
- else
- rt_kprintf("TestCase[%s] passed\n", _tc_current);
- }
- else
- {
- if (_tc_cleanup != RT_NULL)
- {
- /* perform testcase cleanup */
- _tc_cleanup();
- _tc_cleanup = RT_NULL;
- }
- }
+ if (_tc_stat & TC_STAT_FAILED)
+ rt_kprintf("TestCase[%s] failed\n", _tc_current);
+ else
+ rt_kprintf("TestCase[%s] passed\n", _tc_current);
}
}
}