ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:27.05KB ,
资源ID:5013578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5013578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ucosii移植实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ucosii移植实验报告.docx

1、ucosii移植实验报告一、实验目的了解uC/OS-II内核的主要结构。掌握将uC/OS-II内核移植到Cortex-M3处理器上的基本方法。二、实验环境与设备硬件:Cortex-M3嵌入式开发平台、用于Cortex-M3的JTAG仿真器或者内嵌的JTAG仿真器、PC机Pentium100以上。软件:PC机操作系统win98、Win2000或WinXP、Keil for ARM或IAR for ARM集成开发环境、仿真器驱动程序、超级终端通讯程序等。三、预备知识掌握在Keil for ARM或IAR for ARM集成开发环境中编写和调试程序的基本过程。了解Cortex-M3处理器的结构。理解

2、uC/OS-II系统结构。四、实验内容将uC/OS-II内核移植到Cortex-M3微处理器上。编写两个简单任务,在超级终端上观察两个任务的切换。五、流程图六、实验代码修改后的Os_cpu.h#ifndef OS_CPU_H#define OS_CPU_H#ifdef OS_CPU_GLOBALS#define OS_CPU_EXT#else#define OS_CPU_EXT extern#endiftypedef unsigned char BOOLEAN;typedef unsigned char INT8U; /* Unsigned 8 bit quantity*/typedef si

3、gned char INT8S; /* Signed 8 bit quantity */typedef unsigned short INT16U; /* Unsigned 16 bit quantity*/typedef signed short INT16S; /* Signed 16 bit quantity */typedef unsigned int INT32U; /* Unsigned 32 bit quantity */typedef signed int INT32S; /* Signed 32 bit quantity */typedef float FP32; /* Si

4、ngle precision floating point*/typedef double FP64; /* Double precision floating point */typedef unsigned int OS_STK; /* Each stack entry is 32-bit wide */typedef unsigned int OS_CPU_SR; /* Define size of CPU status register (PSR = 32 bits) */#define OS_CRITICAL_METHOD 3u#if OS_CRITICAL_METHOD = 3u#

5、define OS_ENTER_CRITICAL() cpu_sr = OS_CPU_SR_Save();#define OS_EXIT_CRITICAL() OS_CPU_SR_Restore(cpu_sr);#endif#define OS_STK_GROWTH 1u /* Stack grows from HIGH to LOW memory on ARM */#define OS_TASK_SW() OSCtxSw()#if OS_CRITICAL_METHOD = 3u /* See OS_CPU_A.ASM */OS_CPU_SR OS_CPU_SR_Save(void);void

6、 OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);#endifvoid OSCtxSw(void);void OSIntCtxSw(void);void OSStartHighRdy(void);void OSPendSV(void);#endif修改后的Os_cpu_c.c#define OS_CPU_GLOBALS#include #include #if OS_TMR_EN 0ustatic INT16U OSTmrCtr;#endif#if OS_CPU_HOOKS_EN 0uvoid OSInitHookBegin (void) #if OS_TMR_EN 0

7、u OSTmrCtr = 0u;#endif#endif#if OS_CPU_HOOKS_EN 0uvoid OSInitHookEnd (void)#endif#if OS_CPU_HOOKS_EN 0uvoid OSTaskCreateHook (OS_TCB *ptcb)#if OS_APP_HOOKS_EN 0u App_TaskCreateHook(ptcb);#else (void)ptcb; /* Prevent compiler warning */#endif#endif#if OS_CPU_HOOKS_EN 0uvoid OSTaskDelHook (OS_TCB *ptc

8、b)#if OS_APP_HOOKS_EN 0u App_TaskDelHook(ptcb);#else (void)ptcb; /* Prevent compiler warning */#endif#endif#if OS_CPU_HOOKS_EN 0uvoid OSTaskIdleHook (void)#if OS_APP_HOOKS_EN 0u App_TaskIdleHook();#endif#endif#if OS_CPU_HOOKS_EN 0uvoid OSTaskStatHook (void)#if OS_APP_HOOKS_EN 0u App_TaskStatHook();#

