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

📄 os_cpu_c.c

📁 uCOSII-2.76在sunplus的16位MCU产品SPMC75下的移植代码,包含完整的工程和uCOSII-2.76的源码! SPMC75是一种功能强大的16位MCU,拥有功能强大的多个定时器.
💻 C
字号:
/**********************************************************************************************************
*                                               uC/OS-II
*                                               实时内核
*
*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
*                                               版权所有
*
*                                            unSP 专用代码
*
* 文件名 : OS_CPU_C.C
* 作者   : Jean J. Labrosse
* 改编   : 牟联树 lianshu@sunnorth.com.cn 北京北阳电子技术有限公司
**********************************************************************************************************/

#define  OS_CPU_GLOBALS
#include "UCOS-II\unSP\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
**********************************************************************************************************/
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
{    
    OS_STK *stk;
    pdata = pdata;
    opt    = opt;                               //opt没被用到,保留此语句防止告警产生  
    stk    = (OS_STK *)ptos;                    //用户堆栈最高有效地址
    *stk-- = 10;                                //用户堆栈长度 
    *stk-- = (INT16U)pdata;     
 //   *stk-- = (INT16U) (ptos - TaskStkSize);
    *stk-- = *((INT16U *)task + 1); 		    //任务地址 
    *stk-- = 0x0000;
    *stk-- = 0x5555;                            //r5
    *stk-- = 0x4444;                            //r4
    *stk-- = 0x3333;                            //r3
    *stk-- = 0x2222;                            //r2
    *stk-- = 0x1111;                            //r1       
    return ((void *)ptos);
}

//目标板初始化
void Sys_Init(void)
{
	//PLLCON = 0x80;
}

//初始化比较定时器CMT0
void InitCMT0(void)
{
    P_CMT0_TPR->W = 0xEA60;     //定义Tick=200次/秒(即0.005秒/次)
    P_CMT_Ctrl->W &= 0xff00;
    P_CMT_Ctrl->W |= 0x0041;	//允许CMT0中断,时钟为 CPUCLK/2
    P_CMT_Start->W |= 0x0001;   //启动定时器CMT0 
}

⌨️ 快捷键说明

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