LiteOS 任务管理,软件定时器管理,内存管理

一  任务管理常用接口

 创建任务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);
 获取当前任务的IDUINT32 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);
获取即将被调度的任务的IDUINT32 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);//释放内存

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值