关键词不能为空

当前您在: 主页 > 英语 >

UCOSIII 常用函数

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:45
tags:

-

2021年2月1日发(作者:沙鼠)


UCOSIII



任务堆栈:存储任务中的调 用的函数、局部变量、中断


服务程序和


CPU

< br>寄存器的值。



全局变量的保护:



1.


如果只在一个任务中写


(或只有一个数据)



而在其他


任务中只是读取,则可以不用互斥型信号量,最多会造


成读取的数据未被完全写完。



2.


如果全局变量在多个任务中写,


则需要用互斥型信号量

< br>保护,这样当有任务申请到互斥型信号量(保护不可重


入的程序段)写数据时,其 他任务的同一个互斥型信号


量必须等待上一个任务的释放才可进行写。

< br>


3.


如果全局变量在中断中写,


则在其他任务中的全局变量


的写操作要用临界段(禁止中断和禁止调度


:


保护不可被


分割的程序段)保护。(因为如果不关中 断相当于中断


的优先级最高,而且不能被像其他任务那样挂起。)







OS_CFG_ISR_POST_DEFERRED_EN



1


临界段使用锁


UCOSIII



调度器方式;为


0

< br>临界段使用禁中断方式



CPU_SR_ALLOC() ;


OS_CRITICAL_ENTER();OS_CRITICAL_EXIT();


OS_CRITICAL_EXIT_NO_SCHED();


OSSchedLockNestingCtr


记录调度器被锁的次数)。

< p>



检测任务堆栈的使用情况:



OS_C FG_STAT_TASK_STK_CHK_EN


使能



OS_ERRerr;


CPU_STK_SIZE stk_free;


CPU_STK_SIZE stk_used;

< p>
OSTaskStkChk(&TaskBStkTCB,&stk_free,&stk_use d,&e


rr);


中断中使用


OSI ntEnter();




OSInt Exit();


是为了退出中


断后执行中断调度操作,如果中断 中并未用到


OSSemPost();


等系统函数,则退出中断 服务程序后不需


要进行任务调度,就可以不在中断服务程序中使用


OSIntEnter();



OSIntExit();




UCOSIII



(有时候用:


CPU_CRITIC AL_ENTER();OSIntNestingCtr++;


CPU_CRITI CAL_EXIT();


替代


OSIntEnter();


















一、



变量类型




UCOSIII




cpu.h


中是有关


cpu


变 量的重新定义,


还包括


CPU_STK



CPU


堆栈类型),




CPU_STK_SIZE


CPU


堆栈类型的大小)的定义,


CPU_SR

< p>


CPU


状态寄存



器的定义)。



os.h


中是有关


os


类型的定义 如


OS_TCB



任务控制块)



OS_SEM


(信号量)、


OS_MUTEX


(互斥型信号量)、


OS_MSG< /p>


(消息)、


OS_Q


(消息队列)、


OS_ERR


(系


统错误)等。

< p>



cpu_core.h


中是有关


cpu


的定义,如


CPU_ ERR



CPU_TS



CPU_TS_TMR





CPU_STK



typedef unsigned int


堆栈的类型定义



OS_TCB



struct os_tcb


任务控制块的类型定义



OS_ERR



enumos_err


错误信息定义



CPU_TS



typedef unsigned int


时间戳变量



CPU_TS_TMR



typedef unsigned int


定时器变量



二、



全局变量




UCOSIII




OS_CFG_STAT_TASK_EN


使能且调用了



OSStatTaskCPUUsageInit(&err);

< br>则开启了统计任务



的功能:可以统计

< br>CPU


使用率等。)




OSStatTaskCPUUsage



C PU


的使用率



0



10000= 0.00-100.00%





OSStatTaskCPUUsageMax


< br>CPU


的使用率最大值



0



10000= 0.00-100.00%





OSTaskCtxSwCtr



任务切换 次数的记录变量




OSStatTa skCtr



已经建立了的任务数







三、常用函数



一、


OS_CORE.C



UCOSIII




1



void OSInit()




//


系统初始化



< br>2



void OSIntEnter()




//


发生了一次中断(中断


嵌套的逐层进入)


< br>(


3



void OSIntExit()



//


退出了一次中断(中断嵌


套的逐层退出)


< p>


4



void OSSched()




//


系统进行调度




5



void OSSchedLock()


//


给调度器上锁


< p>


6



void OSSchedUnlock()


//


给调度器解锁,成对使





7



void OSStart()




//


启动多任务过程,在启动


之前必须调用

OSInit()


,并已建立一个任务。其中


OSStar tHighRdy()


必须调用


OSTaskSwHook()



并令


OSRunning = TRUE.



8


< br>void OS_Pend()




//


挂起任务



9



void OS_Post()




//


解挂任务



10



void OS_PendAbort()


//


取消挂起任务




11



INT16UOSV ersion ()


//


返回


u c/os


的版本号


*10000


(< /p>


12



void OS_IdleTaskInit() //


空闲任务初始化



UCOSIII




13



void OS_IdleTask()


//


空闲任务


















二、


OS_TASK.C


< p>


1



void OSTaskCreate(OS_TCB


*p_tcb,//


任务控制




UCOSIII








CPU_CHAR



*p_name,//


任务名









OS_TASK_PTR p_task,//


任务函数指针









void






*p_arg,//


任务函数参数








OS_PRIO




prio,//


任务优先级









CPU_STK



*p_stk_base,//


堆栈指针









CPU_STK_SIZE


stk_limit,//< /p>


任务的堆栈


剩余警戒线









CPU_STK_SIZE


stk_size,//< /p>


任务的空间


大小









OS_MSG_QTY



q_size, //


能接收的信


息队列最大值








OS_TICK


time_quanta,//


时间片轮转时间









void


*p_ext, //


任务控制块的扩展信息









OS_OPT


opt, //


任务的选项









OS_ERR


*p_err) //


任务的错误信息




2



void OSTaskChangePrio()




//


任务优先级别


的改变


< p>


3



void OSTaskDel()








//


任务的删除



4



void OSTaskSuspend()





//


任务的暂停



UCOSIII




5



void OSTaskResume()





//


任务的恢复



< br>6



void OSTaskStkChk()






//


校核空余内存


的数量


< p>


7



OS_MSG_Q TY OSTaskQFlush()



//


清空任务级消


息队列中的消息




8



void *OSTaskQPend()



//


挂起任务级消息队列




9



CPU_BOOLEAN OSTaskQ PendAbort()//


取消任务级


消息队列的挂起状态< /p>




10



void OSTaskQPost()





//


向任务级消息队


列中发送消息


< /p>



11



OS_ REG OSTaskRegGet()



//


获取任务寄存器


的当前值




12



void OSTaskRegSet()





//


设置任务寄存器

< p>
的当前值




13



OS_SEM_CTR OSTaskSemPend()



//


任务信号

量等待信号




14



CPU_BOOLEAN OSTaskSemPendAbort()/ /


任务信


号量取消挂起状态


-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:45,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595890.html

UCOSIII 常用函数的相关文章