| 加入收藏| 设为首页| 联系我们

首页 站长学习 站长之家 源码下载 建站素材 书籍教程 常用工具
 您现在的位置: 动力中国 >> 网络编程 >> Wap教程 >> 文章正文  
 uC/OS-II在S3C44B0X微处理器上的移植
 

uC/OS-II在S3C44B0X微处理器上的移植

http://www.domcn.org  文章来源:本站收藏  点击数:

  关键字:uC/OS-II在S3C44B0X微处理器上的移植

设置includes.h中与处理器&编译器相关的代码

   以下是引用片段:
#define INT8U unsigned char
  #define INT16U unsigned short
  #define INT32U unsighed long
  #define OS_STK unsigned long
  #define BOOLEAN int
  #define OS_CPU_SR unsighed long
  #define INT8S char
  extern int INTS_OFF(void);
  extern void INTS_ON(void);
  #define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF() }
  #define OS_EXIT_CRITICAL() { if(cpu_st == 0) INTS_ON(); }
  #define OS_STK_GROWTH 1
  #define STACKSIZE 256
  INTS_OFF
  mrs r0, cpsr ;当前CSR
  mov r1, r0 ;复制屏蔽
  orr r1, r1, #0xC0 ;屏蔽中断位
  msr CPSR, r1 ;关中断(IRQ and FIQ)
  and r0, r0, #0x80 ;从初始CSR返回FIQ位
  mov pc, lr ;返回
  INTS_ON
  mrs r0, cpsr ;当前CSR
  bic r0, r0, #0xC0 ;屏蔽中断
  msr CPSR, r0 ;开中断(IRQ and FIQ)
  mov pc, lr ;返回  用C语言编写与OS相关的函数(OS_CPU_C.C)

   以下是引用片段:
OSTaskStkInit——初始化任务堆栈
  OS_STK * OSTaskStkInit(void (*task) (void *pd), void *pdata, OS_STK *ptos,
  INT16U opt)
  {
  unsighed int *stk;
  stk = (unsighed int *)ptos; /*装载堆栈指针*/
  opt++;
  /*为新任务建立堆栈*/
  *--stk = (unsigned int) task; /*pc*/
  *--stk = (unsigned int) task; /*lr*/
  *--stk = 12; /*r12*/
  *--stk = 11; /*r11*/
  *--stk = 10; /*r10*/
  *--stk = 9; /*r9*/
  *--stk = 8; /*r8*/
  *--stk = 7; /*r7*/
  *--stk = 6; /*r6*/
  *--stk = 5; /*r5*/
  *--stk = 4; /*r4*/
  *--stk = 3; /*r3*/
  *--stk = 2; /*r2*/
  *--stk = 1; /*r1*/
  *--stk = (unsigned int) pdata; /*r0*/
  *--stk = (SUPMODE) /*cpsr*/
  *--stk = (SUPMODE) /*spsr*/
  return ((OS_STK *) stk);
  }
  void OSTaskCreateHook(OS_TCB *ptcb) 创建任务
  void OSTasdDelHook(OS_TCB *ptcb) 删除任务
  void OSTaskSwHook(void) 切换任务
  void OSTaskStatHook(void) 任务执行状态
  void OSTimeTickHook(void) 时钟节拍  用汇编与处理器相关的函数(OS_CPU.ASM)

  1.OSStartHighRdy( ); 运行优先级最高的就绪任务

   以下是引用片段:
OSStartHighRdy
  LDR r4, addr_OSTCBCur ;得到当前任务TCB地址
  LDR r5, addr_OSTCBHighRdy ;得到最高优先级任务TCB地址
  LDR r5, [r5] ;获得堆栈指针
  LDR sp, [r5] ;转移到新的堆栈中
  STR r5, [r4] ;设置新的当前任务的TCB地址
  LDMFD sp!, {r4} ;从栈顶获取新的状态
  MSR SPSR, r4
  LDMFD sp!, {r4} ;从栈顶获取新的状态
  MSR CPSR, r4 ;CPSR处于SVC32Mode模式
  LDMFD sp!, {r0-r12, 1r, pc} ;运行新的任务  2.OS_TASK_SW( ); 任务级的任务切换函数

   以下是引用片段:
OS_TASK_SW
  STMFD sp!, {pc} ;保存pc
  STMFD sp!, {1r} ;保存1r
  STMFD sp!, {r0-r12} ;保存寄存器&返回地址
  MRS r4, CPSR
  STMFD sp!, {r4} ;保存当前的的PSR
  MRS r4, SPSR
  STMFD sp!, {r4} ;保存SPSR
  ; OSRrioCur = OSPrioHighRdy
  LDR r4, addr_OSPrioCur
  LDR r5, addr_OSPrioHighRdy
  LDRB r6, [r5]
  STRB r6, [r4]
  ;得到当前任务地址
  LDR r4, addr_OSTCBCur
  LDR r5, [r4]
  STR sp, [r5] ;保存sp在被占先的任务的TCB
  ;得到最高优先级任务TCB地址
  LDR r6, addr_OSTCBHighRdy
  LDR r6, [r6]
  LDR sp, [r6] ;得到新任务堆栈地址
  ; OSTCBCur = OSTCBHighRdy
  STR r6, [r4]
  ;保存任务方式寄存器
  LDMFD sp!, {r4}
  MSR SPSR, r4
  LDMFD sp!, {r4}
  MSR CPSR, r4
  ;返回到新任务的上下文
  LDMFD sp!, {r0-r12, 1r, pc}  3. OSIntCtxSw(); 中断级的任务切换函数

   以下是引用片段:
OSIntCtxSw
  Add r7, sp, #16 ;保存寄存器指针
  LDR sp, =IRQStack ;FIQ_STACK
  mrs r1, SPSR ;得到暂停的SPR
  orr r1, r1, #0xC0 ;


uC/OS-II在S3C44B0X微处理器上的移植
  • 上一篇文章:

  • 下一篇文章:
  •  热门文章
    普通文章 电子邮件改头换面 四公司畅谈未
    普通文章 PC病毒史上最声名狼藉的八大病
    普通文章 Rails系统中的AJAX开发技术简析
    普通文章 基于ASP.NET AJAX框架实现表单
    普通文章 开发ASP.NET AJAX客户端定制行
    普通文章 用JFreeChart对JSP报表进行增强
    普通文章 SQL Server 2005上的CLR和ADO.
    普通文章 SQL Server 2005的XML支持机制
    普通文章 Firefox中标签式浏览技巧大全
    普通文章 Tomcat中的Session和Cookie大揭
     
     推荐文章
    推荐文章 把Google地图嵌入网页 就是这么
    推荐文章 迅雷搜索候选资源出错的解决
    推荐文章 轻松去除迅雷里的各种广告和资
    推荐文章 突破限制 免费领养到QQ空间五级
    推荐文章 Rational统一过程RUP贴近中小软
    推荐文章 构建自己的轻量级XML DOM分析程
    推荐文章 WPS Office 2007技巧:妙用配置
    推荐文章 Excel 2007:求余数函数实用进阶
    推荐文章 浅谈ASP.NET的Postback
    推荐文章 软件开发中项目需求管理简述
     
     相关文章
    没有相关文章
    设为首页 | 加入收藏 | 广告合作 | 联系站长 | 版权申明 |
    动力中国为网友提供免费学习资料,可用资源,如果您认为我们的相关内容侵害到了您的权利请联系管理员
    Copyright © 2006-2008 domcn.org All Rights Reserved.