




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式ARM系统原理与实例开发,北京大学出版社出版,1,2,实时操作系统应用地位,C/OS-II任务管理,第8章基于C/OS-II应用程序开发基础,3,C/OS-II在S3C2410的移植案例分析,2020/5/8,北京大学出版社出版,3,嵌入式软件系统基本模型,2020/5/8,北京大学出版社出版,4,实时操作系统设计原则,采用各种算法和策略,始终保证系统行为的可预测性。即在任何情况下,在系统运行的任何时刻,操作系统的资源配置策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。,2020/5/8,北京大学出版社出版,5,实时操作系统内核分类,不可剥夺型内核可剥夺型内核,2020/5/8,北京大学出版社出版,6,不可剥夺型内核中断响应示意,2020/5/8,北京大学出版社出版,7,可剥夺型内核中断响应示意,2020/5/8,北京大学出版社出版,8,2020/5/8,北京大学出版社出版,9,嵌入式应用程序开发模式,单片机系统的前后台程序基于任务(进程)的软件设计方法,2020/5/8,北京大学出版社出版,10,简单单片机系统软件设计方法,2020/5/8,北京大学出版社出版,11,C/OS-II基于任务(进程)的软件设计方法,voidTask_one(void*pdata)/任务1代码voidTask_two(void*pdata)/任务2代码voidTask_three(void*pdata)/任务3代码voidmain(void)/入口OSInit();/初始化系统OsTaskCreate(task_one,.);/创建任务1OsTaskCreate(task_one,.);/创建任务2OsTaskCreate(task_one,.);/创建任务3.OSStart();/启动系统,此时操作系统控制整个软件的运行,2020/5/8,北京大学出版社出版,12,可重入函数与不可重入函数,可重入函数是指函数代码在运行过程中被中断,在中断返回时仍然能够恢复到原来的状态,并能准备无误的执行的函数.不可重入函数则在运行过程中不可以被中断。,inti=10;intprogram_one(void)intj;if(i=10)i=20;elsei=0;return1;,1,2,实时操作系统应用地位,C/OS-II任务管理,第8章基于C/OS-II应用程序开发基础,3,C/OS-II在S3C2410的移植案例分析,2020/5/8,北京大学出版社出版,14,C语言可执行代码结构,2020/5/8,北京大学出版社出版,15,C/OS-II任务结构,2020/5/8,北京大学出版社出版,16,C/OS-II任务栈,栈在创建任务时使用OSTaskCreate()函数声明如下:INT8UOSTaskCreate(void(*task)(void*p_arg),void*p_arg,OS_STK*ptos,INT8Uprio)C/OS-II将任务栈空间的数据类型重新定义为OS_STK,实际上就是短整型,定义如下:/comefromos_cpu.htypedefunsignedshortOS_STK;/栈空间每个单元的数据类型为16位的在创建任务时需要显式的声明一段全局空间做为该任务的栈,申请一个栈空间的示例代码如下:#defineTASK_STK_SIZE128/此大小可重新定义,根据需要定义OS_STKAppStartTaskStkTASK_STK_SIZE;/全局变量,2020/5/8,北京大学出版社出版,17,栈增长方向,2020/5/8,北京大学出版社出版,18,C/OS-II任务控制块,TCB(TaskControlBlock)用来存储一个任务的当前属性。任务的主要属性包括:任务栈空间位置,即前节所述该任务的栈空间。任务与其它任务通信的数据空间,在C/OS-II中称为事件,见第5,6,7章说明;任务的当前状态,标识当前任务是在运行还是在等待某个事件发生;任务的优先级,任务的标识,全系统唯一,此值是任务调度的依据。,2020/5/8,北京大学出版社出版,19,C/OS-II任务控制块,C/OS-II采用双向链表来管理所有任务的TCB,comefromucos_ii.htypedefstructos_tcbOS_STK*OSTCBStkPtr;/指向该任务的栈顶指针,前节介绍#ifOS_TASK_CREATE_EXT_EN0/如果是用OSTaskCreateExt()创建的任务有以下参数void*OSTCBExtPtr;/指向用户为该任务自定义的扩展TCB,这不是必须的OS_STK*OSTCBStkBottom;指向栈底指针INT32UOSTCBStkSize;/栈的大小,单元个数INT16UOSTCBOpt;/栈初始化时的选项,见初始化控制块函数说明INT16UOSTCBId;/任务ID(0.65535),暂时没有使用#endif,structos_tcb*OSTCBNext;/指向双向TCB链表中的下一个TCBstructos_tcb*OSTCBPrev;/指向双向TCB链表中的前一个TCB,2020/5/8,北京大学出版社出版,20,任务控制块初始化时示意图,2020/5/8,北京大学出版社出版,21,任务控制块经过任务添加和删除后示意图,2020/5/8,北京大学出版社出版,22,C/OS-II任务优先级,C/OS-II操作系统进行任务调度所采用的算法是基于优先级的调度算法(调度算法:选择哪一个处于就绪状态的任务运行的策略)。任何一个任务有唯一的一个任务优先级值,其类型为INT8U(unsignedchar类型),定义如下:INT8UOSTCBPrio;/优先级值,如果为0表示优先级最高typedefunsignedcharINT8U;/INT8U类型就是unsignedchar在C/OS-II操作系统中,优先级值越大,优先级越低,因此,优先级值为0的任务优先级最高。因为优先级类型为unsignedchar(范围为0255),因此,定义C/OS-II操作系统优先级值最大为255,也就是说,最多允许创建256个任务(一个任务有唯一的优先级)。在目前的C/OS-II版本中,仅允许创建64个任务,最低优先级值为63,2020/5/8,北京大学出版社出版,23,C/OS-II任务状态,/comefromucos_ii.h#defineOS_STAT_RDY0 x00u/准备就绪#defineOS_STAT_SEM0 x01u/信号量阻塞#defineOS_STAT_MBOX0 x02u/消息邮箱阻塞#defineOS_STAT_Q0 x04u/消息队列阻塞#defineOS_STAT_SUSPEND0 x08u/挂起,暂停运行#defineOS_STAT_MUTEX0 x10u/互斥事件阻塞#defineOS_STAT_FLAG0 x20u/事件标识阻塞#defineOS_STAT_PEND_ANY(OS_STAT_SEM|OS_STAT_MBOX|OS_STAT_Q|OS_STAT_MUTEX|OS_STAT_FLAG)/任意一个事件阻塞,2020/5/8,北京大学出版社出版,24,任务状态切换,2020/5/8,北京大学出版社出版,25,系统任务,空闲任务在没有其它任务运行时运行,其优先级最低(如果最多允许创建64个任务,则其值为63),此函数没有任务参数的返回值,仅对全局变量空闲计数器OSIdleCtr进行自加操作。统计任务优先级为OS_IDLE_PRIO-1,用来统计CPU的利用率,统计任务中执行的函数为OS_TaskStat()。,2020/5/8,北京大学出版社出版,26,2020/5/8,北京大学出版社出版,27,C/OS-II调度算法和调度方式,优先级调度算法原理为:给每一个任务分配一个惟一优先级,各优先级用一个整形数值标识,某优先级的值越大,其优先级越低;某优先级的值越小,其优先级越高。也就是说,如果当前操作系统准备进行调度,当有两个任务处于就绪状态,系统将优先执行优先级别高的任务。C/OS-II操作系统有两种调度方式:任务级任务调度和中断级任务调度,C/OS-II操作系统在完成中断后允许进行新的调度,因此,C/OS-II操作系统是可抢占性的,是强实时性操作系统,这是C/OS-II操作系统内核的重要特性。,2020/5/8,北京大学出版社出版,28,C/OS-II任务就绪表,2020/5/8,北京大学出版社出版,29,优先级二进制码分配,2020/5/8,北京大学出版社出版,30,更新就绪表时采用如下方法:,对OSRdyGrp和OSRdyTblptcb-OSTCBY的修改算法如下:,ptcb-OSTCBY=(INT8U)(prio3);/得到优先级值前3位(二进制),行ptcb-OSTCBBitY=1OSTCBY;/得到影响就绪表的行号ptcb-OSTCBX=(INT8U)(prio/得到影响就绪表的列号,OSRdyTblptcb-OSTCBY|=ptcb-OSTCBBitX;/将就绪表对应位置OSRdyGrp|=ptcb-OSTCBBitY;/将OSRdyGrp对应的位置位,y=ptcb-OSTCBY;/得优先级的高3位,即修改OSRdyTbl的哪一行OSRdyTbly/清除变量OSRdyGrp对应位,删除任务时,使用如下算法清除任务就绪表和OSRdyGrp相应位。,2020/5/8,北京大学出版社出版,31,如果一个优先级为44(二进制码为101100)的任务处于就绪状态,ptcb-OSTCBY=(INT8U)(prio3)=(5)dptcb-OSTCBBitY=1OSTCBY=(00100000)Bptcb-OSTCBX=(INT8U)(prioOSRdyGrp|=ptcb-OSTCBBitY;,即,OSRdyTbl5=OSRdyTbl5|(00010000)B/将OSRdyTbl5的Bit4位置位,标识优先级44任务就绪OSRdyGrp=OSRdyGrp|(00100000)B/将OSRdyGrp的Bit5位置位,标识OSRdyTbl5组有一个及以上任务就绪,2020/5/8,北京大学出版社出版,32,要清除优先级为30(011110),ptcb-OSTCBY(3)dptcb-OSTCBBitY=1OSTCBBitX=(01000000)Bptcb-OSTCBX=(6)d,故,y=3OSRdyTbl3=OSRdyTbl3/清除OSRdyGrp的Bit3,2020/5/8,北京大学出版社出版,33,获取最高优先级就绪任务,OS_EXTINT8UOSPrioCur;/当前任务优先级OS_EXTINT8UOSPrioHighRdy;/准备就绪任务中的最高优先级,INT8UconstOSUnMapTbl256=0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x00to0 x0F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x10to0 x1F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x20to0 x2F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x30to0 x3F*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x40to0 x4F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x50to0 x5F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x60to0 x6F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x70to0 x7F*/7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x80to0 x8F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x90to0 x9F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 xA0to0 xAF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 xB0to0 xBF*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 xC0to0 xCF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 xD0to0 xDF*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 xE0to0 xEF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0/*0 xF0to0 xFF*/;,2020/5/8,北京大学出版社出版,34,OSUnMapTbl表构造方法如下:表中第n+1个成员OSUnMapTbln的值:从Bit0位开始,搜索值为n的二进制码中第1次出现1的位数。例如:,OSUnMapTbl10(1)d=(00000001)b,第0位有1,故值为0OSUnMapTbl202(20)d=(00010100)b,第2位有1,故值为2OSUnMapTbl901(90)d=(01011010)b,第1位有1,故值为1,试想如果当前只有优先级1,9,23三个任务处于就绪状态,OSRdyGrp的值应该为(00000111)B,OSRdyTbl0=(XXXXXX10)B,因此通过该算法:,y=OSUnMapTblOSRdyGrp=OSUnMapTbl70OSUnMapTblOSRdyTbl0)OSUnMapTbl21OSPrioHighRdy=(INT8U)(03)+11,从而最高优先级值为1。采用数组进行查找对访问效率有很大的提高,因此,在操作系统实现代码中,这类查找表经常出现。,2020/5/8,北京大学出版社出版,35,调度的主要功能,(1)查找当前就绪表中最高优先级任务的优先级值;(2)调用OS_SchedNew()函数进行任务切换,切换到新任务执行。C/OS-II操作系统使用OS_Sched()函数来执行任务级任务调度。,2020/5/8,北京大学出版社出版,36,任务级任务切换OS_TASK_SW(),任务级任务切换是指从一个任务直接切换到另一个任务,引起该次切换是由于某一个非中断引起的事件(关于事件的概念请参阅后结章节)使一个更高优先级的任务处于就绪状态,暂停正在运行着的任务,转而切换去执行更高优先级任务。在整个过程中,不涉及到CPU状态的切换,C/OS-II操作系统使用汇编程序来实现OS_TASK_SW()函数。,2020/5/8,北京大学出版社出版,37,任务基本信息,CPU中的PC寄存器:任务(程序)当前执行的位置;CPU中的通用寄存器:任务当前执行代码所涉及的临时数据;CPU中的状态寄存器:存储当前CPU的状态。,2020/5/8,北京大学出版社出版,38,任务级任务切换基本过程,(1)将当前任务的PC位置、通用寄存器数据、CPU的状态入栈;(2)修改全局变量OSPrioCur(当前任务优先级变量)的值为全局变量OSPrioHighRdy(最高优先级任务优先级)的值,即把最高就绪任务优先级设置为新的当前任务优先级;(3)修改原任务TCB的第1个成员(指向栈顶的指针*OSTCBStkPtr)的值为当前SP寄存,以便再次返回;(4)获取最高优先级的任务控制块中第1个成员(指向堆栈栈顶指针*OSTCBStkPtr)的值到sp寄存器;(5)修改OSTCBCur的值为新就绪最高优先级任务的任务控制块地址;(6)将新任务的PC位置、通用寄存器数据、CPU的状态出栈,开始执行新的任务。,2020/5/8,北京大学出版社出版,39,调度器上锁与解锁,在调用函数OS_Sched()进行调度时,要求没有进入中断,因为操作系统期望中断处理程序执行时间尽可能短。,OS_EXTINT8UOSLockNesting;/非0标识锁定调度器,0表示未锁定,C/OS-II操作系统使用OSSchedLock()函数和OSSchedUnlock()函数进行锁定(不允许任务级调度)和解锁(重新允许任务级调度)调度器,在用户应用程序中,OSSchedLock()和OSSchedUnlock()是成对出现的,否则系统有可能出错。,2020/5/8,北京大学出版社出版,40,C/OS-II中断管理,(1)硬件中断一般是由外部(相对CPU内核而言)的硬件引起的事件,比如串口接收到数据、键盘击键以及时钟中断等;(2)软件中断(SoftInterrupt)通过在程序中执行的中断指令引起的中断,又叫软中断,软中断指令一般用于操作系统的系统调用入口,软中断是用户访问操作系统提供的服务(API函数)的惟一途径。,2020/5/8,北京大学出版社出版,41,中断响应的过程,(1)进入中断,现场保护,保护当前任务的执行位置、寄存器临时数据以及CPU状态,这些过程处理的代码请参阅第9章;(2)执行系统进入中断处理函数OSIntEnter(),然后执行关于此中断的中断服务程序,这一程序由系统开发人员编写,此程序将根据中断不同执行不同的代码;(3)执行系统退出中断处理函数OSIntExit(),在此函数中,如果有更高优先级任务就绪,将引发新的调度,否则进行现场恢复,恢复到原任务位置重新运行。第2步中断服务程序是预先设置的,如果中断发生,系统会根据中断向量表的入口地址约定转移到该地址开始执行。,2020/5/8,北京大学出版社出版,42,ARM处理器中断响应,(1)拷贝当前CPSR到对应模式的SPSR寄存器中以存储当前程序状态,这些信息包括当前处理器模式、中断屏弊位以及控制标识。(2)改变CPSR寄存器的模式位使处理器工作于对应模式、禁止中断位,其中,在任何异常情况下都将禁止IRQ请求位,当复位中断和FIQ中断发生时还将禁止FIQ请求位。(3)保存返回地址到对应模式链接寄存器(LR)。(4)设置当前程序PC寄存器到中断向量地址以处理异常。这将强制跳转到相应的中断处理程序中。,2020/5/8,北京大学出版社出版,43,ARM处理器中断返回,(1)从相应模式的SPSR寄存器中恢复CPSR寄存器内容;(2)恢复存储在栈中的普通寄存器数据;(3)从相应模式的链接寄存器LR中恢复PC寄存器以使程序从中断处重新执行。,1,2,实时操作系统应用地位,C/OS-II任务管理,第8章基于C/OS-II应用程序开发基础,3,C/OS-II在S3C2410的移植案例分析,2020/5/8,北京大学出版社出版,45,移植的主要工作是什么?,某个操作系统在设计之初都只针对某一种特定的处理器,不可能考虑太多其它类型的处理器,对于当前还没有设计出来的处理器更是如此,然后,人们又期望一个被广泛应用的操作系统能够适合这些新类型的处理器,这就需要对该操作系统的源代码进行修改,主要修改那些与平台相关的代码,这就是移植工作。,2020/5/8,北京大学出版社出版,46,使C/OS-II能够在正常运行的必要处理:,(1)系统启动处理。(2)安装中断异常。(3)添加新任务。(4)任务管理与调度。(5)如果要管理具体的硬件设备,还需要添加某个设备或端口的驱动程序。,2020/5/8,北京大学出版社出版,47,ARM可执行文件存储态结构,2020/5/8,北京大学出版社出版,48,运行态代码分布,2020/5/8,北京大学出版社出版,49,设置代码存储加载位置,LOAD0 x30008000/(1)加载起始位置RAM_EXEC+0/(2)代码位置startup.o(init,+FIRST)/(3)起始位置*(+RO)STACKS+0 x100000UNINIT/(4)栈段stack.o(+ZI)HEAP+0UNINIT/(5)堆段heap.o(+ZI)EXCEPTION_EXEC0OVERLAY/(6)异常段exception.o(+RO),2020/5/8,北京大学出版社出版,50,开始执行,禁止中断,WTCONEQU0 x53000000;S3C2410看门狗寄存器地址INTMSKEQU0 x4a000008;S3C2410普通中断屏蔽寄存器地址INTSUBMSKEQU0 x4a00001c;S3C2410普通中断二级屏蔽寄存器地址AREAInit,CODE,READONLY;首先执行init段代码ENTRY;ENTRY在整个程序中指定入口bColdReset;跳转到CodeReset标号位置执行ColdResetldrr0,=WTCON;读取看门狗寄存器地址ldrr1,=0 x0;strr1,r0;设置看门狗寄存器数据为0,即关闭它ldrr0,=INTMSKldrr1,=0 xffffffff;禁止所有外部中断strr1,r0ldrr0,=INTSUBMSKldrr1,=0 x7ff;禁止所有二级中断申请strr1,r0blInitStacks;跳转到initstacks段执行,2020/5/8,北京大学出版社出版,51,初始化栈空间,AREAStacks,DATA,NOINIT/栈段,在scatter文件中指定其存储位置EXPORTUserStack;输出在此段中的标号EXPORTSVCStackEXPORTUndefStackEXPORTIRQStackEXPORTAbortStackEXPORTFIQStackSPACE4096;为用户模式申请栈空间4096字节UserStackSPACE4096;为SVC模式申请栈空间4096字节SVCStackSPACE4096;为未定义模式申请栈空间4096字节UndefStackSPACE4096;为中止模式申请栈空间4096字节AbortStackSPACE4096;为IRQ中断模式申请栈空间4096字节IRQStackSPACE4096;为FIQ中断模式申请栈空间4096字节FIQStackSPACE4END,2020/5/8,北京大学出版社出版,52,MODEMASKEQU0 x1f;CPSR寄存器的低5位为模式位USERMODEEQU0 x10;用户模式CPSR寄存器的低5位值FIQMODEEQU0 x11;FIQ模式CPSR寄存器的低5位值IRQMODEEQU0 x12;IRQ模式CPSR寄存器的低5位值SVCMODEEQU0 x13;SVC模式CPSR寄存器的低5位值ABORTMODEEQU0 x17;ABORT模式CPSR寄存器的低5位值UNDEFMODEEQU0 x1b;UNDEF模式CPSR寄存器的低5位值NOINTEQU0 xc0;CPSR寄存普通中断屏蔽位InitStacksmrsr0,cpsr;读取当前CPSR寄存器值bicr0,r0,#MODEMASK;清除模式位orrr1,r0,#UNDEFMODE|NOINT;未定义模式,并禁止普通中断msrcpsr_cxsf,r1;修改CPU的模式为未定义模式ldrsp,=UndefStack;将当前模式(末定义模式)的SP指针指向其栈首地址;具体地址由前面代码中的UndefStack标号指示;其它模式的设置方法类似,2020/5/8,北京大学出版社出版,53,复制异常代码与异常向量地址,IMPORT|Load$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Base|IMPORT|Image$EXCEPTION_EXEC$Length|ldrr0,=|Load$EXCEPTION_EXEC$Base|;读取异常代码段存储起始位置ldrr1,=|Image$EXCEPTION_EXEC$Base|;异常代码段执行位置,S3C2410为0地址ldrr2,=|Image$EXCEPTION_EXEC$Length|;异常代码的长度exception_cploopsubr2,r2,#4;将异常代码段长度为循环条件,每次自减4个字节ldmiar0!,r3;从异常代码段加载位置读取内容stmiar1!,r3;存储到异常代码段执行位置,起始位置为0地址cmpr2,#0bgeexception_cploop;完成以上操作后,跳转到C语言编写的main()函数中IMPORT_mainBL_main,2020/5/8,北京大学出版社出版,54,main()函数代码如下,intmain(void)ARMTargetInit();/dotarget(uHALbasedARMsystem)initialisation/OSInit();/neededbyuC/OS-II/OSTaskCreate(1,);OSTaskCreate(2,);OSStart();/starttheOS/return0;,2020/5/8,北京大学出版社出版,55,S3C2410中断向量,2020/5/8,北京大学出版社出版,56,S3C2410中断向量跳转的问题,IMPORTColdReset;引入异常处理函数IMPORTEnter_UNDEFIMPORTEnter_SWIIMPORTEnter_PABORTIMPORTEnter_DABORTIMPORTIRQ_HandlerIMPORTEnter_FIQldrpc,=ColdReset;跳转到标号ColdReset位置执行;此指令将存储在0 x00000000地址ldrpc,=Enter_UNDEF;跳转到标号Enter_UNDEF位置执行ldrpc,=Enter_SWI;跳转到标号Enter_SWI位置执行ldrpc,=Enter_PABORT;跳转到标号Enter_PABORT位置执行ldrpc,=Enter_DABORT;跳转到标号Enter_DABORT位置执行b.;保留的中断向量ldrpc,=IRQ_Handler;跳转到标号IRQ_Handler位置执行ldrpc,=Enter_FIQ;跳转到标号Enter_FIQ位置执行,2020/5/8,北京大学出版社出版,57,S3C2410中断处理硬件结构,2020/5/8,北京大学出版社出版,58,S3C2410中断处理办法,(1)是否屏蔽该中断。根据是否属于二级中断源,即设置寄存器INTMSK和INTSUBMSK寄存器对应位;(2)设置某类中断为普通中断还是快速中断,即设置中断类型寄存器INTMOD对应位;(3)如果是IRQ中断,设置该中断的优先级。即设置寄存器PRIORITY以决定其优先级。(4)更重要的是,针对该中断,CPU接收到该硬件请求后,执行怎么样的操作,即执行什么代码。,2020/5/8,北京大学出版社出版,59,ISR中断处理过程,(1)中断发生,IRQ管脚向CPU产生中中断请求信号;(2)系统进行必要的数据保护后(将程序位置存储在LR寄存器,存储CPSR寄存器值在SPSR后,设置CPSR寄存器中断屏蔽位,切换到IRQ模式),PC指针跳转到IRQ的中断向量0 x0000,0018地址;(3)CPU根据内存0 x0000,0018位置的代码执行IRQ_Handler位置的代码(代码前面已经介绍),在IRQ_Handler中进行现场保护,将LR寄存器,SPSR寄存器,R0-R12通用寄存器的数据存入到IRQ栈中,然后执行ISR_IrqHandler()函数(在IRQ_Handler代码中有跳转指令,见上面说明)。(4)ISR_IrqHandler()函数完成中断源判断(具体是什么中断),执行C/OS-II操作系统进入中断处理函数OSIntEnter(),执行中断处理函数(在安装中断时已经指定),完成后清除中断,执行C/OS-II操作系统退出中断函数OSIntExit()。(5)OSIntExit()函数前面已经介绍,将执行中断级任务调度,具体内容请读者参阅本书第3章内容。,2020/5/8,北京大学出版社出版,60,C/OS-II系统时钟中断任务管理,(1)如果S3C2410处理器允许Timer4工作,其在一定时间到来时产生一个时钟中断信号,如果中断管理单元允许该中断,并果在INTMODE中设置其为IRQ中断,则在S3C2410处理器的IRQ管脚将产生一个硬件中断信号;(2)IRQ中断管理向CPU发送一个IRQ中断请求,系统将自动将当前程序位置存储在L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国广电临汾市2025秋招笔试行测题库及答案网络优化与维护类
- 中国联通毕节市2025秋招笔试行测题库及答案财务审计类
- 甘南藏族自治州中储粮2025秋招面试典型题目及答案
- 国家能源黄南藏族自治州2025秋招综合管理类面试追问及参考回答
- 渭南市中储粮2025秋招面试半结构化模拟题30问及答案
- 中考英语阅读试题及答案
- 河池市中石化2025秋招面试半结构化模拟题及答案法律与合规岗
- 中国联通怀化市2025秋招面试无领导高频议题20例
- 晋城市中石油2025秋招笔试模拟题含答案油品分析质检岗
- 通辽市中储粮2025秋招笔试题库含答案
- 保障农民工工资课件
- 婴儿呛奶海姆立克急救法
- 扁桃体癌护理查房记录
- 人脸采集管理办法
- 壶腹部肿瘤的治疗及护理
- 感术行动培训课件
- 桥梁施工安全会议记录
- 附睾结核护理查房
- 膝关节炎中医护理
- 氦氖激光机治疗仪讲课件
- 乡村旅游环境卫生培训
评论
0/150
提交评论