System部分的API接口和RTOS常用的API接口类似。
BC26 OpenCPU SDK:https://github.com/sanjaywu/BC26-OpenCpu
1、重启系统
void Ql_Reset(u8 resetType);
2、挂起当前任务直到时间超时
void Ql_Sleep(u32 msec);
入口参数:
msec:任务挂起的时间,单位:ms。
注意事项:任务挂起时间不能太长,否则任务会接收到很多消息而无法处理,导致系统自动重启。
3、获取SDK版本
s32 Ql_GetSDKVer(u8* ptrVer, u32 len);
入口参数:
ptrVer:保存SDK版本信息缓存区,要求至少20字节大小。
len:缓存区长度。
返回参数:
获取成功:返回SDK版本信息长度。
获取失败:则返回错误码。
4、从当前消息队列获取消息,如果当前消息队列没有消息,则会处于等待状态
s32 Ql_OS_GetMessage(ST_MSG* msg);
入口参数:
ST_MSG:ST_MSG指针:
typedef struct {
u32 message;
u32 param1;
u32 param2;
u32 srcTaskId;
} ST_MSG;
5、在ISR中发送消息到其它任务(psm-eint回调除外)
s32 Ql_OS_SendMessageFromISR(s32 destTaskId, u32 msgId, u32 param1, u32 param2);
入口参数:
destTaskId: 发送消息到目的地任务的ID。
msgId: 消息ID,必须大于0xFF。
param1、param2: 发送给其它任务的参数
返回参数:
OS_SUCCESS:发送成功。
OS_INVALID_ID:ID无效。
OS_MEMORY_NOT_VALID:内存不足。
OS_Q_FULL:消息队列已满。
6、在任务间发送消息。
s32 Ql_OS_SendMessage(s32 destTaskId, u32 msgId, u32 param1, u32 param2);
入口参数:
destTaskId: 发送消息到目的地任务的ID。
msgId: 消息ID,必须大于0xFF.
param1、param2: 发送给其它任务的参数
返回参数:
OS_SUCCESS:发送成功。
OS_INVALID_ID:ID无效。
OS_MEMORY_NOT_VALID:内存不足。
OS_Q_FULL:消息队列已满。
7、创建互斥量
u32 Ql_OS_CreateMutex(void);
返回参数:
创建成功:互斥量句柄,Mutex Id。
创建失败:0。
8、获取互斥量
void Ql_OS_TakeMutex(u32 mutexId,u32 block_time);
入口参数:
mutexId:互斥量句柄。
block_time:阻塞等待互斥量时间,单位:ms。
9、释放互斥量
void Ql_OS_GiveMutex(u32 mutexId);
入口参数:
mutexId:互斥量句柄。
10、创建计数型信号量
u32 Ql_OS_CreateSemaphore(u32 maxCount,u32 InitialCount);
入口参数:
maxCount:可以达到的最大计数值。当信号量达到这个值时,就不能再“给定”。
InitialCount:创建时分配的信号量值。
返回参数:
创建成功:信号量句柄。
创建失败:0。
11、获取计数型信号量
u32 Ql_OS_TakeSemaphore(u32 semId, u32 block_time);
入口参数:
semId:要获取的信号量句柄。
block_time:阻塞等待信号量时间,单位:ms。
返回参数:
TRUE:在等待时间内获取信号量成功。
FALSE:在等待时间内获取信号量失败。
12、释放计数型信号量
void Ql_OS_GiveSemaphore(u32 semId);
入口参数:
semId:要释放的信号量句柄。
13、创建事件集,一个事件集有多个事件标志组成,每个事件集能包含10个事件标志
u32 Ql_OS_CreateEvent(void);
返回参数:
返回一个独一无二的事件集句柄。
14、等待事件
s32 Ql_OS_WaitEvent(u32 evtId, u32 evtFlag,u32 block_time);
入口参数:
evtId:要等待的事件集句柄。
evtFlag:获取到的事件标志值。
block_time:等待阻塞时间。
返回参数:
获取事件成功:返回0。
获取事件失败:返回一个非0值。
15、发送事件标志
s32 Ql_OS_SetEvent(u32 evtId, u32 evtFlag);
入口参数:
evtId:要发送的事件集句柄。
evtFlag:要发送的事件标志值。
返回参数:
发送事件成功:返回0。
发送事件失败:返回一个非0值。
16、设置错误码
s32 Ql_SetLastErrorCode(s32 errCode);
入口参数:
errCode:要设置的错误码。
返回参数:
QL_RET_OK:执行成功。
QL_RET_ERR_FATAL:设置错误码失败。
17、获取错误码
s32 Ql_GetLastErrorCode(void);
18、获取当前任务优先级
u32 Ql_OS_GetCurrentTaskPriority(void);
19、获取当前任务堆栈中剩余的字节数
u32 Ql_OS_GetCurrenTaskLeftStackSize(void);
20、将数据保存到NVRAM里面,掉电不丢失
s32 Ql_SecureData_Store(u8 index , u8* pData, u32 len);
入口参数:
index:NVRAM块索引,1或2。
pData:要保存的数据,最多只能保存50字节。
len:要保存的数据大小。
返回参数:
QL_RET_OK: 保存成功。
QL_RET_ERR_PARAM: 保存失败,参数无效。
21、从NVRAM里面读取数据
s32 Ql_SecureData_Read(u8 index, u8* pBuffer, u32 len);
入口参数:
index:要读取的NVRAM块索引,1或2。
pBuffer:保存读取到数据指针。
len:读取到的数据大小,最大50字节。
返回参数:
QL_RET_OK: 读取成功。
QL_RET_ERR_PARAM: 读取失败,参数无效。
注意事项:OpenCPU设计了2块系统存储空间来备份关键用户数据。开发者可以指定第一个参数索引[1-2]来指定不同的存储块,每个存储块可以存储50字节的数据。