【LiteOS】小白进阶之系统移植配置解析

举报
产品人卫朋 发表于 2021/10/30 00:19:56 2021/10/30
3.3k+ 1 0
【摘要】 LiteOS 配置文件是操作系统移植的核心部分 - los_config.h。 1、配置时钟 系统时钟的配置,需要根据不同的 CPU 以及 CPU 初始化的时钟频率来修改: #define OS_SYS_CLOCK          &nbs...

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);
  
 

文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/liwei16611/article/details/86579256

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(1

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。