码迷,mamicode.com
首页 > 编程语言 > 详细

RT-Thread 线程调度

时间:2016-05-17 09:43:50      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

/*  变量分配4字节对齐 */
ALIGN(RT_ALIGN_SIZE)

/*  静态线程的 线程堆栈*/
static rt_uint8_t thread1_stack[512];
static rt_uint8_t thread2_stack[512];

/* 静态线程的 线程控制块 */
static struct rt_thread thread_test1;
static struct rt_thread thread_test2;


static void test1_thread_entry(void* parameter);
static void test2_thread_entry(void* parameter);

void demo_thread_creat(void)
{
    rt_err_t result;

    /* 创建静态线程 : 优先级 15 ,时间片 10个系统滴答 */
    result = rt_thread_init(&thread_test1,
                                  "test1",
                       test1_thread_entry, 
                                  RT_NULL,
           (rt_uint8_t*)&thread1_stack[0], 
                       sizeof(thread1_stack), 
                                       15, 
                                       10);
    if (result == RT_EOK)
    {
        rt_thread_startup(&thread_test1);
    }

    /* 创建静态线程 : 优先级 16 ,时间片 25个系统滴答 */
    result = rt_thread_init(&thread_test2,
                                  "test2",
                       test2_thread_entry, 
                                  RT_NULL,
           (rt_uint8_t*)&thread2_stack[0], 
                    sizeof(thread2_stack),
                                       16,
                                      25);
    if (result == RT_EOK)
    {
        rt_thread_startup(&thread_test2);
    }

}

void test1_thread_entry(void* parameter)
{

    rt_uint32_t i;
    /* 无限循环*/
    while (1)
    {
        for(i = 0; i<10; i++)
        {
            rt_kprintf(" %d \r\n", i);
            /* 等待1s,让出cpu权限,切换到其他线程 */
            rt_thread_delay( 100 );

        }
    }
}

void test2_thread_entry(void* parameter)
{
    rt_uint32_t i=0;
    /* 无限循环*/
    while (1)
    {
        rt_kprintf(" test2 thread count:%d \r\n", ++i);
        /* 等待0.5s,让出cpu权限,切换到其他线程 */
        rt_thread_delay(50);
    }
}

技术分享

程序运行分析:
1、首先系统调度 test1 线程投入运行,打印第 0 次运行的信息,然后通过延时函数将自己挂起 100 个时间片,系统将 test2 线程调度运行;
2、 test2 线程打印第 0 次运行信息,然后通过延时函数将自己挂起 50 个时间片;
3、系统中无任务运行,系统将空闲线程调入运行;
4、 50 个时间片后 test2 线程被唤醒,打印第 1 次运行的信息,再继续通过延时函数将自己挂起 50 个时间片;
5、系统中无任务运行,系统将空闲线程调入运行;
6、 50 个时间片时间到, test1 线程被唤醒,打印第 1 次运行信息,继续挂起 100 个时间片;
7、 test2 线程被唤醒,打印第 2 次运行的信息,再继续通过延时函数将自己挂起 50 个时间片;
8、系统中无任务运行,系统将空闲线程调入运行;
9、 50 个时间片后 test2 线程被唤醒,打印第 3 次运行的信息,再继续通过延时函数将自己挂起 50 个时间片;
10、循环执行 5-9 的过程。

 

RT-Thread 线程调度

标签:

原文地址:http://www.cnblogs.com/yygsj/p/5500332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!