传媒学子 发表于 2019-4-22 22:45

【RT-Thread读书笔记】3. RT-Thread 学习4-5章读后感

本帖最后由 传媒学子 于 2019-4-22 22:46 编辑


【RT-Thread读书笔记】3. RT-Thread 学习4-5章读后感

第四章
这一章内容较少,主要是打个铺垫,教我们如何新建keil工程,以及文件组的布局,以及如何设置一些参数。
第五章
这一章,主要讲的是裸机线程与多线程系统的定义和区别。这里需要我们认真体会一下,为后边RTOS的学习打下一个基础。
裸机系统通常是指没有采用RTOS的系统,一般分为轮询系统和前后台系统。
轮询系统:即常见的先初始化各个硬件模块,然后在while(1)中不断轮询各个任务。
例程:
int main(void)
{
    /* 硬件相关初始化 */
    HardWareInit();

    /* 无限循环 */
    while (1)
    {
         /* 处理事情1 */
      DoSomething1();
      
      /* 处理事情2 */
         DoSomething2();
         
         /* 处理事情3 */
      DoSomething3();
    }
}

优点是:严格顺序执行。缺点是:如果遇到多线程任务时,往往会造成阻塞;有一个任务长时间卡在这里,系统就无法继续轮询下去。
在此基础上,加上中断,便是前后台系统。前后台系统能够打断主函数中的大循环,插入一些紧急的任务。加上中断嵌套,即可满足很多应用。
例程:

int flag1 = 0;
int flag2 = 0;

int main(void)
{
    /* 硬件相关初始化 */
    HardWareInit();

    /* 无限循环 */
    while (1)
    {
         /* 处理事情1 */
      DoSomething1();
      
      /* 处理事情2 */
         DoSomething2();
         
         /* 处理事情3 */
      DoSomething3();
    }
}

void ISR1(void)
{
    flag1 = 1;
    DoSomething4();
}

void ISR2(void)
{
    flag1 = 1;
    DoSomething5();
}

优点:克服了单纯轮询系统只能按大循环中顺序执行的弱点。
缺点:中断服务函数依然是一个顺序执行块,如果在中断服务函数中的事件占用的时间过长,系统主循环中的任务不能得到及时处理,实时性还是很差。如果主函数中有显示函数,则会造成显示中断。
因此,为了克服上述缺点,并继承上述优点,便出现了多线程系统,也叫RTOS。
多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。线程也具有优先级,提高了系统的实时性。
多线程的每个线程都相当于一个小的while(1)无线循环,每个线程相互独立,互不干扰,后边会介绍线程中如何共享变量,传递信息。
多线程会需要额外的RAM ROM来保存相关线程的上下文(函数运行所需要的环境),并在线程被启用的时候供系统使用。
下面是三种系统的区别:

虽然,RTOS确实显得高大上,但是不得不说一下,三种类型其实都有各自的使用场合。只是,RTOS的使用是一种趋势,但绝不是说,其它两种就不好了。大家要在自己的项目中,根据具体需求来决定使用哪种模型。
此内容由EEWORLD论坛网友传媒学子原创,如需转载或用于商业用途需征得作者同意并注明出处


mobilefone 发表于 2019-4-23 07:01

{:1_103:}

sf116 发表于 2019-11-15 21:48

<p>打字不容易,加油</p>
页: [1]
查看完整版本: 【RT-Thread读书笔记】3. RT-Thread 学习4-5章读后感