各位学习RT-THREAD的前辈,大家好。本人初学RT-THREAD操作系统,刚刚调试了LED灯程序。我发现一个比较初级的问题,我想提出来,请大家帮我指点一下。
我在程序里创建了两个线程入口,程序已贴出,如下所示。如果按照这样的配法,程序下载到STM32开发板里,没有问题。线程1和线程2都能够得到执行;可是如果我将线程 1里面的配置修改,将延时时间注释掉,另将rt_hw_led_off(0);也注释掉,也就是线程1的任务就是将LED灯点亮。然后什么也不做了。可是这样配置了,程序就会死在线程1里,线程2的程序得不到执行。这是为什么?还有就是RT-THREAD操作系统的不同优先级的任务切换到底是怎么切换的?我在编程 指南上没有找到答案。相同优先级的任务切换,是按照我们创建线程 时设置的时间片来确定的。可是不同优先级的任务切换我一直没弄明白,请各位前辈指点!不胜感激!
static void rt_thread_entry_led1(void* parameter) { /* init led configuration */ rt_hw_led_init(); //初始化LED灯控制脚 while (1) { rt_hw_led_on(0); //rt_thread_delay(100); /* sleep 0.5 second and switch to other thread 500ms delay*/
//rt_hw_led_off(0); //rt_thread_delay(100); } }
代码如下:
int rt_application_init() { rt_thread_t thread1,thread2;
/* create led1 thread 动态线程*/ thread1 = rt_thread_create("led1", rt_thread_entry_led1, RT_NULL, 512, 20, 5); if (thread1 != RT_NULL) rt_thread_startup(thread1); thread2 = rt_thread_create("led2", rt_thread_entry_led2,RT_NULL, 512, 21,5); if (thread2 != RT_NULL) rt_thread_startup(thread2);
}
static void rt_thread_entry_led1(void* parameter) { /* init led configuration */ rt_hw_led_init(); //初始化LED灯控制脚 while (1) { rt_hw_led_on(0); rt_thread_delay(100); /* sleep 0.5 second and switch to other thread 500ms delay*/
rt_hw_led_off(0); rt_thread_delay(100); } }
void rt_thread_entry_led2(void* parameter) { while (1) { GPIO_SetBits(GPIOD,GPIO_Pin_10); rt_thread_delay(100); GPIO_ResetBits(GPIOD,GPIO_Pin_10); rt_thread_delay(100); } }
[ 本帖最后由 lujunlxx520 于 2011-4-18 08:16 编辑 ]
|