From c791d04ff9a92e3fdd30aaf5511259b4c7f7bf75 Mon Sep 17 00:00:00 2001 From: kuangyufei Date: Mon, 1 Nov 2021 19:23:03 +0800 Subject: [PATCH] =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E6=96=B9=E5=BC=8F,=E6=94=AF=E6=8C=81doxygen=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=20=20=20=20=20=E7=99=BE=E4=B8=87=E6=B1=89=E5=AD=97=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=20+=20=E7=99=BE=E7=AF=87=E5=8D=9A=E5=AE=A2=E5=88=86?= =?UTF-8?q?=E6=9E=90=20=3D>=20=E6=8C=96=E9=80=8F=E9=B8=BF=E8=92=99?= =?UTF-8?q?=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=20=20=20=20=20=E5=8D=9A?= =?UTF-8?q?=E5=AE=A2=E8=BE=93=E5=87=BA=E7=AB=99=E7=82=B9(=E5=9B=BD?= =?UTF-8?q?=E5=86=85):http://weharmonyos.com=20=20=20=20=20=E5=8D=9A?= =?UTF-8?q?=E5=AE=A2=E8=BE=93=E5=87=BA=E7=AB=99=E7=82=B9(=E5=9B=BD?= =?UTF-8?q?=E5=A4=96):https://weharmony.github.io=20=20=20=20=20=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E6=96=87=E4=BB=B6=E7=B3=BB=E7=BB=9F:https://gitee.com?= =?UTF-8?q?/weharmony/third=5Fparty=5FNuttX=20=20=20=20=20=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=8D=8F=E8=AE=AE=E6=A0=88:https://gitee.com/weharmon?= =?UTF-8?q?y/third=5Fparty=5Flwip=20=20=20=20=20=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E5=AD=90=E7=B3=BB=E7=BB=9F:https://gitee.com?= =?UTF-8?q?/weharmony/build=5Flite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/shell/include/shcmd.h | 8 +- arch/arm/arm/include/arch_config.h | 52 +++++------ kernel/base/include/los_task_pri.h | 132 ++++++++++++++-------------- kernel/base/include/los_vm_boot.h | 10 +-- kernel/base/include/los_vm_common.h | 34 +++---- kernel/base/include/los_vm_map.h | 96 ++++++++++---------- net/lwip-2.1/porting/src/driverif.c | 7 +- zzz/git/push.sh | 2 +- 8 files changed, 170 insertions(+), 171 deletions(-) diff --git a/apps/shell/include/shcmd.h b/apps/shell/include/shcmd.h index 423238c8..b83784ba 100644 --- a/apps/shell/include/shcmd.h +++ b/apps/shell/include/shcmd.h @@ -47,13 +47,13 @@ extern "C" { #endif /* __cplusplus */ //一个shell命令的结构体,命令有长有短,鸿蒙采用了可变数组的方式实现 typedef struct { - unsigned int count; //字符数量 - SH_List list; //双向链表 - char cmdString[0]; //字符串,可变数组的一种实现方式. + unsigned int count; ///< 字符数量 + SH_List list; ///< 双向链表 + char cmdString[0]; ///< 字符串,可变数组的一种实现方式. } CmdKeyLink; #define NEED_NEW_LINE(timesPrint, lineCap) ((timesPrint) % (lineCap) == 0) -#define SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGNT)) +SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGNT)) extern unsigned int OsCmdExec(CmdParsed *cmdParsed, char *cmdStr); extern unsigned int OsCmdKeyShift(const char *cmdKey, char *cmdOut, unsigned int size); diff --git a/arch/arm/arm/include/arch_config.h b/arch/arm/arm/include/arch_config.h index 7ecdb24e..b5e8b04e 100644 --- a/arch/arm/arm/include/arch_config.h +++ b/arch/arm/arm/include/arch_config.h @@ -87,35 +87,35 @@ SPSR(saved program status register)程序状态保存寄存器. #define CPSR_IRQ_DISABLE 0x80 /* IRQ disabled when =1 */ //禁止IRQ 中断 #define CPSR_FIQ_DISABLE 0x40 /* FIQ disabled when =1 */ //禁止FIQ中断 #define CPSR_THUMB_ENABLE 0x20 /* Thumb mode when =1 */ //使能Thumb模式 1:CPU处于Thumb状态, 0:CPU处于ARM状态 -#define CPSR_USER_MODE 0x10 //用户模式,除了用户模式,其余模式也叫特权模式,特权模式中除了系统模式以外的其余5种模式称为异常模式; -#define CPSR_FIQ_MODE 0x11 //快中断模式 用于高速数据传输或通道处理 -#define CPSR_IRQ_MODE 0x12 //中断模式 用于通用的中断处理 -#define CPSR_SVC_MODE 0x13 //管理模式 操作系统使用的保护模式 -#define CPSR_ABT_MODE 0x17 //ABT模式 当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护 -#define CPSR_UNDEF_MODE 0x1B //未定义模式(其他模式)当未定义的指令执行时进入该模式,用于支持硬件协处理器的软件仿真 +#define CPSR_USER_MODE 0x10 ///< 用户模式,除了用户模式,其余模式也叫特权模式,特权模式中除了系统模式以外的其余5种模式称为异常模式; +#define CPSR_FIQ_MODE 0x11 ///< 快中断模式 用于高速数据传输或通道处理 +#define CPSR_IRQ_MODE 0x12 ///< 中断模式 用于通用的中断处理 +#define CPSR_SVC_MODE 0x13 ///< 管理模式 操作系统使用的保护模式 +#define CPSR_ABT_MODE 0x17 ///< ABT模式 当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护 +#define CPSR_UNDEF_MODE 0x1B ///< 未定义模式(其他模式)当未定义的指令执行时进入该模式,用于支持硬件协处理器的软件仿真 #define CPSR_MASK_MODE 0x1F /* Define exception type ID */ //ARM处理器一共有7种工作模式,除了用户和系统模式其余都叫异常工作模式 -#define OS_EXCEPT_RESET 0x00 //重置功能,例如:开机就进入CPSR_SVC_MODE模式 -#define OS_EXCEPT_UNDEF_INSTR 0x01 //未定义的异常,就是others -#define OS_EXCEPT_SWI 0x02 //软中断 -#define OS_EXCEPT_PREFETCH_ABORT 0x03 //预取异常(取指异常), 指令三步骤: 取指,译码,执行, -#define OS_EXCEPT_DATA_ABORT 0x04 //数据异常 -#define OS_EXCEPT_FIQ 0x05 //快中断异常 -#define OS_EXCEPT_ADDR_ABORT 0x06 //地址异常 -#define OS_EXCEPT_IRQ 0x07 //普通中断异常 +#define OS_EXCEPT_RESET 0x00 ///< 重置功能,例如:开机就进入CPSR_SVC_MODE模式 +#define OS_EXCEPT_UNDEF_INSTR 0x01 ///< 未定义的异常,就是others +#define OS_EXCEPT_SWI 0x02 ///< 软中断 +#define OS_EXCEPT_PREFETCH_ABORT 0x03 ///< 预取异常(取指异常), 指令三步骤: 取指,译码,执行, +#define OS_EXCEPT_DATA_ABORT 0x04 ///< 数据异常 +#define OS_EXCEPT_FIQ 0x05 ///< 快中断异常 +#define OS_EXCEPT_ADDR_ABORT 0x06 ///< 地址异常 +#define OS_EXCEPT_IRQ 0x07 ///< 普通中断异常 /* Define core num */ #ifdef LOSCFG_KERNEL_SMP -#define CORE_NUM LOSCFG_KERNEL_SMP_CORE_NUM //CPU 核数 +#define CORE_NUM LOSCFG_KERNEL_SMP_CORE_NUM ///< CPU 核数 #else #define CORE_NUM 1 #endif /* Initial bit32 stack value. */ -#define OS_STACK_INIT 0xCACACACA //栈指针初始化值 0b 1010 1010 1010 +#define OS_STACK_INIT 0xCACACACA ///< 栈指针初始化值 0b 1010 1010 1010 /* Bit32 stack top magic number. */ -#define OS_STACK_MAGIC_WORD 0xCCCCCCCC //用于栈顶值,可标识为栈是否被溢出过,神奇的 "烫烫烫烫"的根源所在! 0b 1100 1100 1100 +#define OS_STACK_MAGIC_WORD 0xCCCCCCCC ///< 用于栈顶值,可标识为栈是否被溢出过,神奇的 "烫烫烫烫"的根源所在! 0b 1100 1100 1100 /*************************************************************************** @note_pic * 鸿蒙虚拟内存-栈空间运行时图 * 鸿蒙源码分析系列篇: https://blog.csdn.net/kuangyufei @@ -151,27 +151,27 @@ SPSR(saved program status register)程序状态保存寄存器. #endif #define OS_EXC_FIQ_STACK_SIZE 64 #define OS_EXC_IRQ_STACK_SIZE 64 -#define OS_EXC_SVC_STACK_SIZE 0x2000 //8K -#define OS_EXC_STACK_SIZE 0x1000 //4K +#define OS_EXC_SVC_STACK_SIZE 0x2000 ///< 8K +#define OS_EXC_STACK_SIZE 0x1000 ///< 4K -#define REG_R0 0 //高频寄存器,传参/保存返回值 +#define REG_R0 0 ///< 高频寄存器,传参/保存返回值 #define REG_R1 1 #define REG_R2 2 #define REG_R3 3 #define REG_R4 4 #define REG_R5 5 #define REG_R6 6 -#define REG_R7 7 //特殊情况下用于保存系统调用号 +#define REG_R7 7 ///< 特殊情况下用于保存系统调用号 #define REG_R8 8 #define REG_R9 9 #define REG_R10 10 -#define REG_R11 11 //特殊情况下用于 FP寄存器 +#define REG_R11 11 ///< 特殊情况下用于 FP寄存器 #define REG_R12 12 #define REG_R13 13 #define REG_R14 14 #define REG_R15 15 -#define REG_CPSR 16 //程序状态寄存器(current program status register) (当前程序状态寄存器) -#define REG_SP REG_R13 //堆栈指针 当不使用堆栈时,R13 也可以用做通用数据寄存器 -#define REG_LR REG_R14 //连接寄存器。当执行子程序或者异常中断时,跳转指令会自动将当前地址存入LR寄存器中,当执行完子程 序或者中断后,根据LR中的值,恢复或者说是返回之前被打断的地址继续执行 -#define REG_PC REG_R15 //指令寄存器 +#define REG_CPSR 16 ///< 程序状态寄存器(current program status register) (当前程序状态寄存器) +#define REG_SP REG_R13 ///< 堆栈指针 当不使用堆栈时,R13 也可以用做通用数据寄存器 +#define REG_LR REG_R14 ///< 连接寄存器。当执行子程序或者异常中断时,跳转指令会自动将当前地址存入LR寄存器中,当执行完子程 序或者中断后,根据LR中的值,恢复或者说是返回之前被打断的地址继续执行 +#define REG_PC REG_R15 ///< 指令寄存器 #endif diff --git a/kernel/base/include/los_task_pri.h b/kernel/base/include/los_task_pri.h index 6ba0dc91..92b0b5b6 100644 --- a/kernel/base/include/los_task_pri.h +++ b/kernel/base/include/los_task_pri.h @@ -307,66 +307,66 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁 #define OS_TCB_NAME_LEN 32 typedef struct { - VOID *stackPointer; /**< Task stack pointer */ //内核栈指针位置(SP) - UINT16 taskStatus; /**< Task status */ //各种状态标签,可以拥有多种标签,按位标识 - UINT16 priority; /**< Task priority */ //任务优先级[0:31],默认是31级 + VOID *stackPointer; /**< Task stack pointer \n */ //内核栈指针位置(SP) + UINT16 taskStatus; /**< Task status \n */ //各种状态标签,可以拥有多种标签,按位标识 + UINT16 priority; /**< Task priority \n */ //任务优先级[0:31],默认是31级 UINT16 policy; //任务的调度方式(三种 .. LOS_SCHED_RR ) - UINT64 startTime; /**< The start time of each phase of task *///任务开始时间 - UINT64 irqStartTime; /**< Interrupt start time *///任务中断开始时间 - UINT32 irqUsedTime; /**< Interrupt consumption time *///任务中断恢复时间 - UINT32 initTimeSlice; /**< Task init time slice *///任务初始的时间片 - INT32 timeSlice; /**< Task remaining time slice *///任务剩余时间片 - UINT32 waitTimes; /**< Task delay time, tick number *///设置任务调度延期时间 - SortLinkList sortList; /**< Task sortlink node */ //任务排序链表节点 - UINT32 stackSize; /**< Task stack size */ //内核态栈大小,内存来自内核空间 - UINTPTR topOfStack; /**< Task stack top */ //内核态栈顶 bottom = top + size - UINT32 taskID; /**< Task ID */ //任务ID,任务池本质是一个大数组,ID就是数组的索引,默认 < 128 - TSK_ENTRY_FUNC taskEntry; /**< Task entrance function */ //任务执行入口函数 - VOID *joinRetval; /**< pthread adaption */ //用来存储join线程的返回值 - VOID *taskMux; /**< Task-held mutex */ //task在等哪把锁 - VOID *taskEvent; /**< Task-held event */ //task在等哪个事件 - UINTPTR args[4]; /**< Parameter, of which the maximum number is 4 */ //入口函数的参数 例如 main (int argc,char *argv[]) - CHAR taskName[OS_TCB_NAME_LEN]; /**< Task name */ //任务的名称 - LOS_DL_LIST pendList; /**< Task pend node */ //如果任务阻塞时就通过它挂到各种阻塞情况的链表上,比如OsTaskWait时 - LOS_DL_LIST threadList; /**< thread list */ //挂到所属进程的线程链表上 - UINT32 eventMask; /**< Event mask */ //任务对哪些事件进行屏蔽 - UINT32 eventMode; /**< Event mode */ //事件三种模式(LOS_WAITMODE_AND,LOS_WAITMODE_OR,LOS_WAITMODE_CLR) + UINT64 startTime; /**< The start time of each phase of task \n *///任务开始时间 + UINT64 irqStartTime; /**< Interrupt start time \n *///任务中断开始时间 + UINT32 irqUsedTime; /**< Interrupt consumption time \n *///任务中断恢复时间 + UINT32 initTimeSlice; /**< Task init time slice \n *///任务初始的时间片 + INT32 timeSlice; /**< Task remaining time slice \n *///任务剩余时间片 + UINT32 waitTimes; /**< Task delay time, tick number \n *///设置任务调度延期时间 + SortLinkList sortList; /**< Task sortlink node \n */ //任务排序链表节点 + UINT32 stackSize; /**< Task stack size \n */ //内核态栈大小,内存来自内核空间 + UINTPTR topOfStack; /**< Task stack top \n */ //内核态栈顶 bottom = top + size + UINT32 taskID; /**< Task ID \n */ //任务ID,任务池本质是一个大数组,ID就是数组的索引,默认 < 128 + TSK_ENTRY_FUNC taskEntry; /**< Task entrance function \n */ //任务执行入口函数 + VOID *joinRetval; /**< pthread adaption \n */ //用来存储join线程的返回值 + VOID *taskMux; /**< Task-held mutex \n */ //task在等哪把锁 + VOID *taskEvent; /**< Task-held event \n */ //task在等哪个事件 + UINTPTR args[4]; /**< Parameter, of which the maximum number is 4 \n */ //入口函数的参数 例如 main (int argc,char *argv[]) + CHAR taskName[OS_TCB_NAME_LEN]; /**< Task name \n */ //任务的名称 + LOS_DL_LIST pendList; /**< Task pend node \n */ //如果任务阻塞时就通过它挂到各种阻塞情况的链表上,比如OsTaskWait时 + LOS_DL_LIST threadList; /**< thread list \n */ //挂到所属进程的线程链表上 + UINT32 eventMask; /**< Event mask \n */ //任务对哪些事件进行屏蔽 + UINT32 eventMode; /**< Event mode \n */ //事件三种模式(LOS_WAITMODE_AND,LOS_WAITMODE_OR,LOS_WAITMODE_CLR) UINT32 priBitMap; /**< BitMap for recording the change of task priority, //任务在执行过程中优先级会经常变化,这个变量用来记录所有曾经变化 - the priority can not be greater than 31 */ //过的优先级,例如 ..01001011 曾经有过 0,1,3,6 优先级 + the priority can not be greater than 31 \n */ //过的优先级,例如 ..01001011 曾经有过 0,1,3,6 优先级 #ifdef LOSCFG_KERNEL_CPUP - OsCpupBase taskCpup; /**< task cpu usage */ + OsCpupBase taskCpup; /**< task cpu usage \n */ #endif - INT32 errorNo; /**< Error Num */ - UINT32 signal; /**< Task signal */ //任务信号类型,(SIGNAL_NONE,SIGNAL_KILL,SIGNAL_SUSPEND,SIGNAL_AFFI) + INT32 errorNo; /**< Error Num \n */ + UINT32 signal; /**< Task signal \n */ //任务信号类型,(SIGNAL_NONE,SIGNAL_KILL,SIGNAL_SUSPEND,SIGNAL_AFFI) sig_cb sig; //信号控制块,用于异步通信,类似于 linux singal模块 #ifdef LOSCFG_KERNEL_SMP - UINT16 currCpu; /**< CPU core number of this task is running on */ //正在运行此任务的CPU内核号 - UINT16 lastCpu; /**< CPU core number of this task is running on last time */ //上次运行此任务的CPU内核号 - UINT16 cpuAffiMask; /**< CPU affinity mask, support up to 16 cores */ //CPU亲和力掩码,最多支持16核,亲和力很重要,多核情况下尽量一个任务在一个CPU核上运行,提高效率 + UINT16 currCpu; /**< CPU core number of this task is running on \n */ //正在运行此任务的CPU内核号 + UINT16 lastCpu; /**< CPU core number of this task is running on last time \n */ //上次运行此任务的CPU内核号 + UINT16 cpuAffiMask; /**< CPU affinity mask, support up to 16 cores \n */ //CPU亲和力掩码,最多支持16核,亲和力很重要,多核情况下尽量一个任务在一个CPU核上运行,提高效率 #ifdef LOSCFG_KERNEL_SMP_TASK_SYNC - UINT32 syncSignal; /**< Synchronization for signal handling */ //用于CPU之间 同步信号 + UINT32 syncSignal; /**< Synchronization for signal handling \n */ //用于CPU之间 同步信号 #endif #ifdef LOSCFG_KERNEL_SMP_LOCKDEP //死锁检测开关 LockDep lockDep; #endif #endif #ifdef LOSCFG_SCHED_DEBUG - SchedStat schedStat; /**< Schedule statistics */ + SchedStat schedStat; /**< Schedule statistics \n */ #endif - UINTPTR userArea; //用户空间的堆区开始位置 - UINTPTR userMapBase; //用户空间的栈顶位置,内存来自用户空间,和topOfStack有本质的区别. - UINT32 userMapSize; /**< user thread stack size ,real size : userMapSize + USER_STACK_MIN_SIZE *///用户栈大小 - UINT32 processID; /**< Which belong process *///所属进程ID - FutexNode futex; //实现快锁功能 - LOS_DL_LIST joinList; /**< join list */ //联结链表,允许任务之间相互释放彼此 - LOS_DL_LIST lockList; /**< Hold the lock list */ //该链表上挂的都是已持有的锁 - UINTPTR waitID; /**< Wait for the PID or GID of the child process */ + UINTPTR userArea; ///< 用户空间的堆区开始位置 + UINTPTR userMapBase; ///< 用户空间的栈顶位置,内存来自用户空间,和topOfStack有本质的区别. + UINT32 userMapSize; /**< user thread stack size ,real size : userMapSize + USER_STACK_MIN_SIZE \n *///用户栈大小 + UINT32 processID; /**< Which belong process \n *///所属进程ID + FutexNode futex; ///< 实现快锁功能 + LOS_DL_LIST joinList; /**< join list \n */ //联结链表,允许任务之间相互释放彼此 + LOS_DL_LIST lockList; /**< Hold the lock list \n 该链表上挂的都是已持有的锁 */ + UINTPTR waitID; /**< Wait for the PID or GID of the child process \n */ UINT16 waitFlag; /**< The type of child process that is waiting, belonging to a group or parent, - a specific child process, or any child process */ //以什么样的方式等待子进程结束(OS_TASK_WAIT_PROCESS | OS_TASK_WAIT_GID | ..) + a specific child process, or any child process \n 以什么样的方式等待子进程结束(OS_TASK_WAIT_PROCESS | OS_TASK_WAIT_GID | ..) */ #ifdef LOSCFG_KERNEL_LITEIPC - UINT32 ipcStatus; //IPC状态 - LOS_DL_LIST msgListHead; //消息队列头结点,上面挂的都是任务要读的消息 - BOOL accessMap[LOSCFG_BASE_CORE_TSK_LIMIT];//访问图,指的是task之间是否能访问的标识,LOSCFG_BASE_CORE_TSK_LIMIT 为任务池总数 + UINT32 ipcStatus; ///< IPC状态 + LOS_DL_LIST msgListHead; ///< 消息队列头结点,上面挂的都是任务要读的消息 + BOOL accessMap[LOSCFG_BASE_CORE_TSK_LIMIT];///< 访问图,指的是task之间是否能访问的标识,LOSCFG_BASE_CORE_TSK_LIMIT 为任务池总数 #endif #ifdef LOSCFG_KERNEL_PERF UINTPTR pc; @@ -380,11 +380,11 @@ typedef struct { } LosTask; struct ProcessSignalInfo {//进程信号描述符 - siginfo_t *sigInfo; /**< Signal to be dispatched */ //要发送的信号 - LosTaskCB *defaultTcb; /**< Default TCB */ //默认task,默认接收信号的任务. - LosTaskCB *unblockedTcb; /**< The signal unblock on this TCB*/ //信号在此TCB上解除阻塞 - LosTaskCB *awakenedTcb; /**< This TCB was awakened */ //即 任务在等待这个信号,此信号一来任务被唤醒. - LosTaskCB *receivedTcb; /**< This TCB received the signal */ //如果没有屏蔽信号,任务将接收这个信号. + siginfo_t *sigInfo; /**< Signal to be dispatched \n 要发送的信号*/ + LosTaskCB *defaultTcb; /**< Default TCB \n 默认task,默认接收信号的任务. */ + LosTaskCB *unblockedTcb; /**< The signal unblock on this TCB \n 信号在此TCB上解除阻塞 */ + LosTaskCB *awakenedTcb; /**< This TCB was awakened \n 即 任务在等待这个信号,此信号一来任务被唤醒.*/ + LosTaskCB *receivedTcb; /**< This TCB received the signal \n 如果没有屏蔽信号,任务将接收这个信号. */ }; typedef int (*ForEachTaskCB)(LosTaskCB *tcb, void *arg);//回调任务函数,例如:进程被kill 9 时,通知所有任务善后处理 @@ -394,7 +394,7 @@ typedef int (*ForEachTaskCB)(LosTaskCB *tcb, void *arg);//回调任务函数,例 * Maximum number of tasks. * */ -extern UINT32 g_taskMaxNum;//任务最大数量 默认128个 +extern UINT32 g_taskMaxNum;///< 任务最大数量 默认128个 /** @@ -402,16 +402,16 @@ extern UINT32 g_taskMaxNum;//任务最大数量 默认128个 * Starting address of a task. * */ -extern LosTaskCB *g_taskCBArray;//外部变量 任务池 默认128个 +extern LosTaskCB *g_taskCBArray;///< 外部变量 任务池 默认128个 /** * @ingroup los_task * Time slice structure. */ typedef struct {//时间片结构体,任务轮询 - LosTaskCB *task; /**< Current running task */ //当前运行着的任务 - UINT16 time; /**< Expiration time point */ //过期时间点 - UINT16 timeout; /**< Expiration duration */ //有效期 + LosTaskCB *task; /**< Current running task \n 当前运行着的任务*/ + UINT16 time; /**< Expiration time point \n 过期时间点*/ + UINT16 timeout; /**< Expiration duration \n 有效期*/ } OsTaskRobin; //获取当前CPU core运行的任务 STATIC INLINE LosTaskCB *OsCurrTaskGet(VOID) @@ -484,18 +484,18 @@ STATIC INLINE BOOL OsTaskIsKilled(const LosTaskCB *taskCB) /* get task info */ #define OS_ALL_TASK_MASK 0xFFFFFFFF -#define OS_TASK_WAIT_ANYPROCESS (1 << 0U) //任务等待任何进程出现 -#define OS_TASK_WAIT_PROCESS (1 << 1U) //任务等待进程出现 -#define OS_TASK_WAIT_GID (1 << 2U) //任务等待组ID -#define OS_TASK_WAIT_SEM (OS_TASK_WAIT_GID + 1) //任务等待信号量发生 -#define OS_TASK_WAIT_QUEUE (OS_TASK_WAIT_SEM + 1) //任务等待队列到来 -#define OS_TASK_WAIT_JOIN (OS_TASK_WAIT_QUEUE + 1) //任务等待 -#define OS_TASK_WAIT_SIGNAL (OS_TASK_WAIT_JOIN + 1) //任务等待信号的到来 -#define OS_TASK_WAIT_LITEIPC (OS_TASK_WAIT_SIGNAL + 1) //任务等待liteipc到来 -#define OS_TASK_WAIT_MUTEX (OS_TASK_WAIT_LITEIPC + 1) //任务等待MUTEX到来 -#define OS_TASK_WAIT_FUTEX (OS_TASK_WAIT_MUTEX + 1) //任务等待FUTEX到来 -#define OS_TASK_WAIT_EVENT (OS_TASK_WAIT_FUTEX + 1) //任务等待事件发生 -#define OS_TASK_WAIT_COMPLETE (OS_TASK_WAIT_EVENT + 1) //任务等待完成 +#define OS_TASK_WAIT_ANYPROCESS (1 << 0U) ///< 任务等待任何进程出现 +#define OS_TASK_WAIT_PROCESS (1 << 1U) ///< 任务等待进程出现 +#define OS_TASK_WAIT_GID (1 << 2U) ///< 任务等待组ID +#define OS_TASK_WAIT_SEM (OS_TASK_WAIT_GID + 1) ///< 任务等待信号量发生 +#define OS_TASK_WAIT_QUEUE (OS_TASK_WAIT_SEM + 1) ///< 任务等待队列到来 +#define OS_TASK_WAIT_JOIN (OS_TASK_WAIT_QUEUE + 1) ///< 任务等待 +#define OS_TASK_WAIT_SIGNAL (OS_TASK_WAIT_JOIN + 1) ///< 任务等待信号的到来 +#define OS_TASK_WAIT_LITEIPC (OS_TASK_WAIT_SIGNAL + 1) ///< 任务等待liteipc到来 +#define OS_TASK_WAIT_MUTEX (OS_TASK_WAIT_LITEIPC + 1) ///< 任务等待MUTEX到来 +#define OS_TASK_WAIT_FUTEX (OS_TASK_WAIT_MUTEX + 1) ///< 任务等待FUTEX到来 +#define OS_TASK_WAIT_EVENT (OS_TASK_WAIT_FUTEX + 1) ///< 任务等待事件发生 +#define OS_TASK_WAIT_COMPLETE (OS_TASK_WAIT_EVENT + 1) ///< 任务等待完成 //设置事件阻塞掩码,即设置任务的等待事件. STATIC INLINE VOID OsTaskWaitSetPendMask(UINT16 mask, UINTPTR lockID, UINT32 timeout) diff --git a/kernel/base/include/los_vm_boot.h b/kernel/base/include/los_vm_boot.h index 6cc9ee52..b3fd72a6 100644 --- a/kernel/base/include/los_vm_boot.h +++ b/kernel/base/include/los_vm_boot.h @@ -50,11 +50,11 @@ extern "C" { #define OS_KHEAP_BLOCK_SIZE (512 * 1024UL) typedef struct ArchMmuInitMapping { - PADDR_T phys;//物理地址 - VADDR_T virt;//虚拟地址 - size_t size;//大小 - unsigned int flags;//标识 读/写/.. VM_MAP_REGION_FLAG_PERM_* - const char *name;//名称 + PADDR_T phys;///< 物理地址 + VADDR_T virt;///< 虚拟地址 + size_t size;///< 大小 + unsigned int flags;///< 标识 读/写/.. VM_MAP_REGION_FLAG_PERM_* + const char *name;///< 名称 } LosArchMmuInitMapping; extern LosArchMmuInitMapping g_archMmuInitMapping[]; diff --git a/kernel/base/include/los_vm_common.h b/kernel/base/include/los_vm_common.h index 8ea60b51..92ae0ece 100644 --- a/kernel/base/include/los_vm_common.h +++ b/kernel/base/include/los_vm_common.h @@ -90,23 +90,23 @@ extern "C" { // |---------------------------|虚拟内存开始位置 0x00000000 /* user address space, defaults to below kernel space with a 16MB guard gap on either side */ -#ifndef USER_ASPACE_BASE //用户地址空间,默认为低于内核空间,两侧各有16MB的保护间隙 -#define USER_ASPACE_BASE ((vaddr_t)0x01000000UL) //用户空间基地址 从16M位置开始 +#ifndef USER_ASPACE_BASE ///< 用户地址空间,默认为低于内核空间,两侧各有16MB的保护间隙 +#define USER_ASPACE_BASE ((vaddr_t)0x01000000UL) ///< 用户空间基地址 从16M位置开始 #endif #ifndef USER_ASPACE_SIZE -#define USER_ASPACE_SIZE ((vaddr_t)KERNEL_ASPACE_BASE - USER_ASPACE_BASE - 0x01000000UL)//用户空间 < 内核空间 2个16M +#define USER_ASPACE_SIZE ((vaddr_t)KERNEL_ASPACE_BASE - USER_ASPACE_BASE - 0x01000000UL)///< 用户空间 < 内核空间 2个16M #endif -#define USER_ASPACE_TOP_MAX ((vaddr_t)(USER_ASPACE_BASE + USER_ASPACE_SIZE))//用户空间顶部位置 -#define USER_HEAP_BASE ((vaddr_t)(USER_ASPACE_TOP_MAX >> 2)) //堆的开始地址 -#define USER_MAP_BASE ((vaddr_t)(USER_ASPACE_TOP_MAX >> 1)) //用户映射区开始地址 -#define USER_MAP_SIZE ((vaddr_t)(USER_ASPACE_SIZE >> 3)) //用户空间映射大小 = 1/8 用户空间 +#define USER_ASPACE_TOP_MAX ((vaddr_t)(USER_ASPACE_BASE + USER_ASPACE_SIZE))///< 用户空间顶部位置 +#define USER_HEAP_BASE ((vaddr_t)(USER_ASPACE_TOP_MAX >> 2)) ///< 堆的开始地址 +#define USER_MAP_BASE ((vaddr_t)(USER_ASPACE_TOP_MAX >> 1)) ///< 用户映射区开始地址 +#define USER_MAP_SIZE ((vaddr_t)(USER_ASPACE_SIZE >> 3)) ///< 用户空间映射大小 = 1/8 用户空间 #ifndef PAGE_SIZE -#define PAGE_SIZE (0x1000U) // 页大小4K +#define PAGE_SIZE (0x1000U) ///< 页大小4K #endif -#define PAGE_MASK (~(PAGE_SIZE - 1)) //页掩码,用于页内偏移地址的计算 -#define PAGE_SHIFT (12)// 12位 - 4K 偏移 +#define PAGE_MASK (~(PAGE_SIZE - 1)) ///< 页掩码,用于页内偏移地址的计算 +#define PAGE_SHIFT (12)///< 12位 - 4K 偏移 #define KB (1024UL) #define MB (1024UL * 1024UL) @@ -119,14 +119,14 @@ extern "C" { ROUNDOFFSET(7,4) = 3 ,ROUNDOFFSET(8,4) = 0 ,ROUNDOFFSET(9,4) = 1 发现规律看明白了吗? ******************************************************************/ -#define ROUNDUP(a, b) (((a) + ((b) - 1)) & ~((b) - 1)) //向上圆整 -#define ROUNDDOWN(a, b) ((a) & ~((b) - 1)) //向下圆整 -#define ROUNDOFFSET(a, b) ((a) & ((b) - 1)) //圆整偏移 -#define MIN2(a, b) (((a) < (b)) ? (a) : (b)) //找到最小值 +#define ROUNDUP(a, b) (((a) + ((b) - 1)) & ~((b) - 1)) ///< 向上圆整 +#define ROUNDDOWN(a, b) ((a) & ~((b) - 1)) ///< 向下圆整 +#define ROUNDOFFSET(a, b) ((a) & ((b) - 1)) ///< 圆整偏移 +#define MIN2(a, b) (((a) < (b)) ? (a) : (b)) ///< 找到最小值 -#define IS_ALIGNED(a, b) (!(((UINTPTR)(a)) & (((UINTPTR)(b)) - 1)))//是否按指定的参数对齐 -#define IS_PAGE_ALIGNED(x) IS_ALIGNED(x, PAGE_SIZE) //是否按页大小对齐 4K -#define IS_SECTION_ALIGNED(x) IS_ALIGNED(x, SECTION_SIZE)//是否按段大小对齐 +#define IS_ALIGNED(a, b) (!(((UINTPTR)(a)) & (((UINTPTR)(b)) - 1)))///< 是否按指定的参数对齐 +#define IS_PAGE_ALIGNED(x) IS_ALIGNED(x, PAGE_SIZE) ///< 是否按页大小对齐 4K +#define IS_SECTION_ALIGNED(x) IS_ALIGNED(x, SECTION_SIZE)///< 是否按段大小对齐 #define LOS_ERRNO_VM_NO_ERROR (0) #define LOS_ERRNO_VM_GENERIC (-1) diff --git a/kernel/base/include/los_vm_map.h b/kernel/base/include/los_vm_map.h index de1de1c4..61bf7db6 100644 --- a/kernel/base/include/los_vm_map.h +++ b/kernel/base/include/los_vm_map.h @@ -105,78 +105,78 @@ struct VmFileOps {// 文件操作 见于g_commVmOps }; struct VmMapRegion {//线性区描述符,内核通过线性区管理虚拟地址,而线性地址就是虚拟地址 - LosRbNode rbNode; /**< region red-black tree node */ //红黑树节点,通过它将本线性区挂在VmSpace.regionRbTree - LosVmSpace *space; //所属虚拟空间,虚拟空间由多个线性区组成 - LOS_DL_LIST node; /**< region dl list */ //链表节点,通过它将本线性区挂在VmSpace.regions上 - LosVmMapRange range; /**< region address range */ //记录线性区的范围 - VM_OFFSET_T pgOff; /**< region page offset to file */ //以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。 - UINT32 regionFlags; /**< region flags: cow, user_wired *///线性区标签 - UINT32 shmid; /**< shmid about shared region */ //shmid为共享线性区id,id背后就是共享线性区 - UINT8 forkFlags; /**< vm space fork flags: COPY, ZERO, */ //fork的方式 - UINT8 regionType; /**< vm region type: ANON, FILE, DEV */ //映射类型是匿名,文件,还是设备,所谓匿名可理解为内存映射 + LosRbNode rbNode; /**< region red-black tree node \n 红黑树节点,通过它将本线性区挂在VmSpace.regionRbTree*/ + LosVmSpace *space; ///< 所属虚拟空间,虚拟空间由多个线性区组成 + LOS_DL_LIST node; /**< region dl list \n 链表节点,通过它将本线性区挂在VmSpace.regions上*/ + LosVmMapRange range; /**< region address range \n 记录线性区的范围*/ + VM_OFFSET_T pgOff; /**< region page offset to file \n 以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。*/ + UINT32 regionFlags; /**< region flags: cow, user_wired \n 线性区标签*/ + UINT32 shmid; /**< shmid about shared region \n shmid为共享线性区id,id背后就是共享线性区*/ + UINT8 forkFlags; /**< vm space fork flags: COPY, ZERO, \n fork的方式*/ + UINT8 regionType; /**< vm region type: ANON, FILE, DEV \n 映射类型是匿名,文件,还是设备,所谓匿名可理解为内存映射*/ union { struct VmRegionFile {//文件映射 int f_oflags; struct Vnode *vnode; - const LosVmFileOps *vmFOps;//文件处理各操作接口 + const LosVmFileOps *vmFOps;///< 文件处理各操作接口 } rf; struct VmRegionAnon {//匿名映射可理解为就是物理内存 - LOS_DL_LIST node; /**< region LosVmPage list */ //线性区虚拟页链表 + LOS_DL_LIST node; /**< region LosVmPage list \n 线性区虚拟页链表*/ } ra; struct VmRegionDev {//设备映射 - LOS_DL_LIST node; /**< region LosVmPage list */ //线性区虚拟页链表 - const LosVmFileOps *vmFOps; //设备也是一种文件 + LOS_DL_LIST node; /**< region LosVmPage list \n 线性区虚拟页链表*/ + const LosVmFileOps *vmFOps; ///< 设备也是一种文件 } rd; } unTypeData; }; typedef struct VmSpace { - LOS_DL_LIST node; /**< vm space dl list */ //节点,通过它挂到全局虚拟空间 g_vmSpaceList 链表上 - LosRbTree regionRbTree; /**< region red-black tree root */ //采用红黑树方式管理本空间各个线性区 - LosMux regionMux; /**< region list mutex lock */ //虚拟空间的互斥锁 - VADDR_T base; /**< vm space base addr */ //虚拟空间的基地址,常用于判断地址是否在内核还是用户空间 - UINT32 size; /**< vm space size */ //虚拟空间大小 - VADDR_T heapBase; /**< vm space heap base address */ //用户进程专用,堆区基地址,表堆区范围起点 - VADDR_T heapNow; /**< vm space heap base now */ //用户进程专用,堆区结束地址,表堆区范围终点,do_brk()直接修改堆的大小返回新的堆区结束地址, heapNow >= heapBase - LosVmMapRegion *heap; /**< heap region */ //堆区是个特殊的线性区,用于满足进程的动态内存需求,大家熟知的malloc,realloc,free其实就是在操作这个区 - VADDR_T mapBase; /**< vm space mapping area base */ //虚拟空间映射区基地址,L1,L2表存放在这个区 - UINT32 mapSize; /**< vm space mapping area size */ //虚拟空间映射区大小,映射区是个很大的区。 - LosArchMmu archMmu; /**< vm mapping physical memory */ //MMU记录<虚拟地址,物理地址>的映射情况 + LOS_DL_LIST node; /**< vm space dl list \n 节点,通过它挂到全局虚拟空间 g_vmSpaceList 链表上*/ + LosRbTree regionRbTree; /**< region red-black tree root \n 采用红黑树方式管理本空间各个线性区*/ + LosMux regionMux; /**< region list mutex lock \n 虚拟空间的互斥锁*/ + VADDR_T base; /**< vm space base addr \n 虚拟空间的基地址,常用于判断地址是否在内核还是用户空间*/ + UINT32 size; /**< vm space size \n 虚拟空间大小*/ + VADDR_T heapBase; /**< vm space heap base address \n 用户进程专用,堆区基地址,表堆区范围起点*/ + VADDR_T heapNow; /**< vm space heap base now \n 用户进程专用,堆区结束地址,表堆区范围终点,do_brk()直接修改堆的大小返回新的堆区结束地址, heapNow >= heapBase*/ + LosVmMapRegion *heap; /**< heap region \n 堆区是个特殊的线性区,用于满足进程的动态内存需求,大家熟知的malloc,realloc,free其实就是在操作这个区*/ + VADDR_T mapBase; /**< vm space mapping area base \n 虚拟空间映射区基地址,L1,L2表存放在这个区 */ + UINT32 mapSize; /**< vm space mapping area size \n 虚拟空间映射区大小,映射区是个很大的区。*/ + LosArchMmu archMmu; /**< vm mapping physical memory \n MMU记录<虚拟地址,物理地址>的映射情况 */ #ifdef LOSCFG_DRIVERS_TZDRIVER VADDR_T codeStart; /**< user process code area start */ VADDR_T codeEnd; /**< user process code area end */ #endif } LosVmSpace; -#define VM_MAP_REGION_TYPE_NONE (0x0)//初始化使用 -#define VM_MAP_REGION_TYPE_ANON (0x1)//匿名映射线性区 -#define VM_MAP_REGION_TYPE_FILE (0x2)//文件映射线性区 -#define VM_MAP_REGION_TYPE_DEV (0x4)//设备映射线性区 -#define VM_MAP_REGION_TYPE_MASK (0x7)//映射线性区掩码 +#define VM_MAP_REGION_TYPE_NONE (0x0)///< 初始化使用 +#define VM_MAP_REGION_TYPE_ANON (0x1)///< 匿名映射线性区 +#define VM_MAP_REGION_TYPE_FILE (0x2)///< 文件映射线性区 +#define VM_MAP_REGION_TYPE_DEV (0x4)///< 设备映射线性区 +#define VM_MAP_REGION_TYPE_MASK (0x7)///< 映射线性区掩码 /* the high 8 bits(24~31) should reserved, shm will use it */ -#define VM_MAP_REGION_FLAG_CACHED (0<<0) //缓冲区 -#define VM_MAP_REGION_FLAG_UNCACHED (1<<0) //非缓冲区 +#define VM_MAP_REGION_FLAG_CACHED (0<<0) ///< 缓冲区 +#define VM_MAP_REGION_FLAG_UNCACHED (1<<0) ///< 非缓冲区 #define VM_MAP_REGION_FLAG_UNCACHED_DEVICE (2<<0) /* only exists on some arches, otherwise UNCACHED */ #define VM_MAP_REGION_FLAG_STRONGLY_ORDERED (3<<0) /* only exists on some arches, otherwise UNCACHED */ -#define VM_MAP_REGION_FLAG_CACHE_MASK (3<<0) //缓冲区掩码 -#define VM_MAP_REGION_FLAG_PERM_USER (1<<2) //用户区 -#define VM_MAP_REGION_FLAG_PERM_READ (1<<3) //可读取区 -#define VM_MAP_REGION_FLAG_PERM_WRITE (1<<4) //可写入区 -#define VM_MAP_REGION_FLAG_PERM_EXECUTE (1<<5) //可被执行区 -#define VM_MAP_REGION_FLAG_PROT_MASK (0xF<<2) //访问权限掩码 +#define VM_MAP_REGION_FLAG_CACHE_MASK (3<<0) ///< 缓冲区掩码 +#define VM_MAP_REGION_FLAG_PERM_USER (1<<2) ///< 用户区 +#define VM_MAP_REGION_FLAG_PERM_READ (1<<3) ///< 可读取区 +#define VM_MAP_REGION_FLAG_PERM_WRITE (1<<4) ///< 可写入区 +#define VM_MAP_REGION_FLAG_PERM_EXECUTE (1<<5) ///< 可被执行区 +#define VM_MAP_REGION_FLAG_PROT_MASK (0xF<<2) ///< 访问权限掩码 #define VM_MAP_REGION_FLAG_NS (1<<6) /* NON-SECURE */ -#define VM_MAP_REGION_FLAG_SHARED (1<<7) //MAP_SHARED:把对该内存段的修改保存到磁盘文件中 详见 OsCvtProtFlagsToRegionFlags ,要和 VM_MAP_REGION_FLAG_SHM区别理解 -#define VM_MAP_REGION_FLAG_PRIVATE (1<<8) //MAP_PRIVATE:内存段私有,对它的修改值仅对本进程有效,详见 OsCvtProtFlagsToRegionFlags。 -#define VM_MAP_REGION_FLAG_FLAG_MASK (3<<7) //掩码 -#define VM_MAP_REGION_FLAG_STACK (1<<9) //线性区的类型:栈区 -#define VM_MAP_REGION_FLAG_HEAP (1<<10) //线性区的类型:堆区 -#define VM_MAP_REGION_FLAG_DATA (1<<11) //data数据区 编译在ELF中 -#define VM_MAP_REGION_FLAG_TEXT (1<<12) //代码区 -#define VM_MAP_REGION_FLAG_BSS (1<<13) //bbs数据区 由运行时动态分配 -#define VM_MAP_REGION_FLAG_VDSO (1<<14) //VDSO(Virtual Dynamically-lined Shared Object)由内核提供的虚拟.so文件,它不在磁盘上,而在内核里,内核将其映射到一个地址空间中,被所有程序共享,正文段大小为一个页面。 -#define VM_MAP_REGION_FLAG_MMAP (1<<15) //映射区,虚拟空间内有专门用来存储<虚拟地址-物理地址>映射的区域 -#define VM_MAP_REGION_FLAG_SHM (1<<16) //共享内存区,和代码区同级概念,意思是整个线性区被贴上共享标签 +#define VM_MAP_REGION_FLAG_SHARED (1<<7) ///< MAP_SHARED:把对该内存段的修改保存到磁盘文件中 详见 OsCvtProtFlagsToRegionFlags ,要和 VM_MAP_REGION_FLAG_SHM区别理解 +#define VM_MAP_REGION_FLAG_PRIVATE (1<<8) ///< MAP_PRIVATE:内存段私有,对它的修改值仅对本进程有效,详见 OsCvtProtFlagsToRegionFlags。 +#define VM_MAP_REGION_FLAG_FLAG_MASK (3<<7) ///< 掩码 +#define VM_MAP_REGION_FLAG_STACK (1<<9) ///< 线性区的类型:栈区 +#define VM_MAP_REGION_FLAG_HEAP (1<<10) ///< 线性区的类型:堆区 +#define VM_MAP_REGION_FLAG_DATA (1<<11) ///< data数据区 编译在ELF中 +#define VM_MAP_REGION_FLAG_TEXT (1<<12) ///< 代码区 +#define VM_MAP_REGION_FLAG_BSS (1<<13) ///< bbs数据区 由运行时动态分配 +#define VM_MAP_REGION_FLAG_VDSO (1<<14) ///< VDSO(Virtual Dynamically-lined Shared Object)由内核提供的虚拟.so文件,它不在磁盘上,而在内核里,内核将其映射到一个地址空间中,被所有程序共享,正文段大小为一个页面。 +#define VM_MAP_REGION_FLAG_MMAP (1<<15) ///< 映射区,虚拟空间内有专门用来存储<虚拟地址-物理地址>映射的区域 +#define VM_MAP_REGION_FLAG_SHM (1<<16) ///< 共享内存区,和代码区同级概念,意思是整个线性区被贴上共享标签 #define VM_MAP_REGION_FLAG_FIXED (1<<17) #define VM_MAP_REGION_FLAG_FIXED_NOREPLACE (1<<18) #define VM_MAP_REGION_FLAG_INVALID (1<<19) /* indicates that flags are not specified */ diff --git a/net/lwip-2.1/porting/src/driverif.c b/net/lwip-2.1/porting/src/driverif.c index 581ad3f8..bf30be35 100644 --- a/net/lwip-2.1/porting/src/driverif.c +++ b/net/lwip-2.1/porting/src/driverif.c @@ -226,7 +226,6 @@ driverif_input(struct netif *netif, struct pbuf *p) LWIP_DEBUGF(DRIVERIF_DEBUG, ("driverif_input : received packet is processed\n")); } - /* * Should be called at the beginning of the program to set up the * network interface. It calls the function low_level_init() to do the @@ -247,7 +246,7 @@ driverif_init(struct netif *netif)//网络接口驱动层初始化 if (netif == NULL) { return ERR_IF; } - link_layer_type = netif->link_layer_type;//链路层类? + link_layer_type = netif->link_layer_type;//链路层类�? LWIP_ERROR("driverif_init : invalid link_layer_type in netif", \ ((link_layer_type == ETHERNET_DRIVER_IF) || (link_layer_type == WIFI_DRIVER_IF)), \ return ERR_IF); @@ -274,7 +273,7 @@ driverif_init(struct netif *netif)//网络接口驱动层初始化 NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); netif->output = etharp_output;//该函数接收来自TCP/IP层的数据 - netif->linkoutput = driverif_output;//该函数实现底层数据包的发? + netif->linkoutput = driverif_output;//该函数实现底层数据包的发�? /* init the netif's full name */ driverif_init_ifname(netif);//初始化链路接口层名称 @@ -294,7 +293,7 @@ driverif_init(struct netif *netif)//网络接口驱动层初始化 #endif /** - @page RFC-2710 RFC-2710 + @brief RFC-2710 RFC-2710 @par Compliant Sections Section 5. Node State Transition Diagram @par Behavior Description diff --git a/zzz/git/push.sh b/zzz/git/push.sh index c85537b7..13544c45 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m ' 注解支持doxygen,输出 http://weharmonyos.com/doxygen +git commit -m ' 修改注解方式,支持doxygen格式 百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码 博客输出站点(国内):http://weharmonyos.com 博客输出站点(国外):https://weharmony.github.io -- GitLab