9、endif#endifOS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt) OS_STK *stk; (void)opt; /* opt is not used, prevent warning*/ stk = ptos; /* Load stack pointer */ /* Registers stacked as if auto-saved on exception */ *(stk) = (INT32U)0x01000000uL; /* xPSR */ *(-st

10、k)= (INT32U)task; /* Entry Point */ *(-stk)= (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will */ /* cause fault if ever used) */ *(-stk)= (INT32U)0x12121212uL;/* R12*/ *(-stk)= (INT32U)0x03030303uL; /* R3 */ *(-stk)= (INT32U)0x02020202uL /* R2 */ *(-stk)=(INT32U)0x01010101uL; /* R1 */ *(-stk)=(INT3

11、2U)p_arg; /* R0 : argument */ /* Remaining registers saved on process stack */ *(-stk)=(INT32U)0x11111111uL; /* R11 */ *(-stk)=(INT32U)0x10101010uL; /* R10 */ *(-stk)=(INT32U)0x09090909uL; /* R9 */ *(-stk)=(INT32U)0x08080808uL; /* R8 */ *(-stk)=(INT32U)0x07070707uL; /* R7 */ *(-stk)=(INT32U)0x060606

12、06uL; /* R6 */ *(-stk)=(INT32U)0x05050505uL; /* R5 */ *(-stk)=(INT32U)0x04040404uL; /* R4 */ return (stk);#if (OS_CPU_HOOKS_EN 0u) & (OS_TASK_SW_HOOK_EN 0u)void OSTaskSwHook (void)#if OS_APP_HOOKS_EN 0u App_TaskSwHook();#endif#endif#if OS_CPU_HOOKS_EN 0uvoid OSTCBInitHook (OS_TCB *ptcb)#if OS_APP_HO

13、OKS_EN 0u App_TCBInitHook(ptcb);#else (void)ptcb; /* Prevent compiler warning */#endif#endif#if (OS_CPU_HOOKS_EN 0u) & (OS_TIME_TICK_HOOK_EN 0u)void OSTimeTickHook (void)#if OS_APP_HOOKS_EN 0u App_TimeTickHook();#endif #if OS_TMR_EN 0u OSTmrCtr+; if (OSTmrCtr = (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_P

14、ER_SEC) OSTmrCtr = 0; OSTmrSignal(); #endif#endif修改后的Os_cpu_a.asm EXTERN OSRunning EXTERN OSPrioCur EXTERN OSPrioHighRdy EXTERN OSTCBCur EXTERN OSTCBHighRdy EXTERN OSIntExit EXTERN OSTaskSwHookEXPORT OS_CPU_SR_Save EXPORT OS_CPU_SR_Restore EXPORT OSStartHighRdy EXPORT OSCtxSw EXPORT OSIntCtxSw EXPOR

15、T OSPendSVNVIC_INT_CTRL EQU 0xE000ED04; Interrupt control state register.NVIC_SYSPRI14 EQU 0xE000ED22 System priority register (priority 14).NVIC_PENDSV_PRI EQU 0xFF; PendSV priority value (lowest).NVIC_PENDSVSET EQU 0x10000000; Value to trigger PendSV exception.PRESERVE8 ;The AAPCS requires that th

16、e stack-pointer be 8-byte aligned on entry to a conforming function. AREA UCOSII_ASM, CODE, READONLY THUMBOS_CPU_SR_Save MRS R0, PRIMASK ; Set prio int mask to mask all (except faults) CPSID I BX LROS_CPU_SR_Restore MSR PRIMASK, R0 BX LR OSStartHighRdy LDR R0, =NVIC_SYSPRI14; Set the PendSV exceptio

17、n priority LDR R1, =NVIC_PENDSV_PRI STRB R1, R0 MOV R0, #; Set the PSP to 0 for initial context switch call MSR PSP, R0 LDR R0, =OSRunning ; OSRunning = TRUE MOV R1, #1 STRB R1, R0 LDR R0, =NVIC_INT_CTRL; Trigger the PendSV exception (causes context switch) LDR R1, =NVIC_PENDSVSET STR R1, R0 CPSIE I

