嵌入式考试2

1、uC/OS的性能特点:
(1)可公开源代码
(2)移植性
(3)可固化
(4)可裁剪
(5)多任务
(6)占先式
(7)可确定性
(8)任务栈
(9)系统服务
(10)中断管理
(11)稳定性与可靠性


2、uC/OS提供的系统服务:
信号量
带互斥机制的信号量
优化优先级倒置的问题
事件标志
消息信箱
消息队列
内存管理
时钟管理
任务管理


3、uc/osII的文件结构分为4个部分,应用软件层位于最顶端,由用户自行编写。与处理器无关代码即是内核部分,包括了所有内核代码和系统功能代码。Uc/osII配置定义了所有与内核裁减有关的宏定义及主头文件。Uc/osII移植包含了与处理器相关的代码。


4、uC/OSII的任务:
从应用程序设计的角度来看,uC/OS-II的任务就是一个线程,就是一个用来解决用户问题的C语言函数和与之相关联的一些数据结构而构成的一个实体。
从任务的存储结构来看,uC/OS-II的任务由三个部分构成:任务程序代码、任务堆栈和任务控制块。其中,任务控制块用来保存任务属性,任务堆栈用来保存任务工作环境,任务程序代码是任务的执行部分。


5、uC/OS-II的任务有两种:用户任务和系统任务。


6、任务的状态:
睡眠态
就绪态
运行态
挂起态
被中断态


7、uC/OS-II预定义了两个为应用程序服务的系统任务:空闲任务和统计任务。
空闲任务只是做了一个计数工作
注意!空闲任务中没有调用任务延时函数


8、任务的优先级:
uC/OS-II分为64个优先级别,每一个级别都用一个数字表示。
     数字0的级别最高,数字越大优先级别越低。
通常,一个应用程序的任务数小于64,用户可根据应用程序的需要,在OS_CFG.H中设置OS_LOWEST_PRIO,即定义了可供使用的优先级别共OS_LOWEST_PRIO +1个。
固定地,系统总是把最低优先级别自动赋给空闲任务,如果系统中还有统计任务,则其优先级别为OS_LOWEST_PRIO -1。


思考题:如果希望应用程序中任务的优先级别为28个,则表示最低优先级别的常数OS_LOWEST_PRIO值应该是多少?如果应用程序中使用了系统提供的空闲任务和统计任务,则该应用程序最多可以安排多少个任务?


答:表示最低优先级别的常数OS_LOWEST_PRIO值应该为27,优先级别分别为0、1、2、3、……、27;由于系统空闲任务占用了优先级别27,统计任务占用了优先级别26,则应用程序中最多可以安排优先级别为0、1、2、3、……、25的26个任务。


9、任务堆栈:
所谓堆栈,就是在存储器中按数据“后进先出(LIFO)”的原则组织的连续存储空间。


10、任务堆栈的创建:
Typedef   unsigned   int   OS_STK;            // 该类型长度为16位
#define  TASK_STK_SIZE  512                     // 定义堆栈长度(1024字节)
OS_STK TaskStk[TASK_STK_SIZE];           //定义一个数组来作为任务堆栈
创建任务函数OSTaskCreate()原型如下:
  INT8U  OSTaskCreate(
      void (*task)(void *pd), //指向任务的指针
      void *pdata, //传递给任务的参数
      OS_STK *ptos, //任务堆栈栈顶的指针
        INT8U  prio ); //指定任务优先级别的参数


思考题:创建一个任务MyTask,堆栈的长度为128字节,优先级别为20,任务参数pdata的实参为ttt。试写出需要的代码。


#define MyTaskStkN 64
OS_STK  MyTaskStk[MyTaskStkN];


void main(void)
{
……
OSTaskCreate(
      MyTask,
      &ttt,
      &MyTaskStk[0],
        20);
……
 }




11、任务堆栈的初始化:其实,任务堆栈的初始化就是对该任务的虚拟处理器的初始化(复位)。


12、 一旦任务建立,一个任务控制块OS_TCB就被赋值。
任务控制块是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,任务的当前状态,任务的优先级等。
任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地继续执行。
OS_TCB全部驻留在RAM中。




13、任务控制块就相当于是一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理的。 


14、任务控制块链表
uC/OS-II用两条链表来管理任务控制块:
 空任务块链表(所有任务控制块还没有分配给任务),是在应用程序调用函数OSInit()对系统进行初始化时建立的。
 任务块链表(所有任务控制块已经分配给任务),是在调用函数OSTaskCreate()创建任务时建立的。建立任务控制块链表的具体做法是,从空链表摘取一个空任务控制块,然后填充上任务属性后再形成新的链表。


15、就绪任务表及任务调度
多任务操作系统的核心:任务调度。
调度定义:就是通过一个算法在多个任务中确定那个任务来运行。做这项工作的就是调度器。
任务调度的思想:总是让优先级最高的就绪任务处于运行状态。
uC/OS-I进行任务调度的依据:任务就续表。




