⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos.txt

📁 本文面向首次接触uC/OS-II的程序员
💻 TXT
字号:
http://home.pomoho.com/meimeiyouyue/1684331
http://www.mop3721.com/mtv/zipai/html/12668.html
http://v.youku.com/v_show/id_XMjk3NDExMzI=.html
http://www.duanxin08.cn/cr/
帖子编号: 802670 发表用户:bobi2005    发表时间:2007-11-13 20:27:21     访问次数:113    获得0颗星的评价 
   

文章内容: 

/***********************************************************************************************************                * File : OS_CPU_C.C* By   : Jean J. Labrosse**********************************************************************************************************/#define  OS_CPU_GLOBALS#include "includes.h"/*  初始化任务堆栈** 描述       : 这个函数被OSTaskCreate()或OSTaskCreateExt()调用,以便初始化新创建任务的堆栈结构。本函数*              与处理器高度相关。** 参数       : task          指向任务代码的指针**              pdata         当任务第一次执行时将要传入任务的用户数据结构指针**              ptos          栈顶指针。ptos指针被默认为用户堆栈入口指针。如果OS_STK_GROWTH被置1,那么,*                            ptos指向用户堆栈的最高有效地址。同样地,如果OS_STK_GROWTH清0,ptos将指向*                            用户堆栈的最低有效地址。**              opt           指定可以改变OSTaskStkInit()行为的选项。(见uCOS_II.H for OS_TASK_OPT_???)。** 返回值     : 我修改了原来的程序,使函数总是返回用户堆栈空间的最低有效地址。这样修改提高了TCB换入换出*              的效率。** 注意       : 任务堆栈结构:**                                    ---------- -*                 用户栈最高地址---->|        | |*                                    ---------- |*                                    |   ...  | 仿真堆栈空间*----------                          ---------- | 每任务一个*|OSTCBCur|               ?C_XBP---->|        | | KEIL自动处理*----------                          ---------- -*    |                               |空闲间隔|*    |     -----------------------   ----------                           ----------*    \---->|OSTCBCur->OSTCBStkPtr|   |?C_XBP低|                    SP---->|        |*          -----------------------   ----------                           ----------*                     |              |?C_XBP高|                           |        |*                     |              ---------- -                         ----------*                     |              |        | |                         |   .    |*                     |              ---------- |                         |   .    |*                     |              |        | |                         |   .    |*                     |              ---------- |                         ----------*                     |              |   .    |长度                       |        | +1*                     |              |   .    | |                         ----------*                     |              |   .    | |             OSStack---->|        | 0*                     |              ---------- |                         ----------*                     |              |        | |          OSStkStart---->| 不关心 | -1  低地址*                     |              ---------- -                         ----------*                     \------------->|  长度  | 低地址                   系统硬件堆栈*                                    ----------*                                     用户堆栈                       长度=SP-OSStkStart**********************************************************************************************************/void *OSTaskStkInit(void (*task)(void *pd), void *ppdata, void *ptos, INT16U opt) reentrant{        OS_STK *stk;    ppdata = ppdata;    opt    = opt;                           //opt没被用到,保留此语句防止告警产生        stk    = (OS_STK *)ptos;                //用户堆栈最低有效地址    *stk++ = 15;                            //用户堆栈长度    *stk++ = (INT16U)task & 0xFF;           //任务地址低8位  PCL    *stk++ = (INT16U)task >> 8;             //任务地址高8位  PCH      *stk++ = 0x00;                          //PSW    *stk++ = 0x0A;                          //ACC    *stk++ = 0x0B;                          //B    *stk++ = 0x00;                          //DPL    *stk++ = 0x00;                          //DPH    *stk++ = 0x00;                          //R0    *stk++ = 0x01;                          //R1    *stk++ = 0x02;                          //R2    *stk++ = 0x03;                          //R3    *stk++ = 0x04;                          //R4    *stk++ = 0x05;                          //R5    *stk++ = 0x06;                          //R6    *stk++ = 0x07;                          //R7                                            //不用保存SP,任务切换时根据用户堆栈长度计算得出。        return ((void *)ptos);}#if OS_CPU_HOOKS_EN/***********************************************************************************************************                                          任务创建钩挂函数** 描述       : 任务创建时调用** 参数       : ptcb是指向将被创建任务的任务控制块的指针。** 注意       : 1) 调用期间中断被禁止**********************************************************************************************************/void OSTaskCreateHook (OS_TCB *ptcb) reentrant{    ptcb = ptcb;                       /* Prevent compiler warning   */}/***********************************************************************************************************                                          任务删除钩挂函数** 描述       : 任务删除时调用** 参数       : ptcb是指向将被删除任务的任务控制块的指针。** 注意       : 1) 调用期间中断被禁止**********************************************************************************************************/void OSTaskDelHook (OS_TCB *ptcb) reentrant{    ptcb = ptcb;                       /* Prevent compiler warning  */}/***********************************************************************************************************                                          定时钩挂函数** 描述       : 本函数每一滴答被调用一次。** 参数       : 无** 注意       : 1) 在本调用期间中断可以或不可以使能。**********************************************************************************************************/void OSTimeTickHook (void) reentrant{}#endif//初始化定时器0void InitTimer0(void) reentrant{    TMOD=TMOD&0xF0;    TMOD=TMOD|0x01;    //模式1(16位定时器),仅受TR0控制    TH0=0x70;    //定义Tick=50次/秒(即0.02秒/次)    TL0=0x00;    //OS_CPU_A.ASM  和  OS_TICKS_PER_SEC    ET0=1;       //允许T0中断    TR0=1;   }我在编译中遇到如下问题,编译器报错:堆栈初始化函数重新定义Build target 'Target 1'compiling yy.c...compiling OS_CORE.C...compiling OS_MBOX.C...compiling OS_Q.C...compiling OS_SEM.C...compiling OS_TASK.C...compiling OS_TIME.C...compiling UCOS_II.C...compiling OS_MEM.C...compiling OS_CPU_C.C...OS_CPU_C.C(63): error C231: 'OSTaskStkInit': redefinitionassembling OS_CPU_A.ASM...Target not created请问如何解决该问题?希望能帮帮忙?谢谢大家?
   


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -