|
|
/* ----------------------------------------------------------------------------
|
|
|
* Copyright (c) Huawei Technologies Co., Ltd. 2013-2021. All rights reserved.
|
|
|
* Description: System Config HeadFile
|
|
|
* Author: Huawei LiteOS Team
|
|
|
* Create: 2013-01-01
|
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
|
* are permitted provided that the following conditions are met:
|
|
|
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
|
* conditions and the following disclaimer.
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
|
|
* provided with the distribution.
|
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
|
|
* to endorse or promote products derived from this software without specific prior written
|
|
|
* permission.
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
|
|
/**
|
|
|
* @defgroup los_config System configuration items
|
|
|
* @ingroup kernel
|
|
|
*/
|
|
|
/*具体而言,los_config.h 文件通常包含以下内容:
|
|
|
|
|
|
任务(Task)配置:可以定义任务的数量、优先级范围、堆栈大小等参数,以满足不同应用场景的需求。
|
|
|
|
|
|
中断(Interrupt)配置:可以定义中断服务例程的数量、优先级范围,以及中断处理的策略等。
|
|
|
|
|
|
内存管理(Memory Management)配置:可以定义动态内存分配算法、内存池的大小和数量等相关参数。
|
|
|
|
|
|
定时器(Timer)配置:可以定义定时器的数量、精度、触发方式等。
|
|
|
|
|
|
任务调度(Task Scheduling)配置:可以配置任务调度算法、时间片轮转的时间等。
|
|
|
|
|
|
系统时钟(System Clock)配置:可以定义系统时钟的频率、定时器的输入时钟源等。
|
|
|
|
|
|
通过修改 los_config.h 文件中的宏定义和全局变量,开发人员可以根据应用需求对操作系统进行定制和优化。
|
|
|
然后,将修改后的 los_config.h 文件编译进入 LiteOS 内核,即可实现对操作系统行为和功能的定制化配置。*/
|
|
|
|
|
|
#ifndef _LOS_CONFIG_H
|
|
|
#define _LOS_CONFIG_H
|
|
|
|
|
|
#include "los_typedef.h"
|
|
|
#include "asm/memmap_config.h"
|
|
|
#include "hisoc/clock.h"
|
|
|
#include "asm/platform.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
#if __cplusplus
|
|
|
extern "C" {
|
|
|
#endif /* __cplusplus */
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#ifdef LOSCFG_LIB_CONFIGURABLE//判断宏定义 LOSCFG_LIB_CONFIGURABLE 是否被定义。如果该宏被定义,那么以下变量声明将会被编译进程序中。
|
|
|
extern UINT32 g_osSysClock;//系统时钟频率
|
|
|
extern UINT32 g_tickPerSecond;//系统时钟滴答数
|
|
|
extern UINT32 g_taskLimit;//最大任务数量
|
|
|
extern UINT32 g_taskMinStkSize;//任务最小堆栈大小
|
|
|
extern UINT32 g_taskIdleStkSize;//空闲任务堆栈大小
|
|
|
extern UINT32 g_taskDfltStkSize;//默认任务堆栈大小
|
|
|
extern UINT32 g_taskSwtmrStkSize;//软件定时器任务堆栈大小
|
|
|
extern UINT32 g_swtmrLimit;//最大软件定时器数量
|
|
|
extern UINT32 g_semLimit;//最大信号量数量
|
|
|
extern UINT32 g_muxLimit;//最大互斥量数量
|
|
|
extern UINT32 g_queueLimit;//最大队列数量
|
|
|
extern UINT32 g_timeSliceTimeOut;//时间片轮转的时间
|
|
|
|
|
|
extern BOOL g_nxEnabled;//是否启用内存保护机制
|
|
|
extern UINTPTR g_dlNxHeapBase;//内存保护机制的起始地址
|
|
|
extern UINT32 g_dlNxHeapSize;//内存保护机制的大小
|
|
|
|
|
|
#define LOS_GET_NX_CFG() (g_nxEnabled)//宏用于获取一个名为g_nxEnabled的变量的值。
|
|
|
#define LOS_SET_NX_CFG(value) (g_nxEnabled = (value))//宏用于设置一个名为g_nxEnabled的变量的值。
|
|
|
#define LOS_GET_DL_NX_HEAP_BASE() (g_dlNxHeapBase)//宏用于获取一个名为g_dlNxHeapBase的变量的值。
|
|
|
#define LOS_SET_DL_NX_HEAP_BASE(addr) (g_dlNxHeapBase = (addr))//宏用于设置一个名为g_dlNxHeapBase的变量的值。
|
|
|
#define LOS_GET_DL_NX_HEAP_SIZE() (g_dlNxHeapSize)//宏用于获取一个名为g_dlNxHeapSize的变量的值。
|
|
|
#define LOS_SET_DL_NX_HEAP_SIZE(size) (g_dlNxHeapSize = (size))//宏用于设置一个名为g_dlNxHeapSize的变量的值。
|
|
|
|
|
|
#define OS_SYS_CLOCK g_osSysClock//定义系统时间频率
|
|
|
#define KERNEL_TICK_PER_SECOND g_tickPerSecond//定义系统时针滴答数
|
|
|
#define KERNEL_TSK_LIMIT g_taskLimit//定义最大任务数量
|
|
|
#define KERNEL_TSK_MIN_STACK_SIZE g_taskMinStkSize//定义任务最小堆栈大小
|
|
|
#define KERNEL_TSK_DEFAULT_STACK_SIZE g_taskDfltStkSize//定义默认任务堆栈大小
|
|
|
#define KERNEL_TSK_IDLE_STACK_SIZE g_taskIdleStkSize//定义默认任务堆栈大小
|
|
|
#define KERNEL_TSK_SWTMR_STACK_SIZE g_taskSwtmrStkSize//定义软件定时器任务堆栈大小
|
|
|
#define KERNEL_SWTMR_LIMIT g_swtmrLimit//定义最大软件定时器数量
|
|
|
#define KERNEL_SEM_LIMIT g_semLimit//定义最大信号量数量
|
|
|
#define KERNEL_MUX_LIMIT g_muxLimit//定义最大互斥量数量
|
|
|
#define KERNEL_QUEUE_LIMIT g_queueLimit//定义最大对列数量
|
|
|
#define KERNEL_TIMESLICE_TIMEOUT g_timeSliceTimeOut//定义时间片轮转的时间
|
|
|
|
|
|
#else /* LOSCFG_LIB_CONFIGURABLE */
|
|
|
|
|
|
#ifdef LOSCFG_KERNEL_NX
|
|
|
#define LOS_GET_NX_CFG() true//获取内存保护机制是否开启的配置值,当 LOSCFG_KERNEL_NX 宏被定义时,返回 true;否则返回 false。
|
|
|
#define LOS_SET_NX_CFG(value)//设置内存保护机制的配置值,该宏定义为空白,没有实际操作。
|
|
|
#define LOS_GET_DL_NX_HEAP_BASE() LOS_DL_HEAP_BASE//获取内存保护机制的起始地址,当 LOSCFG_KERNEL_NX 宏被定义时,返回 LOS_DL_HEAP_BASE;否则返回 NULL。
|
|
|
#define LOS_SET_DL_NX_HEAP_BASE(addr)//设置内存保护机制的起始地址,该宏定义为空白,没有实际操作。
|
|
|
#define LOS_GET_DL_NX_HEAP_SIZE() LOS_DL_HEAP_SIZE//获取内存保护机制的大小,当 LOSCFG_KERNEL_NX 宏被定义时,返回 LOS_DL_HEAP_SIZE;否则返回 0。
|
|
|
#define LOS_SET_DL_NX_HEAP_SIZE(size)//设置内存保护机制的大小,该宏定义为空白,没有实际操作。
|
|
|
#else /* LOSCFG_KERNEL_NX */
|
|
|
#define LOS_GET_NX_CFG() false
|
|
|
#define LOS_SET_NX_CFG(value)
|
|
|
#define LOS_GET_DL_NX_HEAP_BASE() NULL
|
|
|
#define LOS_SET_DL_NX_HEAP_BASE(addr)
|
|
|
#define LOS_GET_DL_NX_HEAP_SIZE() 0
|
|
|
#define LOS_SET_DL_NX_HEAP_SIZE(size)
|
|
|
#endif /* LOSCFG_KERNEL_NX */
|
|
|
|
|
|
//这段代码是一系列宏定义,用于将一些配置参数映射到对应的宏定义。
|
|
|
//这样做的目的是将配置参数与代码解耦,使得修改配置参数时只需要修改相应的宏定义,而无需修改引用该参数的代码。这样可以提高代码的可维护性和可移植性。
|
|
|
#define KERNEL_TICK_PER_SECOND LOSCFG_BASE_CORE_TICK_PER_SECOND//如KERNEL_TICK_PER_SECOND宏定义为LOSCFG_BASE_CORE_TICK_PER_SECOND,意味着在代码中使用KERNEL_TICK_PER_SECOND时,实际上是使用了配置参数
|
|
|
#define KERNEL_TSK_LIMIT LOSCFG_BASE_CORE_TSK_LIMIT
|
|
|
#define KERNEL_TSK_MIN_STACK_SIZE LOSCFG_BASE_CORE_TSK_MIN_STACK_SIZE
|
|
|
#define KERNEL_TSK_DEFAULT_STACK_SIZE LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
|
|
|
#define KERNEL_TSK_IDLE_STACK_SIZE LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE
|
|
|
#define KERNEL_TSK_SWTMR_STACK_SIZE LOSCFG_BASE_CORE_TSK_SWTMR_STACK_SIZE
|
|
|
#define KERNEL_SWTMR_LIMIT LOSCFG_BASE_CORE_SWTMR_LIMIT
|
|
|
#define KERNEL_SEM_LIMIT LOSCFG_BASE_IPC_SEM_LIMIT
|
|
|
#define KERNEL_MUX_LIMIT LOSCFG_BASE_IPC_MUX_LIMIT
|
|
|
#define KERNEL_QUEUE_LIMIT LOSCFG_BASE_IPC_QUEUE_LIMIT
|
|
|
#define KERNEL_TIMESLICE_TIMEOUT LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT
|
|
|
//最后的#endif /* LOSCFG_LIB_CONFIGURABLE */表示这组宏定义的结束,在条件LOSCFG_LIB_CONFIGURABLE不成立时,这组宏定义不起作用,因为它们是在这个条件下定义的。
|
|
|
#endif /* LOSCFG_LIB_CONFIGURABLE */
|
|
|
|
|
|
/**
|
|
|
* system sections start and end address
|
|
|
*/
|
|
|
extern CHAR __int_stack_start;//内部栈的起始地址
|
|
|
extern CHAR __int_stack_end;//内部栈的结束地址
|
|
|
extern CHAR __rodata_start;//只读数据段的起始地址。
|
|
|
extern CHAR __rodata_end;//只读数据段的结束地址。
|
|
|
extern CHAR __bss_start;//未初始化的全局变量段(BSS Segment)的起始地址。
|
|
|
extern CHAR __bss_end;//未初始化的全局变量段(BSS Segment)的结束地址。
|
|
|
extern CHAR __text_start;//可执行代码段(Text Segment)的起始地址。
|
|
|
extern CHAR __text_end;//可执行代码段(Text Segment)的结束地址。
|
|
|
extern CHAR __ram_data_start;//RAM 数据段的起始地址。
|
|
|
extern CHAR __ram_data_end;//RAM 数据段的结束地址。
|
|
|
extern CHAR __exc_heap_start;//异常堆(Exception Heap)的起始地址。
|
|
|
extern CHAR __exc_heap_end;//异常堆(Exception Heap)的结束地址。
|
|
|
extern CHAR __heap_start;//堆(Heap)的起始地址。
|
|
|
extern CHAR __init_array_start__;//初始化数组的起始地址。
|
|
|
extern CHAR __init_array_end__; //初始化数组的结束地址。
|
|
|
|
|
|
/****************************** System clock module configuration ****************************/
|
|
|
/**
|
|
|
* @ingroup los_config
|
|
|
* System clock (unit: HZ)
|
|
|
*/
|
|
|
#ifndef OS_SYS_CLOCK
|
|
|
#define OS_SYS_CLOCK (get_bus_clk())//定义系统时钟频率,默认值为get_bus_clk()
|
|
|
#endif
|
|
|
/**
|
|
|
* @ingroup los_config
|
|
|
* time timer clock (unit: HZ)
|
|
|
*/
|
|
|
#ifndef OS_TIME_TIMER_CLOCK
|
|
|
#define OS_TIME_TIMER_CLOCK OS_SYS_CLOCK//定义定时器时钟频率,默认值为 OS_SYS_CLOCK
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* limit addr range when search for 'func local(frame pointer)' or 'func name'
|
|
|
*/
|
|
|
#ifndef OS_SYS_FUNC_ADDR_START
|
|
|
#define OS_SYS_FUNC_ADDR_START ((UINTPTR)&__int_stack_start)//定义函数起始地址,默认值为&__int_stack_start
|
|
|
#endif
|
|
|
#ifndef OS_SYS_FUNC_ADDR_END
|
|
|
#define OS_SYS_FUNC_ADDR_END g_sys_mem_addr_end//定义函数终止地址,默认值为g_sys_mem_addr_end
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* @ingroup los_config
|
|
|
* Microseconds of adjtime in one second
|
|
|
*/
|
|
|
#ifndef LOSCFG_BASE_CORE_ADJ_PER_SECOND
|
|
|
#define LOSCFG_BASE_CORE_ADJ_PER_SECOND 500//每秒钟的微调时间。如果没有定义过LOSCFG_BASE_CORE_ADJ_PER_SECOND,则将其定义为500。这意味着系统在进行时间微调时,每秒钟可以微调500微秒。
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* @ingroup los_config
|
|
|
* Sched clck interval
|
|
|
*/
|
|
|
#define SCHED_CLOCK_INTETRVAL_TICKS 100//表示调度时钟的间隔。这个宏定义的值为100,表示调度时钟的间隔为100个时钟节拍。
|
|
|
|
|
|
/****************************** Interrupt module configuration ****************************/
|
|
|
/**
|
|
|
* @ingroup los_hwi
|
|
|
* The macro is the binary point value that decides the maximum preemption level
|
|
|
* when LOSCFG_ARCH_INTERRUPT_PREEMPTION is defined. If preemption supported, the
|
|
|
* config value is [0, 1, 2, 3, 4, 5, 6], to the corresponding preemption level value
|
|
|
* is [128, 64, 32, 16, 8, 4, 2].
|
|
|
*/
|
|
|
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
|
|
|
#ifndef MAX_BINARY_POINT_VALUE
|
|
|
#define MAX_BINARY_POINT_VALUE 4//使用条件编译来检查是否已经定义了MAX_BINARY_POINT_VALUE宏。如果没有定义,则将其定义为4。
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
/****************************** Swtmr module configuration ********************************/
|
|
|
#ifdef LOSCFG_BASE_IPC_QUEUE
|
|
|
/**
|
|
|
* @ingroup los_swtmr
|
|
|
* Max number of software timers ID
|
|
|
*
|
|
|
* 0xFFFF: max number of all software timers
|
|
|
*/
|
|
|
#ifndef OS_SWTMR_MAX_TIMERID
|
|
|
/*表示软件定时器ID的最大数量。
|
|
|
默认值为((0xFFFF / KERNEL_SWTMR_LIMIT) * KERNEL_SWTMR_LIMIT),
|
|
|
其中KERNEL_SWTMR_LIMIT表示系统中每个任务可以创建的最大软件定时器数。
|
|
|
这个宏定义的作用是将可用的ID数量限制在一个整数倍的软件定时器数范围内,
|
|
|
这样可以更好地利用ID资源。*/
|
|
|
#define OS_SWTMR_MAX_TIMERID ((0xFFFF / KERNEL_SWTMR_LIMIT) * KERNEL_SWTMR_LIMIT)
|
|
|
#endif
|
|
|
/**
|
|
|
* @ingroup los_swtmr
|
|
|
* Maximum size of a software timer queue. The default value of LOSCFG_BASE_CORE_SWTMR_LIMIT is 16.
|
|
|
*/
|
|
|
#ifndef OS_SWTMR_HANDLE_QUEUE_SIZE
|
|
|
/*示软件定时器队列的最大大小。
|
|
|
默认值为KERNEL_SWTMR_LIMIT,
|
|
|
也就是系统中每个任务可以同时管理的软件定时器数。
|
|
|
这个宏定义的作用是限制任务能够管理的软件定时器数量,
|
|
|
以避免资源浪费和性能问题。*/
|
|
|
#define OS_SWTMR_HANDLE_QUEUE_SIZE KERNEL_SWTMR_LIMIT
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
/****************************** Memory module configuration **************************/
|
|
|
/**
|
|
|
* @ingroup los_memory
|
|
|
* Starting address of the system memory
|
|
|
*/
|
|
|
#ifndef OS_SYS_MEM_ADDR
|
|
|
/*__heap_start是在链接脚本中定义的符号,
|
|
|
表示内存池的起始地址。
|
|
|
因此,OS_SYS_MEM_ADDR的值就是内存池的起始地址的指针,
|
|
|
可以通过该宏来访问系统内存池。*/
|
|
|
#define OS_SYS_MEM_ADDR (&__heap_start)
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* @ingroup los_dynload
|
|
|
* Size of Dynload heap in bytes (1MB = 0x100000 Bytes)
|
|
|
* Starting address of dynload heap
|
|
|
*/
|
|
|
#if defined (LOSCFG_KERNEL_NX) && defined (LOSCFG_KERNEL_DYNLOAD)
|
|
|
//如果这两个宏都被定义了,那么将动态加载模块堆的大小定义为
|
|
|
#define LOS_DL_HEAP_SIZE (LOSCFG_KERNLE_DYN_HEAPSIZE * 0x100000)//(LOSCFG_KERNLE_DYN_HEAPSIZE * 0x100000)
|
|
|
#define LOS_DL_HEAP_BASE (SYS_MEM_END - LOS_DL_HEAP_SIZE)//SYS_MEM_END - LOS_DL_HEAP_SIZE,其中SYS_MEM_END表示系统内存池的结束地址
|
|
|
#else
|
|
|
//如果没有定义LOSCFG_KERNEL_NX和LOSCFG_KERNEL_DYNLOAD宏,则将动态加载模块堆的大小和起始地址都定义为0。
|
|
|
#define LOS_DL_HEAP_SIZE 0
|
|
|
#define LOS_DL_HEAP_BASE 0
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* @ingroup los_memory
|
|
|
* Memory size
|
|
|
*/
|
|
|
#ifndef OS_SYS_MEM_SIZE
|
|
|
#define OS_SYS_MEM_SIZE ((g_sys_mem_addr_end) - \
|
|
|
((LOS_DL_HEAP_SIZE + ((UINTPTR)&__heap_start) + (64 - 1)) & ~(64 - 1)))//定义内存池的大小
|
|
|
#endif
|
|
|
|
|
|
/****************************** fw Interface configuration **************************/
|
|
|
/**
|
|
|
* @ingroup los_config
|
|
|
* The core number is one in non-SMP architecture.
|
|
|
*/
|
|
|
#ifdef LOSCFG_KERNEL_SMP
|
|
|
//LOSCFG_KERNEL_CORE_NUM 将被设置为 LOSCFG_KERNEL_SMP_CORE_NUM 的值;否则,LOSCFG_KERNEL_CORE_NUM 将被设置为 1。
|
|
|
#define LOSCFG_KERNEL_CORE_NUM LOSCFG_KERNEL_SMP_CORE_NUM
|
|
|
#else
|
|
|
#define LOSCFG_KERNEL_CORE_NUM 1
|
|
|
#endif
|
|
|
//LOSCFG_KERNEL_CPU_MASK 被定义为用于表示 CPU 核心掩码的表达式。它使用了位运算,通过将 1 左移 LOSCFG_KERNEL_CORE_NUM 位,然后减去 1,来生成一个包含 LOSCFG_KERNEL_CORE_NUM 个 1 的二进制数。这个数字通常用于设置 CPU 亲和性,以确定线程可以运行在哪些 CPU 核心上。
|
|
|
#define LOSCFG_KERNEL_CPU_MASK ((1 << LOSCFG_KERNEL_CORE_NUM) - 1)
|
|
|
|
|
|
/****************************** trace module configuration **************************/
|
|
|
/**
|
|
|
* @ingroup los_trace
|
|
|
* It's the total size of trace buffer. Its unit is char.
|
|
|
*/
|
|
|
#ifdef LOSCFG_KERNEL_TRACE
|
|
|
#ifdef LOSCFG_RECORDER_MODE_OFFLINE
|
|
|
/*LOSCFG_KERNEL_TRACE 被定义的情况下,该代码块会被编译。
|
|
|
如果同时定义了 LOSCFG_RECORDER_MODE_OFFLINE,
|
|
|
则 LOSTRACE_BUFFER_SIZE 会被设置为 LOSCFG_TRACE_BUFFER_SIZE 的值;
|
|
|
否则,LOSTRACE_BUFFER_SIZE 会被设置为 0。*/
|
|
|
#define LOS_TRACE_BUFFER_SIZE LOSCFG_TRACE_BUFFER_SIZE
|
|
|
#else
|
|
|
#define LOS_TRACE_BUFFER_SIZE 0
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
/****************************** perf module configuration **************************/
|
|
|
/**
|
|
|
* @ingroup los_perf
|
|
|
* It's the total size of perf buffer. It's in the unit of char
|
|
|
*/
|
|
|
#ifdef LOSCFG_KERNEL_PERF
|
|
|
#define LOS_PERF_BUFFER_SIZE 2048
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* Version number
|
|
|
*/
|
|
|
//这段代码是一组宏定义,用于定义操作系统的版本号和系统名称。
|
|
|
#define _T(x) x//宏定义将传入的参数 x 原样返回,用于在宏定义中表示字符串。
|
|
|
#define HW_LITEOS_SYSNAME "Huawei LiteOS"//宏定义为字符串 "Huawei LiteOS",表示操作系统的名称。
|
|
|
#define HW_LITEOS_SEP " "//宏定义为字符串 " ",表示名称和版本号之间的分隔符。
|
|
|
#define _V(v) _T(HW_LITEOS_SYSNAME)_T(HW_LITEOS_SEP)_T(v)//宏定义通过将操作系统名称和版本号连接起来,生成一个完整的版本字符串。
|
|
|
|
|
|
#define HW_LITEOS_VERSION "V200R005C20B053"//宏定义为字符串 "V200R005C20B053",表示操作系统的具体版本号。
|
|
|
#define HW_LITEOS_VER _V(HW_LITEOS_VERSION"-SMP")//宏定义使用了 _V 宏,将操作系统名称和版本号连接起来,形成类似 "Huawei LiteOS V200R005C20B053-SMP" 的完整版本号字符串。
|
|
|
|
|
|
/**
|
|
|
* The Version number of Public
|
|
|
*/
|
|
|
#define MAJ_V 5//宏定义为整数 5,表示操作系统的主要版本号。
|
|
|
#define MIN_V 1//宏定义为整数 1,表示操作系统的次要版本号。
|
|
|
#define REL_V 0//宏定义为整数 0,表示操作系统的发布版本号。
|
|
|
|
|
|
/**
|
|
|
* The release candidate version number
|
|
|
*/
|
|
|
//这些宏定义和函数声明用于管理操作系统的版本号,并提供了一种将版本号转换为字符串格式的机制。
|
|
|
#define EXTRA_V 0//宏定义为整数 0,表示操作系统的额外版本号或候选版本号。
|
|
|
|
|
|
#define VERSION_NUM(a, b, c) (((a) << 16) | ((b) << 8) | (c))//宏定义将主版本号 a、次版本号 b 和发布版本号 c 组合成一个无符号整数,通过位运算实现。
|
|
|
#define HW_LITEOS_OPEN_VERSION_NUM VERSION_NUM(MAJ_V, MIN_V, REL_V)// 宏定义使用了 VERSION_NUM 宏,将主版本号、次版本号和发布版本号组成一个表示版本号的无符号整数。
|
|
|
|
|
|
#define STRINGIFY_1(x) #x//宏定义将参数 x 转换为字符串。
|
|
|
#define STRINGIFY(x) STRINGIFY_1(x)//宏定义调用 STRINGIFY_1 宏,将参数转换为字符串。
|
|
|
|
|
|
#define HW_LITEOS_OPEN_VERSION_STRING STRINGIFY(MAJ_V) "." STRINGIFY(MIN_V) "." STRINGIFY(REL_V)//宏定义使用了 STRINGIFY 宏,将主版本号、次版本号和发布版本号转换为形如 "5.1.0" 的字符串格式。
|
|
|
#if (EXTRA_V != 0)
|
|
|
/*不等于 0,则 HW_LITEOS_KERNEL_VERSION_STRING 宏定义为带有候选版本号的版本字符串;
|
|
|
否则,它被定义为不带候选版本号的版本字符串。*/
|
|
|
#define HW_LITEOS_KERNEL_VERSION_STRING HW_LITEOS_OPEN_VERSION_STRING "-rc" STRINGIFY(EXTRA_V)
|
|
|
#else
|
|
|
#define HW_LITEOS_KERNEL_VERSION_STRING HW_LITEOS_OPEN_VERSION_STRING
|
|
|
#endif
|
|
|
|
|
|
//不等于 0,则 HW_LITEOS_KERNEL_VERSION_STRING 宏定义为带有候选版本号的版本字符串;否则,它被定义为不带候选版本号的版本字符串。
|
|
|
extern VOID OsStart(VOID);
|
|
|
extern UINT32 OsMain(VOID);
|
|
|
extern VOID *OsGetMainTask(VOID);
|
|
|
extern VOID OsSetMainTask(VOID);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
#if __cplusplus
|
|
|
}
|
|
|
#endif /* __cplusplus */
|
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#endif /* _LOS_CONFIG_H */
|