资源描述:
《SMARTARM2200-ADS工程在IAR-EWARM-5.3上的移植(2)-uCOSII移植代码分析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、uCOS移植代码主要位于工程路径下的/uCOS-II/Ports/ARM/Generic/IAR/os_cpu_a.asm(在uC-CPU下有个cpu_a.s,里面定义了OS_CPU_SR_Save和OS_CPU_SR_Restore,但实际上未用到,用到的是os_cpu_a.asmOS_CPU_SR_Save和OS_CPU_SR_Restore来进行开关中断)这里就os_cpu_a.asm里的主要几个函数进行简单分析.更加详细的内容可参考邵贝贝译的《嵌入式实时操作系统uCOS-II》(第二版) 1.开关中断;*******************************
2、*************************************************************************; CRITICALSECTIONMETHOD3FUNCTIONS;;Description:Disable/Enableinterruptsbypreservingthestateofinterrupts. Generallyspeakingyou; wouldstorethestateoftheinterruptdisableflagin
3、thelocalvariable'cpu_sr'andthen; disableinterrupts. 'cpu_sr'isallocatedinallofuC/OS-II'sfunctionsthatneedto; disableinterrupts. Youwouldrestoretheinterruptdisablestatebycopyingback'cpu_sr'; intotheCPU'sstatusregister.;;这是开关中断方式3的实现方式,先是保存CPSR值(最终保存到变量cp
4、u_sr),然后禁止中断,最后返回OS_CPU_SR_Save MRS R0,CPSR ORR R1,R0,#OS_CPU_ARM_CONTROL_INT_DIS ;SetIRQandFIQbitsinCPSRtodisableallinterrupts. MSR CPSR_c,R1 BX LR ;Disabled,returntheoriginalCPSRcontentsinR0.OS_CPU_SR_R
5、estore MSR CPSR_c,R0 BX LR//在cpu.h中定义了开关中断的宏#define OS_CRITICAL_METHOD 3#if OS_CRITICAL_METHOD==3//未定义OS_CPU_INT_DIS_MEAS_EN,OS_CPU_IntDisMeasStart()是用来中断计时的,未用到#if OS_CPU_INT_DIS_MEAS_EN>0#define OS_ENTER_CRITICAL() {cpu_sr=OS_CPU_SR_Save(); /
6、 OS_CPU_IntDisMeasStart();}#define OS_EXIT_CRITICAL() {OS_CPU_IntDisMeasStop(); / OS_CPU_SR_Restore(cpu_sr);}#else//实际用到的定义#define OS_ENTER_CRITICAL() {cpu_sr=OS_CPU_SR_Save();}#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}#endif#endif 2.然后就
7、是任务切换,运行最高优先级任务的例程,如OSStartHighRdy,OSCtxSw,OSIntCtxSw,以OSStartHighRdy为例,主要都是进行push/popstack,PC指针的切换. ;********************************************************************************************************; STARTMULTITASKING