一 任务管理常用接口
创建任务 | UINT32 LOS_TaskCreateOnly(UINT32 *puwTaskID, TSK_INIT_PARAM_S *pstInitParam) |
删除指定的任务 | UINT32 LOS_TaskDelete(UINT32 uwTaskID); |
挂起指定的任务 | UINT32 LOS_TaskSuspend(UINT32 uwTaskID); |
恢复挂起的任务 | UINT32 LOS_TaskResume(UINT32 uwTaskID); |
任务延时等待 | UINT32 LOS_TaskDelay(UINT32 uwTick); |
任务放弃CPU使用权 调用同优先级的下一个任务 | UINT32 LOS_TaskYield(VOID); |
锁任务调度 | VOID LOS_TaskLock(VOID); |
解锁任务调度 | VOID LOS_TaskUnlock(VOID); |
设置当前任务的优先级 | UINT32 LOS_CurTaskPriSet(UINT16 usTaskPrio); |
设置指定任务的优先级 | UINT32 LOS_TaskPriSet(UINT32 uwTaskID, UINT16 usTaskPrio); |
获取指定任务的优先级 | UINT16 LOS_TaskPriGet(UINT32 uwTaskID); |
获取当前任务的ID | UINT32 LOS_CurTaskIDGet(VOID); |
获取指定任务的信息 | UINT32 LOS_TaskInfoGet(UINT32 uwTaskID, TSK_INFO_S *pstTaskInfo); |
获取指定任务的状态 | UINT32 LOS_TaskStatusGet(UINT32 uwTaskID, UINT32* puwTaskStatus); |
获取指定任务的名称 | CHAR* LOS_TaskNameGet(UINT32 uwTaskID); |
监控所有任务,获取所有任务的信息 | UINT32 LOS_TaskInfoMonitor(VOID); |
获取即将被调度的任务的ID | UINT32 LOS_NextTaskIDGet(VOID); |
二 创建并启动一个简单任务
#include "los_base.h"
#include "los_task.h"
UINT32 Start_Task_Handle;//定义任务句柄
UINT32 start_task(VOID)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
LOS_TaskDelay(1000);
}
}
void os_init(void)
{
LOS_KernelInit();//LiteOS初始化
TSK_INIT_PARAM_S task_init_param;
task_init_param.pcName = "start_task";
task_init_param.usTaskPrio = 3;
task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)start_task;
task_init_param.uwStackSize = 128;
LOS_TaskCreate(&Start_Task_Handle, &task_init_param);/* 创建任务 */
LOS_Start();//开启任务调度
}
三 软件定时器常用接口
创建软件定时器 | UINT32 LOS_SwtmrCreate(UINT32 uwInterval, UINT8 ucMode, SWTMR_PROC_FUNC pfnHandler, UINT16 *pusSwTmrID, UINT32 uwArg); |
删除软件定时器 | UINT32 LOS_SwtmrDelete(UINT16 usSwTmrID); |
启动软件定时器 | UINT32 LOS_SwtmrStart(UINT16 usSwTmrID); |
停止软件定时器 | UINT32 LOS_SwtmrStop(UINT16 usSwTmrID); |
获取软件定时器剩余时间 | UINT32 LOS_SwtmrTimeGet(UINT16 usSwTmrID, UINT32 *uwTick); |
四 创建使用软件定时器
UINT16 TimerId;/* 定义定时器句柄(ID ) */
//软件定时器回调函数
static void Timer_Callback(UINT32 arg)
{
UINT32 tick_num1;
tick_num1 = (UINT32)LOS_TickCountGet(); /* 获取滴答定时器的计数值 */
}
void Swt_init(void)
{
LOS_SwtmrCreate(1000, /* 软件定时器的定时时间(ms )*/
LOS_SWTMR_MODE_PERIOD,/* 软件定时器模式 周期模式 */
(SWTMR_PROC_FUNC)Timer_Callback,/* 软件定时器的回调函数 */
&TimerId, /* 软件定时器的 id */
0);
LOS_SwtmrStart(TimerId);//启动软件定时器
}
五 内存管理常用接口
初始化一块指定的动态内存池 | LITE_OS_SEC_TEXT_INIT UINT32 LOS_MemInit(VOID *pPool, UINT32 uwSize) |
申请动态内存 | LITE_OS_SEC_TEXT VOID *LOS_MemAlloc (VOID *pPool, UINT32 uwSize) |
释放动态内存 | LITE_OS_SEC_TEXT UINT32 LOS_MemFree (VOID *pPool, VOID *pMem) |
重新申请内存 | LITE_OS_SEC_TEXT_MINOR VOID *LOS_MemRealloc(VOID *pPool, VOID *pPtr, UINT32 uwSize) |
内存对齐分配 | LITE_OS_SEC_TEXT VOID *LOS_MemAllocAlign(VOID *pPool, UINT32 uwSize, UINT32 uwBoundary) |
获取指定内存池的统计信息 | LITE_OS_SEC_TEXT UINT32 LOS_MemStatisticsGet(VOID *pPool, LOS_MEM_STATUS *pstStatus) |
获取指定内存池的最大可用空闲块 | LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemGetMaxFreeBlkSize(VOID *pPool) |
初始化一个静态内存池,设定其起始地址、总大小及每个块大小 | UINT32 LOS_MemboxInit(VOID *pBoxMem, UINT32 uwBoxSize, UINT32 uwBlkSize); |
清除静态内存内容 | VOID LOS_MemboxClr(VOID *pBoxMem, VOID *pBox); |
申请一块静态内存块 | VOID *LOS_MemboxAlloc(VOID *pBoxMem); |
释放一个静态内存块 | UINT32 LOS_MemboxFree(VOID *pBoxMem, VOID *pBox); |
获取静态内存池的统计信息 | UINT32 LOS_MemboxStatisticsGet(VOID *pBoxMem, UINT32 *puwMaxBlk, UINT32 *puwBlkCnt, UINT32 *puwBlkSize); |
六 使用内存管理接口
1.使用动态内存,在系统初始化的时候已经初始化了一块动态内存池,所以可以直接调用分配函数
- LOS_KernelInit -> osMemSystemInit -> LOS_MemInit((VOID *)OS_SYS_MEM_ADDR, OS_SYS_MEM_SIZE)
- m_aucSysMem0 = OS_SYS_MEM_ADDR;
UINT32 *p_mem = NULL;
p_mem = (UINT32*)LOS_MemAlloc(m_aucSysMem0,20);
if(NULL != p_mem){
printf("内存分配成功");
}
uwRet = LOS_MemFree(m_aucSysMem0,p_mem);
if (LOS_OK == uwRet){
printf("内存释放成功");
}
2.使用静态内存
#define MEM_BOXSIZE 128 //内存池大小
#define MEM_BLKSIZE 16 //内存块大小
static UINT32 BoxMem[MEM_BOXSIZE];
UINT32 *p_Num = NULL; //指向读写内存池地址的指针
/* 初始化内存池 */
uwRet = LOS_MemboxInit(&BoxMem[0], /* 内存池地址 */
MEM_BOXSIZE, /* 内存池大小 */
MEM_BLKSIZE); /* 内存块大小 */
p_Num = (UINT32*)LOS_MemboxAlloc(BoxMem);/* 向已经初始化的内存池申请内存 */
LOS_MemboxClr(BoxMem, p_Num); /* 清除在 p_Num 地址的内容 */
LOS_MemboxFree(BoxMem, p_Num);//释放内存