📄 manual.txt
字号:
OS_Q_OK:成功
全局变量: 无
调用模块: 无
(7)OSQPend()
原型:uint8 OSQPend(uint8 idata *Ret, uint8 OS_Q_MEM_SEL *Buf, uint8 Tick);
功能描述: 等待消息队列中的消息
输 入: Ret:返回的消息
Buf:指向队列的指针
Tick:等待时间
输 出: NOT_OK:参数错误
OS_Q_OK:收到消息
OS_Q_TMO:超时到
OS_Q_NOT_OK:无消息
全局变量: 无
调用模块: OSRunningTaskID,OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(8)OSQAccept()
原型:uint8 uint8 OSQAccept(uint8 idata *Ret, uint8 OS_Q_MEM_SEL *Buf);
功能描述: 无等待从消息队列中取得消息
输 入: Ret:返回的消息
Buf:指向队列的指针
输 出: NOT_OK:参数错误
OS_Q_OK:收到消息
OS_Q_TMO:超时到
OS_Q_NOT_OK:无消息
全局变量: 无
调用模块: OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(8)OSQIntPost()
原型:uint8 OSQIntPost(uint8 OS_Q_MEM_SEL *Buf, uint8 Data);
功能描述: 中断中FIFO方式发送消息
输 入: Buf:指向队列的指针
Data:消息数据
输 出: OS_Q_FULL:队列满
OS_Q_OK:发送成功
全局变量: 无
调用模块: OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(9)OSQIntPostFront()
原型:uint8 OSQIntPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data);
功能描述: 中断中LIFO方式发送消息
输 入: Buf:指向队列的指针
Data:消息数据
输 出: OS_Q_FULL:队列满
OS_Q_OK:发送成功
全局变量: 无
调用模块: OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(10)OSQPost()
原型:uint8 OSQPost(uint8 OS_Q_MEM_SEL *Buf, uint8 Data);
功能描述: FIFO方式发送消息
输 入: Buf:指向队列的指针
Data:消息数据
输 出: OS_Q_FULL:队列满
OS_Q_OK:发送成功
全局变量: 无
调用模块: OSQIntPost,OSSched
(11)OSQPostFront()
原型:uint8 OSQPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data);
功能描述: LIFO方式发送消息
输 入: Buf:指向队列的指针
Data:消息数据
输 出: OS_Q_FULL:队列满
OS_Q_OK:发送成功
全局变量: 无
调用模块: OSQIntPostFront,OSSched
(12)OSQNMsgs()
原型:uint8 OSQNMsgs(uint8 OS_Q_MEM_SEL *Buf);
功能描述: 取得消息队列中消息数
输 入: Buf:指向队列的指针
输 出: 消息数
全局变量: 无
调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(13)OSQSize()
原型:uint8 OSQSize(uint8 OS_Q_MEM_SEL *Buf);
功能描述: 取得消息队列总容量
输 入: Buf:指向队列的指针
输 出: 消息队列总容量
全局变量: 无
调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(14)OSQFlush()
原型:void OSQFlush (uint8 OS_Q_MEM_SEL *Buf);
功能描述: 清空队列
输 入: Buf:指向队列的指针
输 出: 无
全局变量: 无
调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(15)OSSemCreate()
原型:uint8 OSSemCreate(uint8 index,uint8 Data);
功能描述: 初始化消息队列
输 入: index:信号量索引
data:信号量初始值
输 出: NOT_OK:没有这个信号量
OS_SEM_OK:成功
全局变量: 无
调用模块: 无
(16)OSSemPend()
原型:uint8 OSSemPend(uint8 index, uint8 Tick);
功能描述: 等待一个信号量
输 入: index:信号量索引
Tick:等待时间
输 出: NOT_OK:参数错误
OS_SEM_OK:得到信号量
OS_SEM_TMO:超时到
OS_SEM_NOT_OK:没有得到信号量
全局变量: 无
调用模块: OSRunningTaskID,OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(17)OSSemAccept()
原型:uint8 OSSemAccept(uint8 index);
功能描述: 无等待请求信号量
输 入: index:信号量索引
输 出: NOT_OK:参数错误
OS_SEM_OK:得到信号量
OS_SEM_TMO:超时到
OS_SEM_NOT_OK:没有得到信号量
全局变量: 无
调用模块: OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(18)OSSemIntPost()
原型:uint8 OSSemIntPost(uint8 index);
功能描述: 中断中发送一个信号量
输 入: index:信号量索引
输 出: NOT_OK:参数错误
OS_SEM_OK:发送成功
全局变量: 无
调用模块: OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
(19)OSSemPost()
原型:uint8 OSSemPost(uint8 index);
功能描述: 发送一个信号量
输 入: index:信号量索引
输 出: NOT_OK:参数错误
OS_SEM_OK:发送成功
全局变量: 无
调用模块: OSSemIntPost,OSSched
(20)OSSemQuery()
原型:uint8 OSSemQuery(uint8 index);
功能描述: 查询信号量
输 入: index:信号量索引
输 出: 信号量的值
全局变量: 无
调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
Small RTOS的数据结构:
(1)OSTaskRuning
定义:
#if OS_MAX_TASKS < 9
uint8 OSTaskRuning = 0xff;
#else
uint16 OSTaskRuning = 0xffff;
#endif
OSTaskRuning存储着每一个任务状态(就绪/运行还是休眠),每一个
任务存储一位,1代表就绪/运行,0代表休眠。OSTaskRuning的最低位
存储ID为0的任务状态,次低位存储ID为0的任务状态。以此类推。
(2)OSWaitTick
定义:
uint8 OSWaitTick[OS_MAX_TASKS];
OSWaitTick存储各个任务剩余等待系统节拍数。
(3)OSIntNesting
定义:
#if EN_OS_INT_ENTER > 0
uint8 OSIntNesting;
#endif
OSIntNesting存储中断嵌套层数。
(4)OSTaskID
定义:
uint8 OSTaskID;
OSTaskID存储当前运行任务的ID。
(5)OSNextTaskID
定义:
uint8 OSNextTaskID;
OSNextTaskID用于标明将要运行的任务的ID
(6)Os_Enter_Sum
定义:
uint8 Os_Enter_Sum=0;
Os_Enter_Sum是OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()使用的
信号量。
(7)消息队列数据结构
定义(用户程序中):
uint8 OS_Q_MEM_SEL SerialData[n];
任务数小于9个时:
Buf[0]:队列中字节数,
Buf[1]:Buf总长度
Buf[2]:出对端,
Buf[3]:等待队列任务列表
Buf[4]~Buf[n-1]:存储消息
任务数大于8个时:
Buf[0]:队列中字节数,
Buf[1]:Buf总长度
Buf[2]:出对端,
Buf[3]、Buf[4]:等待队列任务列表
Buf[5]~Buf[n-1]:存储消息
(8)信号量数据结构
定义:
#if OS_MAX_TASKS < 9
uint8 OS_SEM_MEM_SEL OsSemBuf[OS_MAX_SEMS*2];
#else
uint8 OS_SEM_MEM_SEL OsSemBuf[OS_MAX_SEMS*3];
#endif
任务数小于9个时(index为0~(OS_MAX_SEMS-1)):
OsSemBuf[index * 2]:信号量的值
OsSemBuf[index * 2 + 1]:等待信号量的任务列表
任务数小于9个时(index为0~(OS_MAX_SEMS-1)):
OsSemBuf[index * 3]:信号量的值
OsSemBuf[index * 3 + 1]、OsSemBuf[index * 3 + 2]:等待信号量
的任务列表
Small RTOS 51的特殊的数据结构:
(1)OSFastSwap
定义:
#if OS_MAX_TASKS < 9
unsigned char data OSFastSwap=0xff;
#else
unsigned int data OSFastSwap=0xffff;
#endif
OSFastSwap存储着每一个任务如何被切换(自己调用OSSchedt还是中断
程序激活更高级任务),每一个任务存储一位,1代表因为自己调用
OSSched而被切换,0代表因为中断程序激活更高级任务而被切换。最低
位存储ID为0的任务状态,次低位存储ID为0的任务状态。以此类推。
如果任务因为自己调用OSSched而被切换,则需要存储的任务环境所需内
部RAM少的多。
(2)OSTsakStackBotton
定义:
unsigned char idata * OSTsakStackBotton[OS_MAX_TASKS+2];/* 任务堆栈底部位置 */
OSTsakStackBotton存储各个任务的栈底和栈顶位置。因为后一个任务
的栈底是前一个任务的栈顶,因此其个数为OS_MAX_TASKS+2(任务数量
为OS_MAX_TASKS+1,其中有一个隐含任务)。考虑到第一个任务的栈底
和最后一个任务的栈顶的值在运行时实际不会改变,OSTsakStackBotton
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -