版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、什么是实时操作系统实时操作系统定义:实时操作系统(RTO$是指当外界事件或数据产生时,能够接受并以足够 快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对 处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实 时任务协调一致运行的操作系统实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操 作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这 是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完 成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操 作系统实时操作系统的特征:高精度计时,系统计时精度是
2、影响实时性的一个重要因素。在实时应用系 统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算 一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作 系统实现的高精度计时功能。多级中断机制,一个实时应用系统通常需要处理多种外部信息或事件,但 处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处 理。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事 件进行及时响应和处理。实时调度机制,实时操作系统不仅要及时响应实时事件中断,同时也要及 时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到 两个进程之间的切换,只能在确保
3、“安全切换”的时间点上进行,实时调度机 制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立 更多“安全切换”时间点,保证及时调度实时任务。实时操作系统的特点:异步的事件响应;切换时间和中断延迟时间确定; 优先级中断和调度;抢占式调度实时操作系统在飞控中的重要性操作系统在飞控系统中的重要性飞行控制系统是无人机的重要组成部分,是飞行控制算法的运行平台,它 的性能好坏直接关系着无人机能否安全可靠的飞行随着航空技术的发展,无人机飞行控制系统正向着多功能、高精度、小型 化、可复用的方向发展。高精度要求无人机控制系统的精度高,稳定性好,能 够适应复杂的外界环境,因此控制算法比较复杂,计算
4、速度快,精度高小型化则对控制系统的重量和体积提出了更高的要求,要求控制系统的性 能越高越好,体积越小越好。止匕外,无人机飞行控制系统还要具有实时、可靠、 低成本和低功耗的特点近年来,实时操作系统在多媒体通信、在线事务处理、生产过程控制、交 通控制等各个领域得到广泛的应用。并且实时操作系统将实时多任务机制以功 能(函数)调用的方式提供给用户,它的系统调用时标准化、规格化的,使得 开发人员不必再考虑多个实时任务的同步问题,从而有更多的精力致力于应用 程序的开发FreeRTOS实时操作系统FreeRTOS(读作free-arr-toss)是一个嵌入式系统使用的开源实时操作系统。FreeRTOS被设计
5、为“小巧,简单,和易用”,能支持许多不同硬件架构以 及交叉编译器。FreeRTOS 自2002年Richard Barry 开始开发以来,一直都在积极开发中。 就像所有操作系统一样,FreeRTOS的主要工作是执行任务。大部分 FreeRTOS 的代码都涉及优先权、调度以及执行用户自定义任务。但又与所有其他操作系 统不同,FreeRTOS是一款运行在嵌入式系统上的实时操作系统。大部分FreeRTOS致力于执行任务,所以你可以很好地看到它究竟是如何做到 的。FreeRTOS的主要特点如下:支持抢占式调度,合作式调度和时间片调度SafeRTOS作为FreeRTOS的衍生品大大提高了 FreeRTO
6、S在代码完整性 方面的能力用于低功耗的Tickless 模式支持35种系统架构(哈佛架构)FreeRTOS-MP收持M3/M4/M7内核的MPU (内存保护单元)设计的简单易用,典型的内核使用大小在 4k-9k移植非常简单,代码主要用 C编写同时支持合作式和抢占式任务支持消息队列、二值信号量、计数信号量、递归信号量和互斥信号量, 可用于任务与任务间的消息传递和同步,任务与中断间的消息传递和同 步优先级继承方式的互斥信号量高效的软件定时器强大的跟踪执行函数堆栈溢出检查提供丰富的,配置好的工程例子提供论坛技术支持,有可选的商业支持和许可版本任务的数量不限任务优先级数量不限 多个任务可以分配相同优先
7、级,即支持时间片调度免费的开发工具免费的嵌入式软件源码免版权费FreeRTOS1一个相对较小的应用程序。最小化的 FreeRTO汕核仅包括3个 (.c)文件和少数头文件,总共不到 9000行代码,还包括了注释和空行。一个 典型的编译后(二进制)代码映像小于 10KRFreeRTOS勺代码可以分解为三个主要区块:任务,通讯和硬件接口。任务:大约有一半的FreeRTOS勺核心代码用来处理多数操作系统首要关 注的问题:任务。任务是给定优先级的用户定义的 C函数。task.c和 task.h完成了所有有关创建、调度和维护任务的繁重工作。通讯:任务很重要,不过任务间可以互相通讯则更为重要!它给我们带 来
8、FreeRTOS勺第二项任务:通讯。大约40%勺FreeRTOSK心代码是用 来处理通讯的。queue.c和queue.h是负责处理FreeRTOS勺通讯的。任 务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资 源的使用情况。硬件接口:接近9000行的代码拼凑起基本的 FreeRTOS是硬件无关的; 相同的代码都能够运行,不论 FreeRTOS1运行在不起眼的8051,还是 最新、最炫的ARMW核上。大约有6%勺FreeRTOS勺核心代码,在硬件 无关的FreeRTO汕核与硬件相关的代码间扮演着垫片的角色。FreeRTOS User Tasks and ISR. Code*,Pr
9、eeRTOS Hardwore-Independent Code*- FrccRTOS Hardw,arc-Dependent Code HardwareFreeRTOS支持的调度方式FreeRTOS操作系统支持三种调度方式:抢占式调度,时间片调度和合作式调度实际应用主要是抢占式调度和时间片调度,合作式调度用到的很少。抢占式调度,每个任务都有不同的优先级,任务会一直运行直到被高优 先级任务抢占或者遇到阻塞式的 API函数,比如vTaskDelay (延时函 数)。时间片调度,每个任务都有相同的优先级,任务会运行固定的时间片个 数或者遇到阻塞式的API函数,比如vTaskDelay,才会执行同优
10、先级 任务之间的任务切换。3.4.3抢占式调度器在实际的应用中,不同的任务需要不同的响应时间。例如,我们在一个应 用中需要使用电机,键盘和 LCD显示。电机比键盘和LCD需要更快速的响应, 如果我们使用合作式调度器或者时间片调度,那么电机将无法得到及时的响应, 这时抢占式调度是必须的。如果使用了抢占式调度,当前最高优先级的任务一旦就绪,总能得到CPU的控制权。比如,当一个运行着的任务被其它高优先级的任务抢占,当前任务 的CPU用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 CPU勺控制权并运行。又比如,如果中断服务程序使一个高优先级的任务进入 就绪态,中断完成时,被中断的低优先级
11、任务被挂起,优先级高的那个任务开 始运行。使用抢占式调度器,使得最高优先级的任务什么时候可以得到CPU勺控制权并运行是可知的,同时使得任务级响应时间得以最优化。3.4.4时间片调度器在小型的嵌入式RTOS中,最常用的的时间片调度算法就是 Round-robin 调度算法。这种调度算法可以用于抢占式或者合作式的多任务中。另外,时间 片调度适合用于不太要求任务实时响应的情况。实现Round-robin调度算法需要给同优先级的任务分配一个专门的列表, 用于记录当前就绪的任务,并为每个任务分配一个时间片(也就是需要运行的 时间长度,时间片用完了就进行任务切换)。在FreeRTOS操作系统中只有同优先级
12、任务才会使用时间片调度,另外还 需要用户在FreeRTOSConfig.h文件中使能宏定义:#define configUSE_TIME_SLICING 1默认情况下,此宏定义已经在 FreeRTOS.h文件里面使能了,用户可以不 用在FreeRTOSConfig.h文件中再单独使能。任分优先级,A时间13.5任务及任务优先级任务和协程在应用程序可以使用任务也可以使用协程,或者两者混合使用,但是任务 和协程使用不同的API函数,因此在任务和协程之间不能使用同一个队列或信 号量传递数据。通常情况下,协程仅用在资源非常少的微处理器中,特别是 RAMt常稀缺 的情况下。目前协程很少被使用到,因此对于
13、协程 FreeRTOS(乍者既没有把它删 除也没有进一步开发。简而言之:使用RTOS勺实时应用程序可认为是一系列独立任务的集合。每个任务在自己的环境中运行,不依赖于系统中的其它任务或者RTOSM度器。在任何时刻,只有一个任务得到运行,RTO曲度器决定运行哪个任务。调度器会 不断的启动、停止每一个任务,宏观看上去就像整个应用程序都在执行。作为 任务,不需要对调度器的活动有所了解,在任务切入切出时保存上下文环境(寄存器值、堆栈内容)是调度器主要的职责。为了实现这点,每个任务都需要有自己的堆栈。当任务切出时,它的执行环境会被保存在该任务的堆栈中, 这样当再次运行时,就能从堆栈中正确的恢复上次的运行环
14、境。以下为几点任 务概要:?简单?没有使用限制?支持完全抢占?支持优先级?每个任务都有自己的堆栈,消耗 raM$多如果使用抢占,必须小心的考虑可重入问题任务状态一个任务的状态可为下面中的一个:运行:如果一个任务正在执行,那么说这个任务处于运行状态。此时它占 用处理器。就绪:就绪的任务已经具备执行的能力(不同于阻塞和挂起),但是因为 有一个同优先级或者更高优先级的任务处于运行状态而还没有真正执行。阻塞:如果任务当前正在等待某个时序或外部中断,我们就说这个任务处 于阻塞状态。比如一个任务调用 vTaskDelay()后会阻塞到延时周期到为止。任 务也可能阻塞在队列或信号量事件上。进入阻塞状态的任务
15、通常有一个“超时” 周期,当事件超时后解除阻塞。挂起:处于挂起状态的任务同样对调度器无效。仅当明确的分别调用vTaskSuspend()和xTaskResume() API函数后,任务才会进入或退出挂起状态。不可以指定超时周期事件(不可以通过设定超时事件而退出挂起状态)。下图为任务之间的状态切换图每个任务都要被指定一个优先级,FreeRTOS中任务的最高优先级是通过 FreeRTOSConfig.h文件中的corfigMAX_PRIORITIES进行配置的,用户实际可 以使用的优先级范围是0到configMAX_PRIORITIES - 1。比如我们配置此宏 定义为5 ,那么用户可以使用的优先
16、级号是 0,1,2,3,4 ,不包含5。用户配置任务的优先级数值越小,那么此任务的优先级越低,空闲任务的 优先级是0。建议用户配置宏定义configMAX_PRIORITIES的最大值不要超过32 ,即用户任 务可以使用的优先级范围是0到31。idefiTie n tigUS E_ F ELEI# de fins c ? n f igUS E_ I DLE_EIOOK=+二匚= -r.f -T-h 三-:产tdefin confiaCPU clock hzi0f uns;gned Icnq ) 1)I define confIgMMC PRIORITIES 5 )0 1 2 3 4|defin
17、e configHINIMAL_STACK_SlZE ( ( unsigned short ) 12c )任务最小堆栈 idefine conXiglOIAI HRE 5I3E ( ( size t | JO * 102 任务忘蛙栈define configHAX_IA5_MAHE_L5N ( 1tdefirie c3-figU5E TRACT FACILIIT 1ti&rxne conrigUE Id 3jr 工工匚苴5fderine cjnrgiDLE 5习。口二口 yield对于初学者,有时候会纠结任务优先级设置为多少合适,因为任务优先级 设置多少是没有标准的。这里我推荐一个任务优先级设
18、置方案。IRQ任务:IRQ任务是指通过中断服务程序进行触发的任务,此类任务 应该设置为所有任务里面优先级最高的。高优先级后台任务:比如按键检测,触摸检测,USB消息处理,出口消息处理等,都可以归为这一类任务。低优先级的时间片调度任务:比如 emWin的界面显示,LED数码管的显 示等不需要实时执行的都可以归为这一类任务。实际应用中用户不必拘泥于将这些任务都设置为优先级 1的同优先级任务,可以设置多个优先 级,只需注意这类任务不需要高实时性。空闲任务:空闲任务是系统任务。特别注意:IRQ任务和高优先级任务必须设置为阻塞式(调用消息等待 或者延迟等函数即可,不然优先级低的任务会被饿死),只有这样,
19、高 优先级任务才会释放CPU的使用权,从而低优先级任务才有机会得到 执行。任务优先级FreeRTOS 任务操作常用函数* vTaskPrioritySet()* uxTaskPriorityGet()* vTaskDelete()* vTaskSuspend()* vTaskSuspendAll()设置任务优先级获取任务优先级删除任务任务挂起挂起全部任务恢复全部任务任务优先级获取任务优先级修改任务恢复任务恢复绝对延时获取当前的系统时间* xTaskResumeAll()* uxTaskPriorityGet()* vTaskPrioritySet()* vTaskResume() * vTas
20、kResumeFromISR()* vTaskDelayUntil()* xTaskGetTickCount()* vTaskDelay()任务延时延迟多少个心跳周期,心跳周期由corfigTICK_RATE_HZ旨定,参数可以直接使用 n/portTICK_RATE_MS定义延迟 n msxTaskGetTickCount()获取任务滴答数taskYIELD()主动让出任务时间片注意:函数的具体用法请参考FreeRTOS API Reference官方手册任务问通讯一信号量semaphore信号量的概念FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量(以后简 称互斥量)和递归
21、互斥信号量(以后简称递归互斥量)。我们可以把互斥量和递归互斥量看成特殊的信号量。互斥量和信号量在用 法上不同:?信号量用于同步,任务间或者任务和中断间同步;?互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上 一把锁。?信号量用于同步时,一般是一个任务(或中断)给出信号,另一个任务 获取信号;?互斥量必须在同一个任务中获取信号、同一个任务给出信号。?互斥量具有优先级继承,信号量没有。?互斥量不能用在中断服务程序中,信号量可以。?创建互斥量和创建信号量的 API函数不同,但是共用获取和给出信号API函数;3.6.1互斥信号量互斥量是一个包含优先级继承机制的二进制信号量。用于实现同步(
22、任务 之间或者任务与中断之间)的话,二进制信号量是更好的选择,互斥量用于简 单的互锁。互斥信号量的用处:用于互锁的互斥量可以充当保护资源的令牌。当一个任务希望访问某个资 源时,它必须先获取令牌。当任务使用完资源后,必须还回令牌,以便其它任 务可以访问同一资源。互斥量和信号量使用相同的 API函数,因此互斥量也允许指定一个阻塞时 问。阻塞时间单位为系统节拍周期时间,数目表示获取互斥量无效时最多处于 阻塞状态的系统节拍周期个数。在很对场合下,某个东西的硬件资源仅仅只有一个,当低优先级任务占用 了,当高优先级任务需要占用该任务的时候,由于高优先级没有“令牌”,因 此高优先级任务也得等低优先级任务任务
23、执行完,归还令牌后,高优先级任务 申请令牌,并且占用硬件资源。在使用互斥信号量的时候,得注意下死锁的问 题二进制信号量二进制信号量看作只有一个项目的队列,因此这个队列只能为空或满(因 此称为二进制)。任务和中断使用队列无需关注谁控制队列 -只需要知道队列 是空还是满。二进制信号量的用处:二进制信号量和互斥量非常相似,但是有一些细微差别:互斥量包含一个 优先级继承机制,二进制信号量则没有这个机制。这使得二进制信号量更好的 用于实现同步(任务间或任务和中断间),互斥量更好的用于实现简单互斥。 本节仅描述用于同步的二进制信号量。考虑这样一种情况,一个任务用来维护外设。使用轮询的方法会浪费CPU资源并
24、且妨碍其它任务执行。更好的做法是任务的大部分时间处于阻塞状态(允许其它任务执行),直到某些事件发生该任务才执行。可以使用二进制信 号量实现这种应用:当任务取信号量时,因为此时尚未发生特定事件,信号量 为空,任务会进入阻塞状态;当外设需要维护时,触发一个中断服务例程,该 中断服务仅仅给出信号量(向队列写数据)。任务只是取信号,并不需要归还, 中断服务只是给信号计数信号量二进制信号量可以被认为是长度为1的队列,计数信号量则可以被认为 长度大于1的队列。止匕外,信号量使用者不必关心存储在队列中的数据,只需 关心队列是否为空计数信号量的用处:计数事件:在这种场合下,每当事件发生,事件处理程序将给出一个
25、 信号(信号量计数值增1),当处理事件时,处理程序会取走信号量(信号量 计数值减1)。因此,计数值是事件发生的数量和事件处理的数量差值。在这 种情况下,计数信号量在创建时其值为 00资源管理:这种用法下,计数值表示有效的资源数目。任务必须先获取信 号量才能获取资源控制权。当计数值减为零时表示没有的资源。当任务完成后, 它会返还信号量-信号量计数值增加。在这种情况下,信号量创建时,计数值 等于最大资源数目。FreeRTOS任务问计数信号量的实现任务间信号量的实现是指各个任务之间使用信号量实现任务的同步或者资源共 享功能FreeRTOS!作系统实现计数信号量的过程1、创建2个任务Task1和Tas
26、k20创建计数信号量可用资源为11、任务Task1运行过程中调用函数xSemaphoreTakei取信号量资源,如果信 号量没有被任务Task2占用,Task1将直接获取资源。如果信号量被 Task2占 用,任务Task1将由运行态转到阻塞状态,等待资源可用。一旦获取了资源并 使用完毕后会通过函数xSemaphoreGive释放掉资源。2、任务Task2运行过程中调用函数xSemaphoreTakei取信号量资源,如果信 号量没有被任务Task1占用,Task2将直接获取资源。如果信号量被 Task1占 用,任务Task2将由运行态转到阻塞状态,等待资源可用。一旦获取了资源并 使用完毕后会通过
27、函数xSemaphoreGive释放掉资源。3.6.3 FreeRTOS中断方式计数信号量的实现FreeRTOSt断方式信号量的实现是指中断函数和 FreeRTOS务之间使用信号 量。信号量的中断方式主要是用于实现任务同步,FreeRTOSt断方式计数信号量的实现方式1、创建2个任务Taskl和Task202、创建计数信号量可用资源为1。1、任务Taskl运行过程中调用函数xSemaphoreTake由于信号量的初始值是 0, 没有信号量资源可用,任务 Task1由运行态进入到阻塞态。2、Task1阻塞的情况下,用口接收到数据进入到了用口中断服务程序,在串口 中断服务程序中调用函数xSemap
28、horeGiveFromISR#放信号量资源,信号量数 值加1,此时信号量计数值为1,任务Task1由阻塞态进入到就绪态,在调度器 的作用下由就绪态又进入到运行态,任务 Task1获得信号量后,信号量数值减 1,此时信号量计数值又变成了 003、再次循环执行时,任务 Task1调用函数xSemaphoreTake由于没有资源可用 再次进入到阻塞态,等待串口释放信号量资源,如此往复循环。FreeRTOS信号量操作常用函数信号量-xSemaphoreHandlevSemaphoreCreateBinary()二值信号量创建xSemaphoreCreateMutex()创建互斥量台匕 耳匕)xSem
29、aphoreGiveFromISR()用于中断中释放信号量,该函数带有临界区功* xSemaphoreTake()操作,阻塞任务,除互斥信号量(Recursive Semaphore )外,都可以调用此函数计数信号量创建* xSemaphoreCreateCounting()任务问通讯-message消息队列的概念消息队列就是通过RTO汕核提供的服务,任务或中断服务子程序可以 将一个消息(注意,FreeRTOS肖息队列传递的是实际数据,并不是数据地址, RTX uCOS-II和uCOS-III是传递的地址)放入到队列。同样,一个或者多个任务可以通过 RTO汕核服务从队列中得到消息。 通常,先进
30、入消息队列的消息先传给任务,也就是说,任务先得到的是最先进 入到消息队列的消息,即先进先出的原则(FIFO) , FreeRTOS勺消息队列支持 FIFO和LIFO两种数据存取方式使用消息队列可以让RTO汕核有效地管理任务,而全局数组是无法做到 的,任务的超时等机制需要用户自己去实现。使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好 了这个问题,用户无需担心。使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。FIFO机制更有利于数据的处理。FreeRTOS任务间消息队列的实现任务问消息队列的实现是指各个任务之间使用消息队列实现任务间的通信消息队列运行条件:1、创建消
31、息队列,可以存放10个消息。2、创建2个任务Taskl和Task2,任务Taskl向消息队列放数据,任务 Task2从消息队列取数据。3、FreeRTOS勺消息存取采用FIFO方式。运行过程主要有以下两种情况:任务Taskl向消息队列放数据,任务 Task2从消息队列取数据,如果 放数据的速度快于取数据的速度,那么会出现消息队列存放满的情况, FreeRTOS勺消息存放函数xQueueSendJ持超时等待,用户可以设置超 时等待,直到有空间可以存放消息或者设置的超时时间溢出。任务Taskl向消息队列放数据,任务 Task2从消息队列取数据,如果 放数据的速度慢于取数据的速度,那么会出现消息队列
32、为空的情况, FreeRTOS勺消息获取函数xQueueReceive支持超时等待,用户可以设置 超时等待,直到消息队列中有消息或者设置的超时时间溢出。FreeRTOS中断港式消息队列的实现FreeRTOSt断方式消息队列的实现是指中断函数和FreeRTOS务之间使用消息队列稍息队列运行条件:1、创建消息队列,可以存放10个消息。2、创建1个任务Task1和一个串口接收中断。3、FreeRTOS勺消息存取采用FIFO方式。运行过程主要有以下两种情况:?中断服务程序向消息队列放数据,任务 Task1从消息队列取数据,如果 放数据的速度快于取数据的速度,那么会出现消息队列存放满的情况。由于中断服务程序里面的消息队列发送函数 xQueueSendFromISRf支持超时设置,所以发送前要通过函数 xQueueIsQueueFullFromlSR检测消息 队列是否满。?中断服务程序向消息队列放数据,任务 Taskl从消息队列取数据,如果 放数据的速度慢于取数据的速度,那么会出现消息队列存为空的情况。在FreeRTOS勺任务中可以通过函数 xQueueReceive获取消息,因为此函数可以设置超时等待,直到消息队列中有消息存放或者设置的超时时间 出 OFreeRTOS消息队列操作常用函数* 消息队列-xQueueHandle* xQueueCreate()NULL创建队列,会从堆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肾衰患者透析治疗评估表
- 机加车间周期性产能负荷分析管理细则
- 犬爪垫修剪安全保障手册规范
- 严重创伤多发伤救治协同流程
- 高层建筑消防设施维保计划
- 焊接工序小批量排产控制制度
- 2026年员工思想动态调查报告终(2篇)
- 医务人员反腐个人自查自纠报告范文
- 海南威特电力施工技术方案
- 2013年商业地产物业服务合同范本合同三篇
- (二模)济南市2026届高三第二次模拟考试语文试卷(含答案)
- 2025年护理科急救知识考核试题及答案解析
- 2026年银川韩美林艺术馆春季招聘建设笔试参考题库及答案解析
- 外部董事调研工作制度
- 2026年第一季度全国安全事故分析及警示
- 银行适老化工作制度
- 2026年宁波报业传媒集团有限公司校园招聘笔试参考试题及答案解析
- 2026广东省三宜集团有限公司招聘19人备考题库附答案详解(综合题)
- 中国网球协会匹克球国家二级裁判员培训班考试题(附答案)
- 2024-2025学年度正德职业技术学院单招考试文化素质数学考前冲刺试卷(考试直接用)附答案详解
- 2026春季四川成都环境投资集团有限公司下属成都市兴蓉环境股份有限公司校园招聘47人笔试模拟试题及答案解析
评论
0/150
提交评论