因为现在RT-Thread的测试代码还比较少,而且很多人反映RT-Thread例子也不多,所以打算建一套系统测试的代码,一个做为例子提供给大家使用;一个做为测试代码进行单元测试。
大家有什么好的建议吗?
我的初步想法是:
每个例子以单独的文件放置,每个文件中包含用户应用入口函数rt_applica
tion_init,这样就能够做到只需要替换每个分支中的application.c而编译通过,然后运行测试代码。
对于一套完整的测试,可以考虑采用宏的方式可以把每份代码的rt_application_init入口给屏蔽掉,并且把所有的测试代码都编译进去,并输出各自的函数到finsh shell中,这样也就可以在finsh shell中进行相应的测试了。因为代码还要兼顾到示例性质,所以得要求代码尽量精简。
一份示例:
#include
#ifdef RT_TESTSUITE
#include
#else
#if RT_THREAD_PRIORITY_MAX == 32
#define THREAD_PRIO 20
#else
#define THREAD_PRIO 200
#endif
#define TEST_LOOP 1
#endif
/*
* This is an example for static thread
*/
static struct rt_thread thread1;
static char thread1_stack[512];
static void thread1_entry(void* parameter)
{
int i;
while (TEST_LOOP)
{
for (i = 0; i < 10; i ++)
{
rt_kprintf("%d
", i);
rt_thread_delay(100);
}
}
#ifdef RT_TESTSUITE
test_set_state(TEST_STATE_PASSED);
#endif
}
rt_err_t thread_static_init()
{
rt_err_t result;
result = rt_thread_init(&thread1,
"thread1",
thread1_entry, RT_NULL,
&thread1_stack[0], sizeof(thread1_stack),
THREAD_PRIO, 10);
if (result == RT_EOK)
{
rt_thread_startup(&thread1);
}
return result;
}
#ifdef RT_TESTSUITE
int thread_static()
{
test_set_state(TEST_STATE_RUNNING);
return test_check_result(thread_static_init());
}
FINSH_FUNCTION_EXPORT(thread_static, a static thread object test);
#else
int rt_application_init()
{
thread_static_init();
return 0;
}
#endif
RT_TESTSUITE是定义用于测试的,如果把这个宏去掉,那么这也是一份完整的例子(替换掉各个分支中的appliation.c即可运行起来)。