UCOS-Ⅱ下的C语言文件功能函数

合集下载

uCOS-II_常用函数查询

uCOS-II_常用函数查询

第11章参考手册#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) OS_FlagInit(); // Initialize the event flag structures#endif#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)OS_MemInit(); // Initialize the memory manager#endif#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)OS_QInit(); // Initialize the message queue structures */ #endifOS_InitTaskIdle(); // Create the Idle Task#if OS_TASK_STAT_EN > 0OS_InitTaskStat(); //Create the Statistic Task#endif(Intel 80x86的实模式, 在大模式下编译,,real mode,large model)OS_ENTER_CRITICAL();//Reschedule only if all ISRs completed & not lockedif ((--OSIntNesting | OSLockNesting) == 0){OSIntExitY = OSUnMapTbl[OSRdyGrp];OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);if (OSPrioHighRdy != OSPrioCur) //No context switch if current task is highest ready{OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];OSCtxSwCtr++; // Keep track of the number of context switchesOSIntCtxSw(); // Perform interrupt level context switch}}OS_EXIT_CRITICAL();}注意/警告:在调用OSStart( )之前必须先调用OSInit ( )。

ucosII功能函数大全(第九课)

ucosII功能函数大全(第九课)

uc/osII下的九个C语言文件功能函数大全一、OS_CORE.C(1)void OSInit (void)(2)void OSIntEnter (void)(3)void OSIntExit (void)(4)void OSSchedLock (void) // 给调度器上锁(5)void OSSchedUnlock (void) // 给调度器解锁,成对使用(6)void OSStart (void) // 启动多任务过程,在启动之前必须调用OSInit(),并已建立一个任务。

其中OSStartHighRdy()必须调用OSTaskSwHook(),并令OSRunning = TRUE.(7)void OSStatInit (void) // 确定CPU 使用率(8)void OSTimeTick (void) // 时钟节拍服务函数,在每个时钟节拍了解每个任务的延时情况,使其中已经到了延时时限的非挂起任务进入就绪状态(9)INT16U OSVersion (void) // 返回uc/os的版本号*100(10)void OS_Dummy (void) // 不做任何事情,被OSTaskDel() 所调用(11)INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)// 使一个正在等待的任务进入就绪状态,在调用函数OS***Post发送一个事件时被调用(12)void OS_EventTaskWait (OS_EVENT *pevent)// 因为一个事件未发生而挂起一个任务时被调用(13)void OS_EventTO (OS_EVENT *pevent)// 使一个等待超时的任务进入就绪状态(14)void OS_EventWaitListInit (OS_EVENT *pevent)// 把OSEventGrp及任务等待表中的每一位清零,即令ECB中不含任务等待,被OS***Create()调用(15)void OS_Sched (void) // 实现任务级的调度(16)void OS_TaskIdle (void *pdata) // 空闲任务,为使CPU 在没有用户任务时有事可做(17)void OS_TaskStat (void *pdata) // 统计任务,每秒计算一次CPU在单位时间内的使用时间,并将计算结果以百分数的形式存放在OSCPUUsage中,以便应用程序访问它来了解cpu的利用率(18)INT8U OS_TCBInit (INT8U prio, // 任务的优先级别,存于OSTCBPrioOS_STK *ptos, // 任务堆栈顶指针,存于OSTCBStkPtrOS_STK *pbos, // 任务堆栈栈底指针,存于OSTCBStkBottomINT16U id, // 任务的标识符,存于OSTCBIDINT32U stk_size, // 任务堆栈长度,存于OSTCBStkSizevoid *pext, // 任务控制块的扩展指针,存于OSTCBExtPtrINT16U opt) // 任务控制块的选择项,存于OSTCBOpt// 为用户程序分配任务控制块及对其进行初始化备注:INT8U const OSUnMapTbl[ ] 是uc/os 为提高查找速度而定义的一个数组二、OS_FLAG.C(1)OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, // 信号量的初始值INT8U *err) // 错误信息// 信号量集的创建函数(2)void OS_FlagInit (void) // initialize the event flag module,是uc/os的内部函数,应用程序不得调用该函数(3)OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, // 所要删除的信号量集指针INT8U opt, // 选择项INT8U *err)// 删除信号量集(4)OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, // 所要请求的信号量集的指针OS_FLAGS flags, // 滤波器INT8U wait_type, // 等待类型INT16U timeout, // 延时时限INT8U *err) // 错误信息// 请求信号量集(5)OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, // 所请求的信号量集指针OS_FLAGS flags, // 请求的信号INT8U wait_type, // 逻辑运算类型INT8U *err) // 错误信息// 无等待的请求一个信号量集(6)OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp,OS_FLAGS flags, // 所要选择发送的信号INT8U opt, // 信号有效的选项INT8U *err)// 向信号量集发送信号(7)OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, // 待查询的信号量集的指针INT8U *err)// 查询信号量的状态,返回被查询信号量集标志组的成员OSFlagFlags(8)static void OS_FlagBlock (OS_FLAG_GRP *pgrp, // 信号量集指针OS_FLAG_NODE *pnode, // 待添加的等待任务节点指针OS_FLAGS flags, // 指定等待信号的数据INT8U wait_type, // 信号与等待之间的逻辑INT16U timeout) // 等待时限// 添加节点,在请求信号量集函数OSFlagPend() 中被调用(9)static BOOLEAN OS_FlagTaskRdy (OS_FLAG_NODE *pnode,OS_FLAGS flags_rdy)// 期望的事件标志为已经置位,从而使一个任务准备运行(10)void OS_FlagUnlink (OS_FLAG_NODE *pnode)// 删除节点,在OSFlagPost() 中被调用三、OS_MBOX.C(1)void *OSMboxAccept (OS_EVENT *pevent)// 无等待的请求消息邮箱(2)OS_EVENT *OSMboxCreate (void *msg)// 创建一个消息邮箱(3)OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *er r)// 删除消息邮箱(4)void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 请求消息邮箱,查看OSEventPtr是否为NULL (5)INT8U OSMboxPost (OS_EVENT *pevent, void *msg)// 向消息邮箱发送消息(6)INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)// 以广播形式向事件等待任务表中的所有任务发送消息(7)INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)// 状态查询四、OS_MEM.C(1)OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)// 创建动态内存(2)void *OSMemGet (OS_MEM *pmem, INT8U *err)// 请求获得一个内存块(3)INT8U OSMemPut (OS_MEM *pmem, void *pblk)// 释放一个内存块(4)INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)// 查询动态内存的状态(5)void OS_MemInit (void) // 初始化动态内存五、OS_MUTEX.C(1)INT8U OSMutexAccept (OS_EVENT *pevent, INT8U *err)// 无等待时间的请求信号量(2)OS_EVENT *OSMutexCreate (INT8U prio, INT8U *err)// 创建互斥型信号量(3)OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *er r)// 删除互斥型信号量(4)void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 有等待时间的请求信号量(5)INT8U OSMutexPost (OS_EVENT *pevent)// 发送(释放)互斥型信号量(6)INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *pdat a)// 获取互斥型信号量的当前状态六、OS_Q.C(1)void *OSQAccept (OS_EVENT *pevent)// 无等待的请求一个消息队列(2)OS_EVENT *OSQCreate (void **start, INT16U size)// 创建一个消息队列(3)OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *err)// 删除消息队列(4)INT8U OSQFlush (OS_EVENT *pevent)// 清空消息队列(5)void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 有等待的请求一个消息队列(6)INT8U OSQPost (OS_EVENT *pevent, void *msg)// 以“先进先出”的方式向消息队列发送消息(7)INT8U OSQPostFront (OS_EVENT *pevent, void *msg)// 以“后进先出”的方式向消息队列发送消息(8)INT8U OSQPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)// 以“广播”方式向消息队列发送消息(9)INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)// 获取消息队列的当前状态(10)void OS_QInit (void)// 消息队列初始化七、OS_SEM.C(1)INT16U OSSemAccept (OS_EVENT *pevent)// 无等待的请求信号量(2)OS_EVENT *OSSemCreate (INT16U cnt)// 创建信号量(3)OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *err)// 删除信号量(4)void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 有等待的请求信号量(5)INT8U OSSemPost (OS_EVENT *pevent)// 发送(释放)信号量(6)INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)// 获取信号量的当前状态八、OS_TASK.C(1)INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)// 任务优先级别的改变(2)INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *pt os, INT8U prio)// 任务的创建(3)INT8U OSTaskCreateExt (void (*task)(void *pd), // 指向任务的指针void *pdata, // 传递给任务的参数OS_STK *ptos, // 指向任务堆栈栈顶的指针INT8U prio, // 创建任务的优先级INT16U id, // 任务的标识OS_STK *pbos, // 任务堆栈栈底的指针INT32U stk_size, // 任务堆栈的长度void *pext, // 指向附加数据域的指针INT16U opt) // 用于设定操作的选项// 任务的另一种创建函数,更加灵活,但也增加了额外的开销(4)INT8U OSTaskDel (INT8U prio) // 任务的删除(5)INT8U OSTaskDelReq (INT8U prio) // 请求删除任务函数(6)INT8U OSTaskResume (INT8U prio) // 任务的恢复(7)INT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)// 校核空余内存的数量(8)INT8U OSTaskSuspend (INT8U prio) // 任务的挂起,可用来挂起自身或除空闲任务之外的任何任务(9)INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)// 任务的查询九、OS_TIME.C(1)void OSTimeDly (INT16U ticks) // 以时钟节拍数为单位延时(2)INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U second s, INT16U milli)// 用时、分、秒、毫秒为单位延时(3)INT8U OSTimeDlyResume (INT8U prio)// 取消延时,若任务比正在运行的任务级别高,则立即引发一次调度(4)INT32U OSTimeGet (void) // 获取OSTime 值(5)void OSTimeSet (INT32U ticks) // 设置OSTime 值注:INT32U OSTime // 全局变量,用以记录系统发生的时钟节拍。