16、如何根据任务的优先级别查找任务在就绪表的位置呢


例:已知某一个已经就绪的任务优先级别为prio=30,试判断应该在就绪表的哪一位置上置1。


分析:由于优先级别是一个单字节的数字,而且最大值不会超过63,即二进制00111111,因此,可以把优先级别看成是一个6位的二进制数,这样就可以用高3位(D5、D4、D3)来指明变量OSRdyGrp的具体数据位,并用来确定就绪表数组元素的下标;用低3位(D2、D1、D0)来指明该数组元素的具体数据位。


答:30的二进制形式为00011110,其低6位为011110,于是可知应该在OSRdyTbl[3]的D6位上置1,同时要把变量OSRdyGrp的D3位置1。


17、任务的调度:
任务切换:在多任务系统中,令CPU中止当前正在运行的任务而去运行另一个任务的工作。
任务调度:按某种规则进行任务切换的工作。
任务调度由任务调度器完成,调度器主要工作:
(1)在任务就绪表中查找具有最高优先级别的就绪任务。
  (2)实现任务切换。


18、任务切换的两个步骤:
(1) 获得待运行任务的TCB指针。
(2) 进行断点数据的切换。


19、任务切换过程
根据就绪表获得待运行任务的任务控制块指针-》处理器的SP=任务块中保存的SP-》恢复待运行任务的运行环境-》处理器的PC=任务堆栈中的断点地址


20、创建任务的一般方法:
uC/OS-II的规定:在OSStart()启动任务调度之前必须创建至少一个任务。
uC/OS-II不允许在中断服务程序中创建任务


21、所谓挂起一个任务,就是停止这个任务的运行。


22、小结:
(1) 任务由任务控制块、任务堆栈和任务代码三部分组成。系统通过任务控制块来感知和控制任务;任务堆栈主要用来保护断点和恢复断点;任务代码是一个超循环结构,它描述了任务的执行过程。在创建一个任务时,函数OSTaskCreate()或OSTaskCreateExt()负责给任务分配任务控制块和任务堆栈,并对它们进行初始化,然后把任务控制块任务堆栈、任务代码三者关联起来形成一个完整任务。
(2) 系统是按任务就绪表和任务的优先级别来调度任务的。执行任务调度工作的是调度器,它负责查找具有最高优先级别的就绪任务并运行它,同时把这个任务TCB的指针存放在OSTABCur中。通常,系统在调用API函数和运行中断服务程序之后都要调用函数OSSched()来进行一次任务调度。
(3) 任务切换的核心工作是任务堆栈指针的切换。
(4) 任务调度器代码的设计,使得它的运行时间与系统中的任务数无关,从而使它满足了实时系统的要求。
(5) 任务的优先级别也是任务的标识。
(6) 应用程序首先应该调用函数OSInit()对全局变量和数据结构进行初始化已建立uC/OS-II的运行环境。
(7) 应用程序是通过调用函数OSStart()开始进入多任务管理的,但在调用函数OSStart()之前,必须至少创建了一个任务。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式考试题及其答案是指在嵌入式系统的领域针对相关知识点所出的考试题目以及对应的答案解析。这些考试题目通旨在测试考生对嵌入式系统硬件、软件、通信等方面的掌握程度。 嵌入式系统是现代社会广泛存在的一种特殊计算机系统,它被嵌入到其他设备或系统,用于控制和管理硬件,以完成特定的功能。考试题目可能包括以下方面的内容: 1. 嵌入式系统的基本概念和架构:考题可能涉及嵌入式系统的定义、特点、硬件和软件组成等方面的知识。 2. 实时操作系统(RTOS):嵌入式系统通需要实时性能,所以RTOS是非重要的考察内容,题目可能围绕RTOS的特性、调度算法、断处理等内容展开。 3. 嵌入式系统开发:这部分内容可能涉及到不同的嵌入式处理器架构,编程语言如C、汇编、Verilog等的掌握程度,以及相关的开发工具和流程。 4. 嵌入式系统通信:对于需要与其他设备或系统进行通信的嵌入式系统,相关的通信协议和接口是重要的考试内容,如UART、SPI、I2C、CAN等。 5. 嵌入式系统的测试与调试:这部分内容可能涉及到测试方法、调试工具以及见的问题分析和解决方法。 对于以上各个方面的知识点,答案解析可能会提供具体的应用实例及其原理解释,以充分展示考生对知识的理解和应用能力。 需要注意的是,由于嵌入式系统的广泛应用领域和深度,考试题目和答案可能有很多变化,具体内容还需根据考试的题目和要求来进行学习和准备。参考CSDN等相关技术平台上的教程以及嵌入式系统领域的经典教材可以更好地为考试做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值