OSSemQuery()

名称: OSSemQuery()
所属文件: Os_sem.c
原型: uint8 OSSemQuery(uint8 index)

功能描述: OSSemQuery() 函数获取某个信号量的值

编译开关: EN_OS_SEM_QUERY
调用者:用户任务
参数: index: 信号量索引
返回值:信号量的值
调用模块: OS_ENTER_CRITICAL, OS_EXIT_CRITICAL

注意:先建立信号量再使用。


void Task(void)
{
        while
1
        {
                if(OSSemQuery(0)>0)
                {
                 /*
有信号量时处理信号量 */
                }
                else
                {
                 /*
没有信号量时进行其它处理 */
                }
        }
}

 

OSSendSignal()

名称: OSSendSignal()
所属文件: Os_core.c
原型: void OSSendSignal(unit8 TaskId)
功能描述: OSSendSignal() 无条件使指定任务就绪。如果指定任务的优先级比当前任务的优先级高,则高优先级的任务得以执行。
编译开关:无
调用者:用户任务
参数: TaskId: 任务 ID
返回值:无         
调用模块: OSSched

示例:

void Task(void)
{
while(1)
{
        ShowChar = OSRunningTaskID()+'0';
        OSSendSignal(0);
        OSWait(K_TMO,1);
}
}        

 

OSStart()

名称:OSStart()
所属文件:Os_cpu.c
原型:void OSStart(void)

功能描述:OSStart()启动small RTOS的多任务环境

编译开关:无
调用者:只能是初始代码
参数:无
返回值:无        
调用模块:LoadCtx

注意:在用户程序中只能调用一次,第二次调用则有可能使系统崩溃。在调用OSStart()之前,不能使能全局中断标志,在调用后,自动使能全局中断标志

 

OSTimeTick()

名称: OSTimeTick()
所属文件: Os_cpu.c
原型: void OSTimeTick(void)
功能描述:每次系统节拍, small RTOS 都执行 OSTimeTick() 函数。 OSTimeTick() 检查处于延时状态的任务是否到达延时时间,或者是正在等待的任务是否 9 超时。

编译开关:无
调用者:时钟中断或用户任务
参数:无
返回值:无         
调用模块:无
注意:在任务或中断都可以调用 OSTimeTick(), 若在任务中调用,则任务的优先级应该很高(任务 ID 值很小),这是因为 OSTimeTick() 负责所有任务的延时操作。

示例:

#if EN_OS_INT_ENTER >0
#pragma disable /*
除非最高优先级中断,否则必须加上这一句 */
#endif

void OSTickISR(void) interrupt OS_TIME_ISR
{
#if TICK_TIMER_SHARING>1
        static uint8 TickSum="0";
        
        TickSum = (TickSum +1)% TICK_TIMER_SHARING
        if(TickSum!=0) return;
#endif

#if EN_OS_INT_ENTER>0
        OS_INT_ENTER(); //
中断开始处理
#endif

#if USER_TICK_TIMER_EN == 1
        UserTickTimer();  //
用户函数
#endif

#if EN_TIMER_SHARING >0
        OSTimeTick(); //
调用系统时钟处理函数
#else
        OSIntSendSignal(TIME_ISR_TASK_ID);
#endif
        OSIntExit();//
中断处理结束
}

 

OSTaskDel()

名称: OSTaskDel()
所属文件: Os_Core.c
原型: uint8 OSTaskDel(uint8 TaskID) small
功能描述:删除任务

例:

void TaskB(void)
{
    uint8 i;
    for (i = 0; i < 10; i++)
    {
        PC_DispChar(20, 10, (i % 10) + '0', DISP_FGND_LIGHT_GRAY);
        OSWait(K_TMO, 15);
    }
    OSTaskDel(OSRunningTaskID());
}



void TaskD(void)
{
    uint8 i;

    for (i = 0; i < 30; i++)
    {
        PC_DispChar(20, 5, (i % 10) + '0', DISP_FGND_LIGHT_GRAY);
        OSWait(K_TMO, 20);
    }
    OSTaskDel(0);
}

 

OSTaskSpend()


函数名称 : OS_TaskSuspend
功能描述 : 使指定任务休眠,但不进行任务切换
输 入 : TaskID : 任务 ID

原型: void OS_TaskSuspend(uint8 TaskID)    small;

例:
OS_TaskSuspend(OSRunningTaskID());   /*
任务进入等待状态 */

 

OSVersion()

名称: OSVersion()
所属文件: Os.h
原型:宏
功能描述:取得当前 RTOS 的版本号
编译开关:无
调用者:用户任务、内核函数
参数:无
返回值: SMALL RTOS 的版本号为 *100, 如果当前版本号为 1.21, 则返回 121
调用模块:无

 

OSWait()

名称: OSWait()
所属文件: Os.c
原型: uint8 OSWait(uint8 typ,uint8 ticks)

功能描述: OSWait() 函数使当前任务睡眠,它可以由以下方式恢复执行:指定 typ 为等待超时,在一个时间间隔后被唤醒;指定 typ 为等待信号,另一个任务或中断可以把它唤醒(通过 OSSendSignal() OSIntSendSignal 或是它们的组合),若其中任意一个事件出现,则任务恢复执行。

编译开关:无
调用者:用户任务、内核函数
参数: typ: 等待事件类型。
        K_SIG:
等待信号;
        K_TMO:
等待超时,
        
或者是其中任意值的按位
返回值: NOT_OK: 参数错误
        TMO_EVENT:
超时到
        SIG_EVENT:
有信号
调用模块: OSIntSendSignal, OSSched.

示例:

void TaskB(void)
{
while(1)
{
        ShowChar = OSRunningTaskID+'0';
        OSSendSignal(0);
        OSWait(K_TMO,1);
}
}

 

OS_ENTER_CRITICAL()

#define OS_ENTER_CRITICAL()                 EA=0,Os_Enter_Sum++

关闭受 smallrtos 管理的中断,然后将变量 Os_Enter_Sum 加一。关中断是为了保护临界区代码。

 

OS_EXIT_CRITICAL()

#define OS_EXIT_CRITICAL()                 if(--Os_Enter_Sum==0 EA=1

打开受 smallrtos 管理的中断,然后将变量 Os_Enter_Sum 减一。关中断是为了保护临界区代码。