c语言 文件操作函数

c语言 文件操作函数

c语言文件操作函数C语言文件操作函数C语言文件操作函数是C语言提供的一种文件操作方式,可以通过这些函数来读取、写入和修改文件。

文件操作函数可以帮助我们完成很多与文件有关的任务,比如读取配置文件、保存用户数据等。

在本文中,将介绍C语言中常用的文件操作函数。

打开文件在C语言中,我们可以使用fopen()函数来打开一个文件。

该函数的原型如下:FILE *fopen(const char *filename, const char *mode);其中,filename表示要打开的文件名,mode表示打开文件的模式。

mode的取值如下:- "r":以只读方式打开文件- "w":以写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则清空该文件- "a":以写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则在文件末尾追加数据- "r+":以读写方式打开文件,文件必须存在- "w+":以读写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则清空该文件- "a+":以读写方式打开文件,如果文件不存在,则创建该文件;如果文件已存在,则在文件末尾追加数据例如,我们可以使用以下代码来打开一个名为example.txt的文件:FILE *fp;fp = fopen("example.txt", "w+");if (fp == NULL) {printf("Open file failed!\n");}在打开文件之后,我们可以使用fclose()函数来关闭文件,释放文件资源。

例如:fclose(fp);读取文件在C语言中,我们可以使用fscanf()函数从文件中读取数据。

该函数的原型如下:int fscanf(FILE *stream, const char *format, ...);其中,stream表示要读取数据的文件,format表示数据的格式。

ucosII中文教程

ucosII中文教程

ucosII中文教程(转1)1.01 INCLUDES.H用户将注意到本书中所有的*.C 文件都包括了以下定义:#include "includes.h"INCLUDE.H 可以使用户不必在工程项目中每个*.C文件中都考虑需要什么样的头文件。

换句话说,INCLUDE.H是主头文件。

这样做唯一的缺点是INCLUDES.H中许多头文件在一些*.C文件的编译中是不需要的。

这意味着逐个编译这些文件要花费额外的时间。

这虽有些不便,但代码的可移植性却增加了。

本书中所有的例子使用一个共同的头文件INCLUDES.H,3个副本分别存放在\SOFTWARE\uCOS-II\EX1_x86L,\ SOFTWARE\uCOS-II\EX2_x86L,以及\SOFTWARE\uCOS-II\EX3_x86L 中。

当然可以重新编辑INCLUDES.H以添加用户自己的头文件。

1.02不依赖于编译的数据类型因为不同的微处理器有不同的字长,µC/OS-II的移植文件包括很多类型定义以确保可移植性(参见\SOFTWARE\uCOS-II\Ix86L\OS_CPU.H,它是针对80x86的实模式,在大模式下编译)。

