建立rt-thread基于stm32f103的最小系统试运行
一、烧录前设置
否则会在烧录时出现以下错误
二、烧录运行
查看代码得知,有一个以函数led_thread_entry()为执行主体的线程,会用GPE.2以1HZ频率控制led的闪烁。
1、将编译链接后得到的文件烧录进STM32F103ZET6红牛开发板。用示波器查看GPE.2对应的引脚,并没有预期的1HZ方波出现。
2、用开发板的串口一接上window电脑,上电时,在window电脑上用串口调试助手可以得到如下输出信息。表明代码已经在运行,由于有故障而没有得到预期的输出。
3、通过在执行路径上加入打印语句rt_kprintf("\n [%s-%d]!\n", __FILE__, __LINE__);定位到故障点:rt_init_thread_entry()-->finsh_set_device()-->RT_ASSERT()。
4、直接将rt_init_thread_entry()函数中调用finsh_set_device()的语句注释掉。然后重新编译链接烧录到开发板上。再用示波器查看GPE.2状态,看到预期的方波输出。
三、添加线程
在application.c文件内int rt_application_init(void)函数之前添加如下代码
-
char thread1_stack[256];
-
char thread2_stack[256];
-
-
struct rt_thread thread1;
-
struct rt_thread thread2;
-
-
void thread1_entry(void* parameter)
-
{
-
rt_uint32_t i = 0;
-
-
while (1)
-
{
-
rt_kprintf("thread1 --> %d\n", ++i);
-
rt_thread_delay(100);
-
}
-
}
-
-
void thread2_entry(void* parameter)
-
{
-
int count = 0;
-
while (1)
-
{
-
rt_kprintf("Thread2 count:%d\n", ++count);
-
rt_thread_delay(50);
-
}
-
}
-
-
void thread_test()
-
{
-
rt_err_t result;
-
-
result = rt_thread_init(&thread1,
-
"thread1",
-
thread1_entry, RT_NULL,
-
&thread1_stack[0], sizeof(thread1_stack),
-
20, 15);
-
if (result == RT_EOK)
-
{
-
rt_thread_startup(&thread1);
-
}
-
-
result = rt_thread_init(&thread2,
-
"thread2",
-
thread2_entry, RT_NULL,
-
&thread2_stack[0], sizeof(thread2_stack),
-
25, 10);
-
if (result == RT_EOK)
-
{
-
rt_thread_startup(&thread2);
-
}
-
}
-
FINSH_FUNCTION_EXPORT(thread_test, perform thread test)
在int rt_application_init(void)函数内代码
if (result == RT_EOK)
{
rt_thread_startup(&led_thread);
}
之后添加thread_test();
然后重新编译链接烧录到开发板上。在window电脑上用串口调试助手可以得到如下输出信息
阅读(3987) | 评论(0) | 转发(0) |