鸿蒙设备开发3

qq62d3dbf25fd3e
发布于 2022-7-23 17:40
浏览
0收藏

任务管理

任务相关概念

任务状态

任务状态通常分为以下四种:
就绪(Ready) :该任务在就绪列表中,只等待CPU。
运行(Running) :该任务正在执行。
阻塞(Blocked) :该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等。
退出态(Dead) :该任务运行结束,等待系统回收资源。
任务ID:在任务创建时通过参数返回给用户,作为任务的一个非常重要的标识。
任务优先级:优先级表示任务执行的优先顺序。
任务入口函数:每个新任务得到调度后将执行的函数。
任务控制块TCB:每一个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer) 、任务状态、任务优先级、任务ID、 任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。
任务栈:每-个任务都拥有一个独立的栈空间,我们称为任务栈。
任务上下文:任务在运行过程中使用到的一-些资源,如寄存器等,我们称为任务上下文。LiteOS在任务挂起的时候会将本任务的任务上下文信息,保存在自己的任务栈里面,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行被挂起时被打断的代码。
任务切换:任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。

实现任务管理

创建任务: osThreadNew(os ThreadFunc_ t func,void * argument,const oS ThreadAttr. t * attr)
删除某个任务: osThreadTerminate(os’ Threadld
t thread id);
任务挂起: osThreadSuspend(osThreadld t thread
id)
任务恢复: osThreadResume (osThreadld t thread_ id)

软件定时器

创建定时器: os TimerNew (osTimerFunc t func, os TimerType t type, void *argument, const os TimerAttr_ t *attr);
启动定时器: os TimerStart (osTimerld_ t timer_ id, uint32_ t ticks);
停止定时器: os TimerStop (osTimerld
t timer_ id);
删除定时器: osTimerDelete (os’ Timerld
t timer_ id);

信号量

创建互斥锁: osSemaphoreNew (uint32_ t max_ count, uint32 t initial count, const osSemaphoreAttr t *attr);
获取互斥锁: osSemaphoreAcquire (osSemaphoreld
t semaphore_ id, uint32_ t timeout);
释放互斥锁: osSemaphoreRelease (osSemaphoreld t semaphore id);
删除互斥锁: osMutexDelete (osMutexld
t mutex id);

事件管理

创建事件标记对象: osEventFlagsNew (const osEventFlagsAttr_ t *attr);
设置事件标记: osEventFlagsSet (osEventFlagsld. t ef id, uint32 t flags);
等待事件标记触发: osEventFlagsWait (osEventFlagsld. t ef. id, uint32 t flags, uint32_ t options, uint32_ t timeout);
删除事件标记对象: osEventFlagsDelete (osEventFlagsld
_tef id);

互斥锁

创建互斥锁: osMutexNew (const osMutexAttr_ t *attr);
获取互斥锁: osMutexAcquire (osMutexld_ t mutex id, uint32_ t timeout);
释放互斥锁: osMutexRelease (osMutexld_ t mutex_ id);
删除互斥锁: osMutexDelete (osMutexld_ t mutex_ id);

消息队列

创建消息队列: osMutexNew (const osMutexAttr t *attr);
发送消息: osMutexAcquire (osMutexld
t mutex_ id, uint32_ t timeout);
获取消息: osMutexRelease (osMutexld t mutex id);
删除消息队列: osMutexDelete (osMutexld
t mutex id);

标签
已于2022-7-23 17:40:58修改
收藏
回复
举报
回复
    相关推荐