博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LiteOS los_config.h说明
阅读量:4297 次
发布时间:2019-05-27

本文共 4854 字,大约阅读时间需要 16 分钟。

LiteOS 配置文件是操作系统移植的核心部分 - los_config.h。

1、配置时钟

系统时钟的配置,需要根据不同的 CPU 以及 CPU 初始化的时钟频率来修改:

#define OS_SYS_CLOCK                                   16000000            

2、地址配置

extern char __data_end;

extern char __bss_start;
#define OS_SYS_FUNC_ADDR_START                        &__bss_start
#define OS_SYS_FUNC_ADDR_END                          &__data_end
3、RAM 配置

RAM_SIZE_LEVEL_0means kernel ram < 8k  , 

RAM_SIZE_LEVEL_1means kernel ram < 16k, 
RAM_SIZE_LEVEL_2means means kernel ram>=32k 
4、滴答定时器

#define LOSCFG_BASE_CORE_TICK_PER_SECOND               1000               // 这里是指 1 秒钟的滴答数,1000 是固定的

5、中断配置

硬件中断的初始化为什么跟 RAM 大小有关,说明硬件中断的管理需要耗费一定 RAM,可做裁剪。

#if defined (RAM_SIZE_LEVEL_0)

#define LOSCFG_PLATFORM_HWI                            NO
#elif defined(RAM_SIZE_LEVEL_1)
#define LOSCFG_PLATFORM_HWI                            YES
#elif defined(RAM_SIZE_LEVEL_2)
#define LOSCFG_PLATFORM_HWI                            YES
#else
#define LOSCFG_PLATFORM_HWI                            YES
#endif                                                      
 
#define LOSCFG_PLATFORM_HWI_LIMIT                      96            // 硬件中断的最多数量
6、任务相关配置

基本内核任务优先级。

#define LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO              10     

 
#if defined (RAM_SIZE_LEVEL_0)
#define LOSCFG_BASE_CORE_TSK_LIMIT                     4             // max num task
#elif defined (RAM_SIZE_LEVEL_1)
#define LOSCFG_BASE_CORE_TSK_LIMIT                     7             // max num task
#elif defined (RAM_SIZE_LEVEL_2)
#define LOSCFG_BASE_CORE_TSK_LIMIT                     15             // max num task
#else
#define LOSCFG_BASE_CORE_TSK_LIMIT                     15             // max num task
#endif
内核空闲任务的堆栈大小:

#if defined (RAM_SIZE_LEVEL_0)

#define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x2D0)     // IDLE task stack
#elif defined (RAM_SIZE_LEVEL_1)
#define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x300)     // IDLE task stack
#elif defined (RAM_SIZE_LEVEL_2)
#define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x500)     // IDLE task stack
#else
#define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x500)     // IDLE task stack
#endif                
默认任务大小:

#if defined (RAM_SIZE_LEVEL_0)

#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x200)     // default stack
#elif defined (RAM_SIZE_LEVEL_1)
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE         SIZE(0x2D0)    // default stack
#elif defined (RAM_SIZE_LEVEL_2)
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x2D0)     // default stack
#else
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x2D0)     // default stack
#endif             
 
#define LOS_TASK_MIN_STACK_SIZE                         (ALIGN(0x130, 16))  //最小任务堆栈大小,用于创建任务时检测
 
#define LOSCFG_BASE_CORE_TIMESLICE                      YES             // task-ROBIN moduel cuttingswitch
 
#define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT              10              // 同一优先级最长运行时间
 
#define LOSCFG_BASE_CORE_TSK_MONITOR                    YES             // 任务的监测功能是不是要开启
 
#define OS_INCLUDE_PERF                                 YES             // 性能检测使能
 
#define LOS_TASK_PRIORITY_HIGHEST                       0               // 最大优先级
 
#define LOS_TASK_PRIORITY_LOWEST                        31              // 最小优先级
7、信号量配置

#define LOSCFG_BASE_IPC_SEM                             YES

 
#if defined (RAM_SIZE_LEVEL_0)
 
#define LOSCFG_BASE_IPC_SEM_LIMIT                       5              // the max sem-numb
 
#else
 
#define LOSCFG_BASE_IPC_SEM_LIMIT                       10              // the max sem-numb
 
#endif
8、互斥锁配置

#define LOSCFG_BASE_IPC_MUX                             YES

 
#if defined (RAM_SIZE_LEVEL_0)
 
#define LOSCFG_BASE_IPC_MUX_LIMIT                       5              // the max mutex-num
 
#else
 
#define LOSCFG_BASE_IPC_MUX_LIMIT                       10              // the max mutex-num
 
#endif
9、消息队列配置

#define LOSCFG_BASE_IPC_QUEUE                           YES

 
#if defined (RAM_SIZE_LEVEL_0)
 
#define LOSCFG_BASE_IPC_QUEUE_LIMIT                     5             //the max queue-numb
 
#elif defined (RAM_SIZE_LEVEL_1)
 
#define LOSCFG_BASE_IPC_QUEUE_LIMIT                     7              //the max queue-numb
 
#elif defined (RAM_SIZE_LEVEL_2)
 
#define LOSCFG_BASE_IPC_QUEUE_LIMIT                     10              //the max queue-numb
 
#else
 
#define LOSCFG_BASE_IPC_QUEUE_LIMIT                     10              //the max queue-numb
 
#endif
10、软件定时器配置

#define LOSCFG_BASE_CORE_SWTMR                          YES

 
#if defined (RAM_SIZE_LEVEL_0)
 
#define LOSCFG_BASE_CORE_SWTMR_LIMIT                    4                                      // the max SWTMR numb
 
#elif defined (RAM_SIZE_LEVEL_1)
 
#define LOSCFG_BASE_CORE_SWTMR_LIMIT                    7                                      // the max SWTMR numb
 
#elif defined (RAM_SIZE_LEVEL_2)
 
#define LOSCFG_BASE_CORE_SWTMR_LIMIT                    16                                             // the max SWTMR numb
 
#else
 
#define LOSCFG_BASE_CORE_SWTMR_LIMIT                    16                                             // the max SWTMR numb
 
#endif
 
#define OS_SWTMR_MAX_TIMERID                           ((65535/LOSCFG_BASE_CORE_SWTMR_LIMIT) * LOSCFG_BASE_CORE_SWTMR_LIMIT)
 
#define OS_SWTMR_HANDLE_QUEUE_SIZE                     (LOSCFG_BASE_CORE_SWTMR_LIMIT + 0)
 
#define LOS_COMMON_DIVISOR                             10
 
#endif
11、接口配置

#define LOSCFG_COMPAT_CMSIS_FW                          YES

 
#define VER                                             "Huawei LiteOS KernelV100R001c00B021"
 
#define OS_SR_WAKEUP_INFO                                   YES   //配置唤醒信息,应该是通过串口打印,可裁剪
 
#ifndef LOSCFG_LIB_LIBC
 
#define LOSCFG_LIB_LIBC
 
#endif
 
extern UINT32 osTaskInit(VOID);
 
extern VOID osHwiInit(void);
 
extern UINT32 osSemInit(void);
 
extern UINT32 osMuxInit(void);
 
extern UINT32 osQueueInit(void);
 
extern UINT32 osSwTmrInit(void);
 
extern VOID LOS_StartToRun(VOID);
 
extern UINT32 los_TestInit(VOID);
 
extern VOID  osStart(void);
 
extern VOID  osHwInit(VOID);
 
extern VOID osRegister(VOID);
 
extern int osMain(void);
 
extern int LOS_KernelInit(void);
 
extern UINT32 LOS_EnableTick(void);
 
extern UINT32 LOS_Start(void);
 
extern UINT32 osTickStart(VOID);
 
extern VOID osTimesliceInit(VOID);
 
extern UINT32 osMemSystemInit(VOID);
 
extern VOID osTaskMonInit(VOID);
 
extern UINT32 osCpupInit(VOID);
 
extern void osBackTrace(VOID);
 
————————————————
版权声明:本文为CSDN博主「简一商业」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liwei16611/article/details/86579256

你可能感兴趣的文章
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>