📄 os_cpu_c.c
字号:
/*
*********************************************************************************************************
* uC/OS-II实时内核
*
* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
* (c) Copyright ARM Limited 1999. All rights reserved.
*
* ARM 专用代码
*
*
* 文件名称 : OS_CPU_C.C
*********************************************************************************************************
*/
#define OS_CPU_GLOBALS
#include "..\test\SRC\includes.h"
/*
*********************************************************************************************************
* 操作系统的初始化钩子函数
* (开始处)
*
* 函数描述: 该函数在函数 OSInit()开始处被调用。
*
* 输入参数: 无
*
* 注释 : 在调用过程中,中断应是关闭的。
*********************************************************************************************************
*/
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void OSInitHookBegin (void)
{
}
#endif
/*
*********************************************************************************************************
* 操作系统的初始化钩子函数
* (结束处)
*
* 函数描述: 该函数在函数 OSInit()结束处被调用。
*
* 输入参数: 无
*
* 注释 : 在调用过程中,中断应是关闭的。
*********************************************************************************************************
*/
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void OSInitHookEnd (void)
{
}
#endif
/*
*********************************************************************************************************
* 初始化任务堆栈
*
* 函数描述: 该函数由 OSTaskCreate() 或 OSTaskCreateExt() 调用以初始化创建的任务的堆栈。
*
* 输入参数: task 指向任务代码的指针
*
* pdata 当任务首先执行时,传递给任务的由用户提供的数据域的指针
*
* ptos 指向栈顶的指针。'ptos' 指到任务堆栈中的空闲栈处。如果OS_STK_GROWTH 设为 1,
* 则'ptos'将是最高的有效堆栈地址。如果OS_STK_GROWTH 设为0, 'ptos' 将是最低的
* 有效堆栈地址。
*
* opt 用于改变 OSTaskStkInit()的特殊选项。
* (见 uCOS_II.H 的 OS_TASK_OPT_???).
*
* 返回值 : 在处理器的寄存器以恰当的顺序压入堆栈后,总是返回新的栈顶的地址。
*
* 注意 : 任务开始执行时,中断是打开的。通过设定PSW到0x0002可以改变。在该种情形下,当任务启动时,中断关闭。
* 应用程序应负责在任务的开始处打开中断。需要修改OSTaskIdle() 和OSTaskStat() 以便能打开中断。如果
* 没有这么做,将使系统崩溃。
*********************************************************************************************************
*/
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
{
OS_STK *stk;
opt = opt; /* 'opt' 没有使用, 预防警告错误 */
stk = ptos; /* 加载堆栈指针 */
*(stk) = (OS_STK)task; /* 进入点 */
*(--stk) = (INT32U)0; /* lr */
*(--stk) = (INT32U)0; /* r12 */
*(--stk) = (INT32U)0; /* r11 */
*(--stk) = (INT32U)0; /* r10 */
*(--stk) = (INT32U)0; /* r9 */
*(--stk) = (INT32U)0; /* r8 */
*(--stk) = (INT32U)0; /* r7 */
*(--stk) = (INT32U)0; /* r6 */
*(--stk) = (INT32U)0; /* r5 */
*(--stk) = (INT32U)0; /* r4 */
*(--stk) = (INT32U)0; /* r3 */
*(--stk) = (INT32U)0; /* r2 */
*(--stk) = (INT32U)0; /* r1 */
*(--stk) = (INT32U)pdata; /* r0 */
*(--stk) = (INT32U)(SVC32MODE|0x0); /* CPSR SVC32MODE */
*(--stk) = (INT32U)(SVC32MODE|0x0); /* SPSR SVC32MODE */
return (stk);
}
/*$PAGE*/
#if OS_CPU_HOOKS_EN
/*
*********************************************************************************************************
* 任务创建钩子函数
*
* 函数描述 : 当任务创建时,该函数被调用。
*
* 输入参数 : ptcb 指向创建的任务的任务控制块的指针。
*
* 注意 : 在调用过程中,中断应是关闭的。
*********************************************************************************************************
*/
void OSTaskCreateHook (OS_TCB *ptcb)
{
ptcb = ptcb; /* 预防警告错误 */
}
/*
*********************************************************************************************************
* 删除任务的钩子函数
*
* 函数描述 : 当任务删除时,该函数被调用。
*
* 输入参数 : ptcb 指向被删除的任务的任务控制块的指针。
*
* 注意 : 在调用过程中,中断应是关闭的。
*********************************************************************************************************
*/
void OSTaskDelHook (OS_TCB *ptcb)
{
ptcb = ptcb; /* 预防警告错误 */
}
/*
*********************************************************************************************************
* 空闲任务的钩子函数
*
* 函数描述: 该函数被空闲任务调用 该函数用于做一些如停止CPU以节省电源的工作。
*
* 输入参数: 无
*
* 注意 : 在调用过程中,中断应是关闭的。
*********************************************************************************************************
*/
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251
void OSTaskIdleHook (void)
{
}
#endif
/*
*********************************************************************************************************
* 任务控制块初始化的钩子函数
*
* Description: 在建立起大部分的TCB后,该函数由OS_TCBInit()调用。
*
* 输入参数 : ptcb 指向创建的任务的任务控制块的指针。
*
* 注意 : 在调用过程中,中断可开可闭。
*********************************************************************************************************
*/
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void OSTCBInitHook (OS_TCB *ptcb)
{
ptcb = ptcb; /* 预防警告错误 */
}
#endif
/*
*********************************************************************************************************
* 任务切换钩子函数
*
* 函数描述: 当任务切换时该函数被调用。允许用户在任务切换时完成一定的操作。
*
* 输入参数 :无
*
* 注意 : 1)在调用过程中,中断应是关闭的。
* 2)指向任务的TCB的全局指针 'OSTCBHighRdy' 将切换进 (例如,最高优先级任务) 以及, 指向任务的
* 'OSTCBCur'被切换出(例如 剥夺式任务).
*********************************************************************************************************
*/
void OSTaskSwHook (void)
{
}
/*
*********************************************************************************************************
* 统计任务的钩子函数
*
* 函数描述: 该函数被uC/OS-II'的统计任务每秒调用一次。这允许用户填加功能到统计任务里。
*
* 输入参数 : 无
*********************************************************************************************************
*/
void OSTaskStatHook (void)
{
}
/*
*********************************************************************************************************
* 时钟节拍的钩子函数
*
* 函数描述: 每个节拍调用该函数一次。
*
* 输入参数: 无
*
* 注意 : 在调用过程中,中断可开可闭。
*********************************************************************************************************
*/
#if (OS_CPU_HOOKS_EN > 0) && (OS_TIME_TICK_HOOK_EN > 0)
void OSTimeTickHook (void)
{
}
#endif
INT32U OSIntCtxSwFlag = 0; /* 使用任务切换标志*/
#endif //OS_CPU_HOOKS_EN
/*
*************************************************************************************************************
** 结束文件 **
*************************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -