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

📄 os_cpu_c.c

📁 s3c2410上用Keil开发的ucosII源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			 /*  
*********************************************************************************************************  
*                                               uC/OS-II  
*                                         The Real-Time Kernel  
*  
*                         (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL  
*                                          All Rights Reserved  
*  
*  
*                                       80x86/80x88 Specific code  
*                                          LARGE MEMORY MODEL  
*  
*                                          Borland C/C++ V4.51  
*  
* File         : OS_CPU_C.C  
* By           : Jean J. Labrosse  
*********************************************************************************************************  
*/   
   
#define  OS_CPU_GLOBALS    
//#include "includes.h"  
#include "UCOS_II.H"  
   
/*  
*********************************************************************************************************  
*                                       OS INITIALIZATION HOOK  
*                                            (BEGINNING)  
*  
* Description: This function is called by OSInit() at the beginning of OSInit().进入OSInit()函数后,OSInitHookBegin()就会  
立即被调用。添加这个函数的原因在于,想把与OS有关的初始化代码也放在OSInit()函数中。这个函数使得用户可以将自己特定的代码也  
放在OSInit()函数中。这样代码会简洁明了。  
*  
* Arguments  : none  
*  
* Note(s)    : 1) Interrupts should be disabled during this call.  
*********************************************************************************************************  
*/   
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203    
void  OSInitHookBegin (void)   
{   
}   
#endif    
   
/*  
*********************************************************************************************************  
*                                       OS INITIALIZATION HOOK  
*                                               (END)  
*  
* Description: This function is called by OSInit() at the end of OSInit().OSInitHookEnd()与OSInitHookBegin()函数相似,只是  
它在OSInit()函数返回之前被调用。添加这个函数的原因与添加OSInitHookBegin()的原因是相同的。可以在第15章看到OSInitHookEnd()的  
例子。  
*  
* Arguments  : none  
*  
* Note(s)    : 1) Interrupts should be disabled during this call.  
*********************************************************************************************************  
*/   
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203    
void  OSInitHookEnd (void)   
{   
}   
#endif    
   