18、 ; Enable interrupts at processor levelOSStartHang B OSStartHang; Should never get hereOSCtxSw LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch) LDR R1, =NVIC_PENDSVSET STR R1, R0 BX LROSIntCtxSw LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch

19、) LDR R1, =NVIC_PENDSVSET STR R1, R0 BX LROSPendSV CPSID I ; Prevent interruption during context switch MRS R0, PSP ; PSP is process stack pointer CBZ R0, OSPendSV_nosave ; Skip register save the first time SUB R0, R0, #0x20 ; Save remaining regs r4-11 on process stack STM R0, R4-R11 LDR R1, =OSTCBC

20、ur ; OSTCBCur-OSTCBStkPtr = SP; LDR R1, R1 STR R0, R1 ; R0 is SP of process being switched out; At this point, entire context of process has been savedOSPendSV_nosave PUSH R14 ; Save LR exc_return value LDR R0, =OSTaskSwHook; OSTaskSwHook(); BLX R0 POP R14 LDR R0, =OSPrioCur ; OSPrioCur = OSPrioHigh

21、Rdy; LDR R1, =OSPrioHighRdy LDRB R2, R1 STRB R2, R0 LDR R0, =OSTCBCur ; OSTCBCur = OSTCBHighRdy; LDR R1, =OSTCBHighRdy LDR R2, R1 STR R2, R0 LDR R0, R2 ; R0 is new process SP; SP = OSTCBHighRdy-OSTCBStkPtr; LDM R0, R4-R11; Restore r4-11 from new process stack ADDS R0, R0, #0x20 MSR PSP, R0; Load PSP

22、 with new process SP ORR LR, LR, #0x04 Ensure exception return uses process stack CPSIE I BX LR ; Exception return will restore remaining contextALIG主函数APP.C#include#include utils/uartstdio.h#include lwip/sys.h #define TASK1_PRIO 11#define TASK2_PRIO 3#define task1stck 1024#define task2stck 1024#inc

23、lude systemInit.h#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2 #define LED_PINN GPIO_PIN_3 void LED0_stack(void *p_arg) /jtagWait( ); clockInit( ); SysCtlPeriEnable(LED_PERIPH); GPIOPinTypeOut(LED_PORT, LED_PIN); for (;) GPIOPinWrite(LED_PORT, LED_P

24、IN, 0x00); OSTimeDly(OS_TICKS_PER_SEC / 4); GPIOPinWrite(LED_PORT, LED_PIN, 0xFF); OSTimeDly(OS_TICKS_PER_SEC / 4); void LED1_stack(void *p_arg) /jtagWait( ); clockInit( ); SysCtlPeriEnable(LED_PERIPH); GPIOPinTypeOut(LED_PORT, LED_PINN); for (;) GPIOPinWrite(LED_PORT, LED_PINN, 0x00); OSTimeDly(OS_

25、TICKS_PER_SEC / 4);z GPIOPinWrite(LED_PORT, LED_PINN, 0xFF); OSTimeDly(OS_TICKS_PER_SEC / 4); static void App_TaskStart (void *p_arg); int main (void) BSP_PreInit (); BSP_IntDisAll(); OSInit(); OSTaskCreateExt(void (*)(void *) App_TaskStart, (void *) 0, (OS_STK *)&App_TaskStartStkAPP_CFG_TASK_START_

26、STK_SIZE - 1, (INT8U ) APP_CFG_TASK_START_PRIO, (INT16U ) APP_CFG_TASK_START_PRIO, (OS_STK *)&App_TaskStartStk0, (INT32U ) APP_CFG_TASK_START_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); OSTaskCreate(LED0_stack,(void *)0, &App_TaskStartStk1 APP_CFG_TASK_START_STK_SIZE

27、-1,0); OSTaskCreate(LED1_stack,(void *)0, &App_TaskStartStk2 APP_CFG_TASK_START_STK_SIZE -1,1); OSStart(); /4 os startstatic void App_TaskStart (void *p_arg) (void)p_arg; BSP_PostInit(); Tmr_TickInit (); #if (OS_TASK_STAT_EN 0) OSStatInit(); #endif for(;) OSTimeDlyHMSM(0, 0, 2, 0); UARTprintf(0332JI am task1n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1