µCOS-II不使用C语言中的short,int,long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。

笔者代之以移植性强的整数数据类型,这样,既直观又可移植,如表L1.1所示。

为了方便起见,还定义了浮点数数据类型,虽然µC/OS- II中没有使用浮点数。

程序清单L1.1 可移植型数据类型。

Typedef unsigned char BOOLEAN;Typedef unsigned char INT8U;Typedef signed char INT8S;Typedef unsigned int INT16U;Typedef signed int INT16S;Typedef unsigned long INT32U;Typedef signed long INT32S;Typedef float FP32;Typedef double FP64;#define BYTE INT8S#define UBYTE INT8U#define WORD INT16S#define UWORD INT16U#define LONG INT32S#define ULONG INT32U以INT16U数据类型为例,它代表16位无符号整数数据类型。

uCOSII函数说明之–OSTaskCreate()与OSTaskCreateExt()

uCOSII函数说明之–OSTaskCreate()与OSTaskCreateExt()

uCOSII函数说明之–OSTaskCreate()与OSTaskCreateExt()1. OSTaskCreate()OSTaskCreate()建⽴⼀个新任务,可以在多任务环境启动之前,或者运⾏任务中建⽴任务。

注意,ISR中禁⽌建⽴任务,⼀个任务必须为⽆限循环结构。

源代码如下:#if OS_TASK_CREATE_EN > 0 /* 条件编译,是否允许任务的创建 */INT8U OSTaskCreate (void (*task)(void *pd), /* 函数指针,void *pd为函数的参数 */void *pdata, /* 建⽴任务时,传递的参数 */OS_STK *ptos, /* 指向堆栈任务栈顶的指针 */INT8U prio) /* 任务优先级 */{#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr;#endifOS_STK *psp;INT8U err;#if OS_ARG_CHK_EN > 0if (prio > OS_LOWEST_PRIO) { /* 参数检查,优先级是否处于允许优先级之内 */return (OS_PRIO_INVALID);}#endifOS_ENTER_CRITICAL(); /* 关中断 */if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* 判断任务的优先级是否存在,如不存在,设置任 */OSTCBPrioTbl[prio] = (OS_TCB *)1; /* 务优先级为1设置优先级后,就可以开中断了, *//* 不⽤担⼼冲突,因为该优先级已经被占了 */OS_EXIT_CRITICAL();psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);/* 初始化堆栈,此函数与具体的硬件有关,OS_CPU_C.C */err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0); /* 详见此函数的说明 */if (err == OS_NO_ERR) {OS_ENTER_CRITICAL();OSTaskCtr++; /* 任务计数器加1,统计运⾏的任务数 */OS_EXIT_CRITICAL();if (OSRunning == TRUE) { /* 如果是在任务运⾏过程中新建任务,需要进⾏ */OS_Sched(); /* 任务调度,保证优先级最⾼的任务处于运⾏态 */}} else {OS_ENTER_CRITICAL();OSTCBPrioTbl[prio] = (OS_TCB *)0;/* 如果任务创建失败,优先级设置为0,放弃该 *//* 任务的优先级保证别的任务创建时可以使⽤ *//* 此优先级 */OS_EXIT_CRITICAL();}return (err); /* 创建任务失败,返回错误代码 */}OS_EXIT_CRITICAL();return (OS_PRIO_EXIST); /* 返回OS_PRIO_EXIST,告知任务优先级已经存在 */}#endif2. OSTaskCreateExt()OSTaskCreateExt()为OSTaskCreate()的扩展函数,允许更多的内容设置。

可移植的ucOS-II C源程序代码规范

可移植的ucOS-II C源程序代码规范

*/
6
可移植的µcOS-II
C 源程序代码规范
Use trailing comments as much as possible.
As much as possible, always start the trailing comment on the same column. If the code goes beyond the selected column, place the comment on the line just above while still starting at the same column. As much as possible, line up the terminating comment charaters. Using trailing comments allows the code to be visually separate from the code.
*/
一个完整的程序文件是一个包含可执行语句文件,而头文件则不是。这两种文件看起
来很相像,如下所示。一个程序文件将包含部分或全部以下内容。
执行文件的布局: File heading Revision history
(文件头) (版本更新纪录)
4
#include
(包含文件)
#define constants (常量定义)
}
} else {
ClkMin++;
}
} else {
ClkSec++;
}
ቤተ መጻሕፍቲ ባይዱ
}
不要将单句注释分隔成多行。
从来也不要这样做:
/* This type of comment can lead to confusion especially when describing a function like ClkUpdateTime (). The function looks like actual code! */

uCOS-II在51单片机上的移植

uCOS-II在51单片机上的移植

功能
处理临界段方式选择 堆栈增长方向 进入临界区 退出临界区 就绪态最高优先级任务运行 任务级任务切换 中断级任务切换 时钟节拍 任务堆栈初始化
表7-1 需要修改的关键函数和宏定义
6
7.1.6 INCLUDES.H

* * * * * * 文件名 : INCLUDES.H * 作者 : Jean J. Labrosse ****************************************************************************/
9
7.1.8 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()
临界代码的概念。 uC/OS-II定义的两个宏。
{ OS_ENTER_CRITICAL(); /* µC/OS-II 临界代码段 */ OS_EXIT_CRITICAL(); }
#define OS_ENTER_CRITICAL() EA=0 #define OS_EXIT_CRITICAL() EA=1 #define OS_ENTER_CRITICAL() \
例如,任务A和任务B都要调用函数Swap(), 而该函数又使用了全局变量temp。于是当任 务A调用Swap()函数期间,系统发生了任务 切换而使任务B也调用了Swap(),那么任务B 将要改变全局变量temp的值,使任务A传递 给全局变量temp的值丢失而出现错误。
一般来说,一个可重入函数应该在函数中只 使用局部变量,因为函数的局部变量存储在 任务的堆栈中,所以可保证不同的任务在调 用同一个函数时不会发生冲突。
/ ******************* 与处理器相关的代码 ********************/ #define OS_CRITICAL_METHOD ?? #if OS_CRITICAL_METHOD = = 1 #define OS_ENTER_CRITICAL() ?? #define OS_EXIT_CRITICAL() ?? #endif

ucosii互斥信号量的用法

ucosii互斥信号量的用法

ucosii互斥信号量的用法
ucosii是一个嵌入式操作系统,提供了互斥信号量(Mutex Semaphore)作为一种同步机制。

互斥信号量是一个二进制信号量,用
于在多任务环境中保护共享资源。

它可以用来解决并发访问共享资源
可能引起的数据竞争问题。

互斥信号量主要有两个状态:锁定和非锁定。

只有一个任务可以
拥有互斥信号量的锁定状态,其他任务在请求锁定时会被阻塞。

当任
务完成对共享资源的操作后,会释放互斥信号量的锁定状态,允许其
他任务获取锁。

在ucosii中,可以使用以下函数来创建、获取和释放互斥信号量:
1.函数OSMutexCreate():用于创建一个互斥信号量。

可以设置互斥信号量的初始状态,创建成功后返回一个信号量控制块(OS_MUTEX)的指针。

2.函数OSMutexPend():用于获取一个互斥信号量的锁。

如果互斥信号量的锁已被其他任务获取,则当前任务会被阻塞,直到互斥信号
量的锁可用并成功获取。

3.函数OSMutexPost():用于释放一个互斥信号量的锁。

只有拥有互斥信号量锁的任务才能调用该函数进行释放。

4.函数OSMutexDel():用于删除一个互斥信号量。

如果互斥信号
量的锁被多个任务同时获取,则删除操作可能引起不可预测的行为。

需要注意的是,对于一个互斥信号量的获取和释放应该成对出现,即当前任务在获取互斥信号量后,应该在不再需要共享资源时及时释
放锁,以避免死锁等问题。

除了ucosii中提供的互斥信号量,还可以通过使用其他同步机制
如信号量、事件标志等来实现资源的同步和互斥访问。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

μC/OS-Ⅱ下的九个C语言文件功能函数一、OS_CORE.C(1)void OSInit (void)(2)void OSIntEnter (void)(3)void OSIntExit (void)(4)void OSSchedLock (void) // 给调度器上锁(5)void OSSchedUnlock (void) // 给调度器解锁,成对使用(6)void OSStart (void) //动多任务过程,在启动之前必须调用OSInit(),并已建立一个任务。

其中OSStartHighRdy()必须调用OSTaskSwHook(),并令OSRunning = TRUE.*/(7)void OSStatInit (void) // 确定CPU 使用率(8)void OSTimeTick (void) //钟节拍服务函数,在每个时钟节拍了解每个任务的延时情况,使其中已经到了延时时限的非挂起任务进入就绪状态*/(9)INT16U OSVersion (void) // 返回uc/os的版本号*100(10)void OS_Dummy (void) // 不做任何事情,被OSTaskDel() 调用(11)INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)/*使一个正在等待的任务进入就绪状态,在调用函数OS***Post发送一个事件时被调用*/(12)void OS_EventTaskWait (OS_EVENT *pevent)/*因为一个事件未发生而挂起一个任务时被调用*/(13)void OS_EventTO (OS_EVENT *pevent)/*使一个等待超时的任务进入就绪状态*/(14)void OS_EventWaitListInit (OS_EVENT *pevent)/*把OSEventGrp及任务等待表中的每一位清零,即令ECB中不含任务等待,被OS***Create()调用*/(15)void OS_Sched (void) // 实现任务级的调度(16)void OS_TaskIdle (void *pdata) /*空闲任务,为使CPU 在没有用户任务时有事可做*/(17)void OS_TaskStat (void *pdata) /*统计任务,每秒计算一次CPU在单位时间内的使用时间,并将计算结果以百分数的形式存放在OSCPUUsage 中,以便应用程序访问它来了解cpu利用率*/(18)INT8U OS_TCBInit (INT8U prio, // 任务的优先级别,存于OSTCBPrioOS_STK *ptos, // 任务堆栈顶指针,存于OSTCBStkPtrOS_STK *pbos, // 任务堆栈栈底指针,存于OSTCBStkBottomINT16U id, // 任务的标识符,存于OSTCBIDINT32U stk_size, // 任务堆栈长度,存于OSTCBStkSizevoid *pext, // 任务控制块的扩展指针,存于OSTCBExtPtrINT16U opt) // 任务控制块的选择项,存于OSTCBOpt// 为用户程序分配任务控制块及对其进行初始化备注:INT8U const OSUnMapTbl[ ] 是uc/os为提高查找速度而定义的一个数组二、OS_FLAG.C(1)OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, // 信号量初始值INT8U *err) // 错误信息// 信号量集的创建函数(2)void OS_FlagInit (void)/*initialize the event flag module,是uc/os内部函数,应用程序不得调用该函数*/(3)OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, //所要删除信号量集指针INT8U opt, // 选择项INT8U *err) // 删除信号量集(4)OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, //所要请求的信号量集的指针OS_FLAGS flags, // 滤波器INT8U wait_type, // 等待类型INT16U timeout, // 延时时限INT8U *err) // 错误信息// 请求信号量集(5)OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, //所请求的信号量集指针OS_FLAGS flags, // 请求的信号INT8U wait_type, // 逻辑运算类型INT8U *err) // 错误信息// 无等待的请求一个信号量集(6)OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp,OS_FLAGS flags, // 所要选择发送的信号INT8U opt, // 信号有效的选项INT8U *err)// 向信号量集发送信号(7)OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, //待查询的信号量集的指针INT8U *err)/*查询信号量的状态,返回被查询信号量集标志组的成员OSFlagFlags*/(8)static void OS_FlagBlock (OS_FLAG_GRP *pgrp, // 信号量集指针OS_FLAG_NODE *pnode, // 待添加的等待任务节点指针OS_FLAGS flags, // 指定等待信号的数据INT8U wait_type, // 信号与等待之间的逻辑INT16U timeout) // 等待时限/*添加节点,在请求信号量集函数OSFlagPend() 中被调用*/(9)static BOOLEAN OS_FlagTaskRdy (OS_FLAG_NODE *pnode,OS_FLAGS flags_rdy)/*期望的事件标志为已经置位,从而使一个任务准备运行*/(10)void OS_FlagUnlink (OS_FLAG_NODE *pnode)/ *删除节点,在OSFlagPost() 中被调用*/三、OS_MBOX.C(1)void *OSMboxAccept (OS_EVENT *pevent) // 无等待的请求消息邮箱(2)OS_EVENT *OSMboxCreate (void *msg) // 创建一个消息邮箱(3)OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err)/*删除消息邮箱*/(4)void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)/*请求消息邮箱,查看OSEventPtr是否为NULL*/(5)INT8U OSMboxPost (OS_EVENT *pevent, void *msg)//向消息邮箱发送消息(6)INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)/*以广播形式向事件等待任务表中的所有任务发送消息*/(7)INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)/*状态查询*/四、OS_MEM.C(1)OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err) /*创建动态内存*/ (2)void *OSMemGet (OS_MEM *pmem, INT8U *err) // 请求获得一个内存块(3)INT8U OSMemPut (OS_MEM *pmem, void *pblk) // 释放一个内存块(4)INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)/*查询动态内存的状态*/(5)void OS_MemInit (void) // 初始化动态内存五、OS_MUTEX.C(1)INT8U OSMutexAccept (OS_EVENT *pevent, INT8U *err)/*无等待时间的请求信号量*/(2)OS_EVENT *OSMutexCreate (INT8U prio, INT8U *err)/*创建互斥型信号量*/(3)OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *err)/*删除互斥型信号量*/(4)void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)/*有等待时间的请求信号量*/(5)INT8U OSMutexPost (OS_EVENT *pevent) //发送(释放)互斥型信号量(6)INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *pdata)/*获取互斥型信号量的当前状态*/六、OS_Q.C(1)void *OSQAccept (OS_EVENT *pevent) // 无等待的请求一个消息队列(2)OS_EVENT *OSQCreate (void **start, INT16U size) //创建一个消息队列(3)OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *err)/*删除消息队列*/(4)INT8U OSQFlush (OS_EVENT *pevent) // 清空消息队列(5)void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)/*有等待的请求一个消息队列*/(6)INT8U OSQPost (OS_EVENT *pevent, void *msg)/*以“先进先出”的方式向消息队列发送消息*/(7)INT8U OSQPostFront (OS_EVENT *pevent, void *msg)/*以“后进先出”的方式向消息队列发送消息*/(8)INT8U OSQPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)/*以“广播”方式向消息队列发送消息*/(9)INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)/*获取消息队列的当前状态*/(10)void OS_QInit (void) // 消息队列初始化七、OS_SEM.C(1)INT16U OSSemAccept (OS_EVENT *pevent) // 无等待的请求信号量(2)OS_EVENT *OSSemCreate (INT16U cnt) // 创建信号量(3)OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *err)/*删除信号量*/(4)void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)/*有等待的请求信号量*/(5)INT8U OSSemPost (OS_EVENT *pevent) // 发送(释放)信号量(6)INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)/*获取信号量的当前状态*/八、OS_TASK.C(1)INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)/*任务优先级别的改变*/(2)INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos,INT8U prio) /*任务的创建*/(3)INT8U OSTaskCreateExt (void (*task)(void *pd), // 指向任务的指针void *pdata, // 传递给任务的参数OS_STK *ptos, // 指向任务堆栈栈顶的指针INT8U prio, // 创建任务的优先级INT16U id, // 任务的标识OS_STK *pbos, // 任务堆栈栈底的指针INT32U stk_size, // 任务堆栈的长度void *pext, // 指向附加数据域的指针INT16U opt) // 用于设定操作的选项/*任务的另一种创建函数,更加灵活,但也增加了额外的开销*/(4)INT8U OSTaskDel (INT8U prio) // 任务的删除(5)INT8U OSTaskDelReq (INT8U prio) // 请求删除任务函数(6)INT8U OSTaskResume (INT8U prio) // 任务的恢复(7)INT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)/*校核空余内存的数量*/(8)INT8U OSTaskSuspend (INT8U prio)/*任务的挂起,可用来挂起自身或除空闲任务之外的任何任务*/(9)INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata) // 任务的查询九、OS_TIME.C(1)void OSTimeDly (INT16U ticks) // 以时钟节拍数为单位延时(2)INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli) /*用时、分、秒、毫秒为单位延时*/ (3)INT8U OSTimeDlyResume (INT8U prio)/*取消延时,若任务比正在运行的任务级别高,则立即引发一次调度*/(4)INT32U OSTimeGet (void) // 获取OSTime 值(5)void OSTimeSet (INT32U ticks) // 设置OSTime 值注:INT32U OSTime ,全局变量,用以记录系统发生的时钟节拍。

相关文档
最新文档