/*$PAGE*/   
/*  
*********************************************************************************************************  
*                                          TASK CREATION HOOK  
*  
* Description: This function is called when a task is created.每当添加任务时,OS_TCBInit()函数都会调用OSTaskCreateHook()函  
数。该函数允许扩展UCOS的功能。当UCOS设置完任务控制块(OS_TCB)初始化的绝大部分工作后,但在任务控制块被链接到相应的任务链中之  
前, 以及在该任务就绪运行之前,UCOS会调用OSTaskCreateHook()。该函数被调用时中断是开着的。  
当OSTaskCreateHook()被调用时,它会收到指向刚刚建立任务的任务控制块的指针。这样,OSTaskCreateHook()就可访问任务控制块结构所  
有的成员了。当用OSTaskCreate()建立任务时,OSTaskCreateHook()的功能是有限的;但当使用OSTaskCreateExt()建立任务时,会得到  
OS_TCB中的扩展指针(OSTCBExtPtr)。该指针可用来访问任务的附加数据,如浮点寄存器,MMU寄存器,任务计数器以及调试信息。可以检查  
OS_TCBInit(),看都做了哪些工作。  
*  
* Arguments  : ptcb   is a pointer to the task control block of the task being created.  
*  
* Note(s)    : 1) Interrupts are disabled during this call.  
*********************************************************************************************************  
*/   
#if OS_CPU_HOOKS_EN > 0                /*只有当OS_CFG.H中的OS_CPU_HOOKS_EN置一时,才会生成OS_CPU_C.C文件中的相应OS???Hook()    
函数。这些在本节和以下各节描述的HOOK函数的代码中,OS???Hook()函数是始终需要的,'#define constant OS_CPU_HOOKS_EN'并不意味着   
OS???Hook()是否被调用。OS_CPU_HOOKS_EN只是表明OS???Hook()函数是在OS_CPU_C.C文件中(OS_CPU_HOOKS_EN==1),还是在其他文件中   
(OS_CPU_HOOKS_EN==0)。这个特点使得用户可以在自己的移植实例中,在OS_CPU_C.C文件之外定义自己的HOOK函数。显然,使用该移植范例   
其他源文件的用户,应将OS_CPU_HOOKS_EN设置为0,以防止链接时出现重复定义错误。如果不需要使用HOOK函数这种机制来扩展UCOS的功能   
,可以将这些HOOK函数写成空函数。需要再次强调的是,UCOS需要这些HOOK函数(这些函数必须在某处定义)。*/   
void  OSTaskCreateHook (OS_TCB *ptcb)   
{   
    ptcb = ptcb;                       /* Prevent compiler warning                                     */   
}   
#endif    
   
   
/*  
*********************************************************************************************************  
*                                           TASK DELETION HOOK  
在任务从就绪态列表或等待列表(若任务在等待某事件发生)中被删除后,OSTaskDel()就会调用OSTaskDelHook()。该函数在将任务从UCOS  
的内部有效任务链表中删除之前被调用。当调用OSTaskDelHook()时,它会收到一个指向正在被删除任务的任务控制块的指针,这样它就可  
以访问该任务控制块所有的结构成员了。OSTaskDelHook()可以用来检验TCB扩展部分是否已建立了(一个非空的指针),并进行一些清0等操  
作。OSTaskDelHook()被调用时,中断是关掉的,所以该函数的代码太长会影响中断响应时间。  
*  
* Description: This function is called when a task is deleted.  
*  
* Arguments  : ptcb   is a pointer to the task control block of the task being deleted.  
*  
* Note(s)    : 1) Interrupts are disabled during this call.  
*********************************************************************************************************  
*/   
#if OS_CPU_HOOKS_EN > 0     
void  OSTaskDelHook (OS_TCB *ptcb)   
{   
    ptcb = ptcb;                       /* Prevent compiler warning                                     */   
}   
#endif    
   
/*  
*********************************************************************************************************  
*                                             IDLE TASK HOOK  
*  
* Description: This function is called by the idle task.  This hook has been added to allow you to do    
*              such things as STOP the CPU to conserve power.很多处理器都允许执行相应的指令,将CPU置于低功耗模式。而当接受  
到中断信号时,CPU就会退出低功耗模式。OSTaskIdle()函数可调用OSTaskIdleHook()函数,实现CPU的这种低功耗模式。详见邵贝贝UCOSII  
*P300  
* Arguments  : none  
*  
* Note(s)    : 1) Interrupts are enabled during this call.  
*********************************************************************************************************  
*/   
#if OS_CPU_HOOKS_EN > 0 && OS_VERSION >= 251    
void  OSTaskIdleHook (void)   
{   
}   
#endif    
   
/*  
*********************************************************************************************************  
*                                           STATISTIC TASK HOOK  
*  
* Description: This function is called every second by uC/OS-II's statistics task.  This allows your   
*              application to add functionality to the statistics task.OSTaskStatHook函数每秒都会被统计任务OSTaskStat()调用  
一次。可以用OSTaskStatHook()扩展统计任务的功能。例如,可以跟踪并显示每个任务的执行时间,每个任务所用的CPU份额以及每个任务  
执行的频率等等。  
*  
* Arguments  : none  
*********************************************************************************************************  
*/   
   
#if OS_CPU_HOOKS_EN > 0     
void  OSTaskStatHook (void)   
{   
}   
#endif    
   
/*$PAGE*/   
/*  
*********************************************************************************************************  
*                                        INITIALIZE A TASK'S STACK   
UCOS的移植范例要求用户编写10个简单的C函数。唯一必要的是OSTaskStkInit(),其他9个函数必须声明,但并不一定要包含任何代码。  

⌨️ 快捷键说明

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