LPC2368 ucos-ii 移植代码

  • m4_320042
    了解作者
  • 17.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-24 01:06
    上传日期
这个能用,亲自测试过。我在这上面测试过好几个小程序。
UCOS-II移植代码.zip
  • 标准版arm移植代码
  • arm
  • OS_CPU.H
    5.5KB
  • Os_cpu_c.c
    16KB
  • IRQ.inc
    3.8KB
  • Os_cpu_a.s
    9.7KB
  • 高效版arm移植代码
  • arm
  • OS_CPU.H
    6KB
  • Os_cpu_c.c
    12.8KB
  • IRQ.inc
    3.8KB
  • Os_cpu_a.s
    12.7KB
内容介绍
/****************************************Copyright (c)************************************************** ** 广州周立功单片机发展有限公司 ** 研 究 所 ** 产品一部 ** ** http://www.zlgmcu.com ** **--------------文件信息-------------------------------------------------------------------------------- **文 件 名: os_cpu_c.c **创 建 人: 陈明计 **最后修改日期: 2003年7月8日 **描 述: μCOS-II在lpc210x上的移植代码C语言部分,包括任务堆栈初始化代码和钩子函数等 ** 用ads1.2编译,必须使用ARM方式编译 ** **--------------历史版本信息---------------------------------------------------------------------------- ** 创建人: 陈明计 ** 版 本: 1.0 ** 日 期: 2003年6月5日 ** 描 述: 原始版本 ** **------------------------------------------------------------------------------------------------------ ** 修改人: 陈明计 ** 版 本: 1.1 ** 日 期: 2003年6月13日 ** 描 述: 增加函数IsrEnIRQ,使函数OSTaskStkInit代码更简洁 ** **------------------------------------------------------------------------------------------------------ ** 修改人: 陈明计 ** 版 本: 1.2 ** 日 期: 2003年6月19日 ** 描 述: 增加软中断服务函数 ** **------------------------------------------------------------------------------------------------------ ** 修改人: 陈明计 ** 版 本: 1.3 ** 日 期: 2003年7月8日 ** 描 述: 去除不必要的函数IsrEnIRQ ** **--------------当前版本修订------------------------------------------------------------------------------ ** 修改人: ** 日 期: ** 描 述: ** **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ #define OS_CPU_GLOBALS #include "config.h" /********************************************************************************************************* ** 函数名称: OSTaskStkInit ** 功能描述: 任务堆栈初始化代码,本函数调用失败会使系统崩溃 ** 输 入: task : 任务开始执行的地址 ** pdata :传递给任务的参数 ** ptos :任务的堆栈开始位置 ** opt :附加参数,当前版本对于本函数无用,具体意义参见OSTaskCreateExt()的opt参数 ** 输 出: 栈顶指针位置 ** 全局变量: ** 调用模块: ** ** 作 者: 陈明计 ** 日 期: 2003年6月5日 **------------------------------------------------------------------------------------------------------- ** 修改人: 陈明计 ** 日 期: 2003年6月13日 **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) { OS_STK *stk; opt = opt; /* 'opt' 没有使用。作用是避免编译器警告 */ stk = ptos; /* 获取堆栈指针 */ /* 建立任务环境,ADS1.2使用满递减堆栈 */ *stk = (OS_STK) task; /* pc */ *--stk = (OS_STK) task; /* lr */ *--stk = 0; /* r12 */ *--stk = 0; /* r11 */ *--stk = 0; /* r10 */ *--stk = 0; /* r9 */ *--stk = 0; /* r8 */ *--stk = 0; /* r7 */ *--stk = 0; /* r6 */ *--stk = 0; /* r5 */ *--stk = 0; /* r4 */ *--stk = 0; /* r3 */ *--stk = 0; /* r2 */ *--stk = 0; /* r1 */ *--stk = (unsigned int) pdata; /* r0,第一个参数使用R0传递 */ *--stk = (USER_USING_MODE|0x00); /* spsr,允许 IRQ, FIQ 中断 */ *--stk = 0; /* 关中断计数器OsEnterSum; */ return (stk); } /********************************************************************************************************* ** 函数名称: SWI_Exception ** 功能描述: 软中断异常处理程序,提供一些系统服务 ** ** 输 入: SWI_Num:功能号 ** Regs[0] 为第一个参数,也是返回值 ** Regs[1] 为第二个参数 ** Regs[2] 为第三个参数 ** Regs[3] 为第四个参数 ** 输 出: 根据功能而定 ** ** 全局变量: 无 ** 调用模块: 无 ** ** 作 者: 陈明计 ** 日 期: 2003年6月5日 **------------------------------------------------------------------------------------------------------- ** 修改人: 陈明计 ** 日 期: 2003年6月19日 **------------------------------------------------------------------------------------------------------- ** 修改人: 陈明计 ** 日 期: 2003年6月24日 **------------------------------------------------------------------------------------------------------ ********************************************************************************************************/ #if OS_SELF_EN > 0 extern int const _OSFunctionAddr[]; extern int const _UsrFunctionAddr[]; #endif void SWI_Exception(int SWI_Num, int *Regs) { OS_TCB *ptcb; switch(SWI_Num) { //case 0x00: /* 任务切换函数OS_TASK_SW,参考os_cpu_s.s文件 */ // break; //case 0x01: /* 启动任务函数OSStartHighRdy,参考os_cpu_s.s文件 */ // break; case 0x02: /* 关中断函数OS_ENTER_CRITICAL(),参考os_cpu.h文件 */ __asm { MRS R0, SPSR ORR R0, R0, #NoInt MSR SPSR_c, R0 } OsEnterSum++; break; case 0x03: /* 开中断函数OS_EXIT_CRITICAL(),参考os_cpu.h文件 */ if (--OsEnterSum == 0) { __asm { MRS R0, SPSR BIC R0, R0, #NoInt MSR SPSR_c, R0 } } break; #if OS_SELF_EN > 0 case 0x40: /* 返回指定系统服务函数的地址 */ /* 函数地址存于数组_OSFunctionAddr中*/ /* 数组_OSFunctionAddr需要另外定义 */ /* Regs[0] 为第一个参数,也是返回值 */ /* Regs[1] 为第二个参数 */ /* Regs[2] 为第三个参数 */ /* Regs[3] 为第四个参数 */ /* 仅有一个参数为系统服务函数的索引 */ Regs[0] = _OSFunctionAddr[Regs[0]]; break; case 0x41: /* 返回指定用户的服务函数的地址 */ /* 函数地址存于数组_UsrFunctionAddr中*/ /* 数组_UsrFunctionAddr需要另外定义 */ /* Regs[0] 为第一个参数,也是返回值 */ /* Regs[1] 为第二个参数 */ /* Regs[2] 为第三个参数 */ /* Regs[3] 为第四个参数 */ /* 仅有一个参数为用户服务函数的索引 */ Regs[0] = _UsrFunctionAddr[Regs[0]]; break; case 0x42: /* 中断开始处理 */ OSIntNesting++; break; case 0x43:
评论
    相关推荐
    • 祝贺小程序
      是一个可以送给女朋友的小程序,真的蛮不错的
    • 计算小程序
      很好的渐开线花键计算小程序 对需要的人很重要
    • 表白小程序
      里面有三个表白小程序,都行抖音里的。EXE格式 休闲时间小作
    • 小程序模板
      支付宝小程序的模板。支付宝小程序的模板。支付宝小程序的模板。支付宝小程序的模板。
    • 记账小程序
      簿记 曲线记账小程序小程序为及其示例小程序。 预览 可能由伴侣提供支持。
    • 关机小程序
      VC 写的关机小程序,不到2K。 注意,点了就关机了。
    • 招聘小程序
      体育圈招聘小程序,测试可用,不带后台,供参考。此源码仅可用作学习和交流。
    • 精美小程序
      精美小程序 精美小程序 精美小程序 精美小程序 精美小程序
    • 桌面小程序
      让桌面开花的小程序。 让桌面开花的小程序。 让桌面开花的小程序。 让桌面开花的小程序
    • 测绘小程序
      测绘小程序,大地测量四边形用到的小程序测绘小程序,大地测量四边形用到的小程序测绘小程序,大地测量四边形用到的小程序