|
|
@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
# 以下主要是关于kernel/base/core部分代码的阅读
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
根据这个项目的README文件介绍,kernel部分的代码是有关内核实现的。而其中base文件下的内容主要是有关基础内核部分的内容。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 一、 los_bitmap.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基本概念
|
|
|
|
|
|
|
|
位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字状态中的每一bit位(标志位)可以具有自定义的含义。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用场景
|
|
|
|
|
|
|
|
系统提供标志位的置1和清0操作,可以改变标志位的内容,同时还提供状态字中标志位
|
|
|
|
|
|
|
|
为1的最高位和最低位的功能。用户也可以对系统的寄存器进行位操作。
|
|
|
|
|
|
|
|
## 二、 los_process.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基本概念 这段代码主要是用于处理进程的,包括子进程父进程等。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 三、 los_smp.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这段代码主要用于处理代码初始化
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 四、 los_sys.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基本概念
|
|
|
|
|
|
|
|
软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器。当经过设定的Tick数后,会触发用户自定义的回调函数。
|
|
|
|
|
|
|
|
硬件定时器受硬件的限制,数量上不足以满足用户的实际需求。因此为了满足用户需求,提供更多的定时器,
|
|
|
|
|
|
|
|
软件定时器功能,支持如下特性:
|
|
|
|
|
|
|
|
创建软件定时器。
|
|
|
|
|
|
|
|
启动软件定时器。
|
|
|
|
|
|
|
|
停止软件定时器。
|
|
|
|
|
|
|
|
删除软件定时器。
|
|
|
|
|
|
|
|
获取软件定时器剩余Tick数。
|
|
|
|
|
|
|
|
可配置支持的软件定时器个数。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
运作机制
|
|
|
|
|
|
|
|
软件定时器是系统资源,在模块初始化的时候已经分配了一块连续内存。
|
|
|
|
|
|
|
|
软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列则,
|
|
|
|
|
|
|
|
先进先出。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先触发准则。
|
|
|
|
|
|
|
|
软件定时器以Tick为基本计时单位,当创建并启动一个软件定时器时,HuaweiLiteOS会根据
|
|
|
|
|
|
|
|
当前系统Tick时间及设置的定时时长确定该定时器的到期Tick时间,并将该定器控制结构挂入计时全局链表。
|
|
|
|
|
|
|
|
当Tick中断到来时,在Tick中断处理函数中扫描软件定时器的计时全局链表,查是否有定时器超时,
|
|
|
|
|
|
|
|
若有则将超时的定时器记录下来。Tick中断处理函数结束后,软件定时器任务(先级为最高)
|
|
|
|
|
|
|
|
被唤醒,在该任务中调用已经记录下来的定时器的回调函数。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 五、 los_task.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
基本概念
|
|
|
|
|
|
|
|
从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、
|
|
|
|
|
|
|
|
使用内存空间等系统资源,并独立于其它任务运行。
|
|
|
|
|
|
|
|
任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。具有如下特性:
|
|
|
|
|
|
|
|
支持多任务。
|
|
|
|
|
|
|
|
一个任务表示一个线程。
|
|
|
|
|
|
|
|
抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。
|
|
|
|
|
|
|
|
相同优先级任务支持时间片轮转调度方式。
|
|
|
|
|
|
|
|
共有32个优先级[0-31],最高优先级为0,最低优先级为31。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 六、 los_tick.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
系统时钟,是绝大部分部件工作的时钟源,也是其他所有外设的时钟的来源
|