安阳工学院计科系考试试卷UCOSII_最终.doc_第1页
安阳工学院计科系考试试卷UCOSII_最终.doc_第2页
安阳工学院计科系考试试卷UCOSII_最终.doc_第3页
安阳工学院计科系考试试卷UCOSII_最终.doc_第4页
安阳工学院计科系考试试卷UCOSII_最终.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、概念1实时系统:指系统能够在限定的响应时间内提供所需水平的服务2ucos-ii最多管理64个任务3其中OS_TaskStat的优先级占62,OS_TaskIdle的优先级是634ucos-ii的优先级号是063,值越小优先级越高5临界区的两个宏OS_ENTER_CRITICAL、OS_EXIT_CRITICAL:a)第一种方式:OS_ENTER_CRITCAL被定义成关中断,OS_EXIT_CRITICAL被定义成开中断,这种方式有一个问题,如果在禁止中断的情况下调用uc/os-ii函数,那么从uc/os-ii函数返回时,中断可能会变成允许的了。b)第二种方式:OS_ENTER_CRITICAL被定义为先将中断状态保存到堆栈中,然后关中断,OS_EXIT_CRITICAL被定义为再从堆栈中恢复原来中断开/关状态。这种方式也有一个问题,因为编译器不知道堆栈指针已经被OS_ENTER_CRITICAL中的push指令改变了。那么所有采用栈指针相对寻址模式的局部变量都会出现偏差并导致严重问题。c)第三种方式:执行OS_ENTER_CRITICAL,将中断状态字保存在了局部变量中,执行OS_EXIT_CRITICAL时,将中断状态字从局部变量中恢复过了,这样即能保存执行OS_ENTER_CRITICAL时的程序中断状态,又不会影响栈指针。6OSRdyTbl就绪表的大小由OS_RDY_TBL_SIZE来定义,由OS_LOWEST_PRIO来决定的,OS_RDY_TBL_SIZE = (OS_LOWEST_PRIO) / 8u) + 1u)7TCB的内部定义:struct os_tcb OS_STK*OSTCBStkPtr,指向当前任力的堆栈栈顶的指针struct os_tcb*OSTCBNext,指向下一个任务控制块struct os_tcb*OSTCBPrev,指向上一个任务控制块OS_EVENT*OSTCBEventPtr,指向事件控制块的指针。void*OSTCBMsg,指向传递给任务的消息的指针OS_FLAG_NODE*OSTCBFlagNode,指向事件标志结点的指针OS_FLAGS OSTCBFlagsRdy,当任务等待事件标志组时,OSTCBFlagRdy是使任务进入就绪态的事件标志INT16U OSTCBDly当需要把任务延时若干时钟节拍时,或者需要把任务挂起一段时间以等待某个事件的发生时,须用到这个变量。INT8U OSTCBStat,用于指示任务状态INT8U OSTCBPrio用于指示任务的优先级INT8U OSTCBX OSTCBY OSTCBBitX OSTCBBitY,用于加速就绪态的计算过程8TCB内部最重要的元素放在第一个单元叫OSTCBStkPtr,因数这个变量是惟一一个能用汇编语言处置的变量,将其放在结构最前面,使得在汇编语言中处理这个变量时较为容易。9.启动过程:OSInit(), OSTaskCreate(),OSStart(),开始时钟使能节拍。10.中断服务流程:保存全部CPU寄存器;调用OSIntEnter或OSIntNesting直接加1;执行用户代码做中断服务;调用OSIntExit();恢复所有CPU寄存器;执行中断返回指令;11异步串行通信:单工:信息在两点之间只能单方向发送的工作方式。双工:信息在两点之间能够在两个方向上发送的工作方式起始位:下降沿起始位,空闲电平是1波特率单位:bpsbit/s12键盘什么时候用矩形键盘:当键盘多于5个时,键盘的核心问题是去抖。13可以被4整除且不能被100整除即为闰年;可以被400整除的为闰年;二、名词解释什么叫前后台系统:前后台系统又叫超循环系统,是由应用程序和中断服务程序组成。应用程序是一个无限循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。中断服务程序处理异步事件,这部分时间相关性很强的关键操作靠中断服务来保证,可以看成前台行为。什么叫多任务系统:多任务系统是靠CPU在许多任务之间转换和调度,以达到所有任务并发执行的功能的系统。什么叫时钟节拍?时钟节拍是特定的周期性中断。这个中断可以看做是系统心脏的脉动。操作系统通过时钟节拍为任务提供时间管理。什么叫任务状态?任务状态是任务当前所处于的一种状态。共有5种状态: 睡眠态:任务驻留在程序空间,还没有交给uc/os-ii来管理。把任务交给uc/os-ii是通过OSTaskCreate()或OSTaskCreateExt()来实现的。这些调用只是用于告诉uc/os-ii任务的起邕地址在哪里;任务建立时,用户给作协务赋予的优先级是多少,任务要使用多少栈空间用等等。就绪态:任务一量建立,这个任务就进入了就绪态,准备运行。运行态:调用OSStart()可以启动多任务。该函数运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务。优先级最高的任务就这样进入了运行态。等待状态:正在运行的作任务延迟一段时间或等待某一事件的发生将进入就等待状态。中断服务态:正在运行的任务是可以被中断的,除非该任务中断关闭,或者uc/os-ii将中断关闭。被中断了的任务于是进入了中断服务态。什么是量化?将时间和空间的连续的模拟信号转换为数字信号叫量化。三、简答题: 1ECB中完整的数据结构描述。typedef structINT8UOSEventType;/*事件类型*/INT8UOSEventGrp;/*等待任务所在的组*/INT8UOSEventTblOS_EVENT_TBL_SIZE;/*等待任务所在的列表,与OSEventGrp相配合构成与就绪表相同的结构*/INT16UOSEventCnt;/*当事件控制块用于信号量时,此变量用于信号量计数;当事件控制块用于互斥信号量时,此变量用于互斥型信号量和优先级继承优先级(PIP)的计数器。void*OSEventPtr;/*指向消息或消息队列的指针*/ OS_EVENT;2就绪表中完整的数据结构描述就绪表中有2个变量,OSRdyGrp和OSRdyTbl。OSRdyGrp中任务按优先级分组,8个任务为一组。OSRdyGrp的每一位表示8组作任务中每一组是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl中相应的元素的相应位被置1。 3TMR的数据结构struct TMRBOOLEANTmrEn;/*用于启动或禁止倒计数过程*/INT16UTmrCtr;/*计数器当前值*/INT16UTmrInit;/*计数器初始值*/void(*TmrFnct)(void *);/*计数器为0时被调用的函数的指针*/void *TmrFnctArg;/*函数TmrFnct的参数*/; 4OS_TCB *OSTCBPrioTblOS_LOWEST_PRIO + 1u;OSTCBPrioTblOS_LOWEST_PRIO 1里面存放的是OS_TaskStat任务。OSTCBPrioTblOS_LOWEST_PRIO里面存放的是OS_TaskIdle任务。uc/os-ii建议保留4个最高优先级和4个最低优先级的任务,供心后uc/os-ii的版本使用。 5行列式矩形扫描算法所有的行(输出端口)被强行设置为低电平; 扫描每一列,若全为高电平,则没有键按下;否则,找到为低电平的列;锁定该低电平的列,行逐次送低电平0;若锁定的列为低电平,则按下的键必在此行。 6任务状态转换图 7时钟负载重的情况下的两种解决方法: 1. 那么可以从任务级等待调用OSTimeTick();代码如下: TickTask的优先级必须大于应用程序中所有其他作任务优先级的任务。void TickTask(void *pdata)pdata = pdata;for (; ;) OSMboxPend();OSTimeTick();OS_Sched();void OSTickISR(void)保存处理器寄存器的值;调用OSIntEnter(), 或是将OSIntNesting 加1;if (OSIntesting = 1)OSTCBCur-OSTCBStkPtr = SP;发哑消息(即(void *)1)给时钟节拍邮箱;调用OSIntExit();恢复处理器寄存器的值;执行中断返回指令;2. 使用计数信号,信号会“记住”时钟脉冲数,因此在处理器的负载减少时,时钟任务最终会追上来。每个时钟脉冲或一整秒过去后,时钟脉冲ISR给计数信号发送一个信号。四、程序填充1闰年的判断逻辑表达式If (!(year %4) & (year %100) | !(year % 400)闰年Else平年2生成时间戳函数代码如下:TS ClkMakeTS (INT8U month, INT8U day, INT16U yr, INT8U hr, INT8U min, INT8U sec) TS ts; yr -= CLK_TS_BASE_YEAR; ts = (INT32U)yr 26) | (INT32U)month 22) | (INT32U)day 17); ts |= (INT32U)hr 12) | (INT32U)min OSTCBStkPtr; 从新任务堆栈中恢复处理器的所有寄存器; 执行中断返回指令;5. OSCtxSw()的示意性代码:void OSCtxSw() 保存处理器寄存器; 在当前任务的任务控制块中保存当前任务的堆栈指针: OSTCBCur-OSTCBStkPtr = stack pointer; OSTaskSwHook(); OSTCBCur=OSTCBHighRdy; OSPrioCur=OSPrioHighRdy; 得到将要开始运行的任务的堆栈指针:Stack pointer = OSTCBHighRdy-OSTCBStkPtr; 从新任务的任务堆栈中恢复处理器所有寄存器的值; 执行中断返回指令;6. OSIntCtxSw()函数的示意性代码:void OSIntCtxSw() 调用用户定义的OSTackSwHook(); OSTCBCur=OSTCBHighRdy; OSPrioCur=OSPrioHighRdy; 得到将要重新执行的任务的堆栈指针: Stack pointer = OSTCBHighRdy-OSTCBStkPtr; 从新任务堆栈中恢复所有寄存器; 执行中断返回指令;7. OSTickISR()函数的示意性代码:void OSTickISR() 保存处理器寄存器; 调用OSInitEnter()或者OSInitNesting加1; if(OSInitNesting =1) OSTCBCur-OSTCBStkPtr=stack pointer; 给产生中断的设备清中断; 重新允许中断; OSTimeTick(); OSInitExit(); 恢复处理器寄存器; 执行中断返回指令; 27.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论