zoukankan      html  css  js  c++  java
  • SYSBIOS学习笔记---线程(Threads)

     在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流。线程是一个能够调用一个函数或者中断服务程序的单点控制。在sysbios系统中一共有硬件中断(HWI)、软件中断(SWI)、任务(Task)、空闲线程(Idle)这四种线程,它们的优先级依次从高到低。关于HWI与SWI的创建笔者分别在SYSBIOS学习笔记---硬件中断(HWI)的创建SYSBIOS学习笔记---软件中断(SWI)的创建这两篇博客中进行了详细的讲解,本次将继续介绍Task与Idle线程的创建,并对比这四种的线程的特点及注意事项。

            Task与Idle线程的创建方式与HWI一样,或者说所有线程的创建都分为静态创建和动态创建这两种。下图是一个Task静态创建的配置界面图:

            所不同的是任务是有自己独立的栈(stack)的,这就意味着它可以被挂起。内核会为每个任务对象维护一份处理器关键寄存器的副本,以保证被挂起时不会丢失相关的数据。

    下面是软件中断线程的一些特点:

    1、SYS/BIOS系统内核组件

    2、一般在硬件中断线程(HWI)触发

    3、0-31优先级(默认0-15)

    4、无限制数量(内存允许情况下)

    5、不能被挂起必须一直运行到结束除非被抢占

    6、与硬件中断线程共用系统堆栈

    下面是任务线程的一些特点:

    1、SYS/BIOS系统内核组件

    2、0-31优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1)

    3、无限制数量(内存允许情况下)

    4、独立内存堆栈

    5、更先进的调度技术

    - 可以为等待某一事件的发生而被挂起

    - 任务会被其他更高优先级的线程打断

    6、数量和状态可以在程序执行时动态的更改

    7、优先级可以动态的修改

    下面是空闲(后台)线程的一些特点:

    1、SYS/BIOS系统内核组件

    2、非实时性线程

    3、当且仅当没有任何其他线程(HWI / SWI / TASK)运行时才会运行

    4、所有空闲线程运行在同一个优先级

    5、有数量限制

    6、可以被任何其它线程随时抢占

    7、默认任务堆栈,如果任务线程被禁用使用系统堆栈

    8、一个接一个运行,每一个空闲线程函数都会从开始执行到结束。所有函数执行完成之后再从第一个函数开始执行,周而复始。

    9、不要在空闲线程使用阻塞语句。

    下面给出的是动态创建一个任务线程的代码:

    [cpp] view plain copy
     
    1. Void TskInit(Void)  
    2. {  
    3.     Task_Params taskParams;  
    4.   
    5.     // 动态创建任务  
    6.     Task_Params_init(&taskParams);  
    7.     taskParams.priority = 1;  
    8.     tsk1 = Task_create(UserKEYTsk, &taskParams, NULL);  
    9. }  

    此段代码创建了一个名字叫UserKEYTsk的任务,它的优先级为1,句柄为tsk1。

    下图对比了各种线程的一些特性:

     

    下图显示出了线程抢占的关系:

    硬件中断的内存消耗:

    软件中断的内存消耗:

    任务的内存消耗:

    可见任务线程的内存消耗还是相当大的,对于C6000的来说,是其硬件中断的10倍了。

  • 相关阅读:
    ***EF中的问题(复习的同学可略过)
    课堂练习
    MVC-07 案例2
    MVC-06 安装部署
    MVC-05 Model(2)
    MVC-05 Model(1)
    MVC-04 视图(3)
    Learning Web
    MVC-04 视图(2)
    hdu 1272 并查集
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9116603.html
Copyright © 2011-2022 走看看