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

举报
产品人卫朋 发表于 2021/10/30 00:19:56 2021/10/30
【摘要】 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、地址配置


  
  1. extern char __data_end;
  2. extern char __bss_start;
  3. #define OS_SYS_FUNC_ADDR_START                        &__bss_start
  4. #define OS_SYS_FUNC_ADDR_END                          &__data_end

3、RAM 配置


  
  1. RAM_SIZE_LEVEL_0means kernel ram < 8k  , 
  2. RAM_SIZE_LEVEL_1means kernel ram < 16k, 
  3. RAM_SIZE_LEVEL_2means means kernel ram>=32k 

4、滴答定时器

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

5、中断配置

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


  
  1. #if defined (RAM_SIZE_LEVEL_0)
  2. #define LOSCFG_PLATFORM_HWI                            NO
  3. #elif defined(RAM_SIZE_LEVEL_1)
  4. #define LOSCFG_PLATFORM_HWI                            YES
  5. #elif defined(RAM_SIZE_LEVEL_2)
  6. #define LOSCFG_PLATFORM_HWI                            YES
  7. #else
  8. #define LOSCFG_PLATFORM_HWI                            YES
  9. #endif                                                      
  10. #define LOSCFG_PLATFORM_HWI_LIMIT                      96            // 硬件中断的最多数量

6、任务相关配置

基本内核任务优先级。


  
  1. #define LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO              10     
  2. #if defined (RAM_SIZE_LEVEL_0)
  3. #define LOSCFG_BASE_CORE_TSK_LIMIT                     4             // max num task
  4. #elif defined (RAM_SIZE_LEVEL_1)
  5. #define LOSCFG_BASE_CORE_TSK_LIMIT                     7             // max num task
  6. #elif defined (RAM_SIZE_LEVEL_2)
  7. #define LOSCFG_BASE_CORE_TSK_LIMIT                     15             // max num task
  8. #else
  9. #define LOSCFG_BASE_CORE_TSK_LIMIT                     15             // max num task
  10. #endif

内核空闲任务的堆栈大小:


  
  1. #if defined (RAM_SIZE_LEVEL_0)
  2. #define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x2D0)     // IDLE task stack
  3. #elif defined (RAM_SIZE_LEVEL_1)
  4. #define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x300)     // IDLE task stack
  5. #elif defined (RAM_SIZE_LEVEL_2)
  6. #define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x500)     // IDLE task stack
  7. #else
  8. #define LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE           SIZE(0x500)     // IDLE task stack
  9. #endif                

默认任务大小:


  
  1. #if defined (RAM_SIZE_LEVEL_0)
  2. #define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x200)     // default stack
  3. #elif defined (RAM_SIZE_LEVEL_1)
  4. #define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE         SIZE(0x2D0)    // default stack
  5. #elif defined (RAM_SIZE_LEVEL_2)
  6. #define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x2D0)     // default stack
  7. #else
  8. #define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE        SIZE(0x2D0)     // default stack
  9. #endif             
  10. #define LOS_TASK_MIN_STACK_SIZE                         (ALIGN(0x130, 16))  //最小任务堆栈大小,用于创建任务时检测
  11. #define LOSCFG_BASE_CORE_TIMESLICE                      YES             // task-ROBIN moduel cuttingswitch
  12. #define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT              10              // 同一优先级最长运行时间
  13. #define LOSCFG_BASE_CORE_TSK_MONITOR                    YES             // 任务的监测功能是不是要开启
  14. #define OS_INCLUDE_PERF                                 YES             // 性能检测使能
  15. #define LOS_TASK_PRIORITY_HIGHEST                       0               // 最大优先级
  16.  
  17. #define LOS_TASK_PRIORITY_LOWEST                        31              // 最小优先级

7、信号量配置


  
  1. #define LOSCFG_BASE_IPC_SEM                             YES
  2. #if defined (RAM_SIZE_LEVEL_0)
  3. #define LOSCFG_BASE_IPC_SEM_LIMIT                       5              // the max sem-numb
  4. #else
  5. #define LOSCFG_BASE_IPC_SEM_LIMIT                       10              // the max sem-numb
  6. #endif

8、互斥锁配置


  
  1. #define LOSCFG_BASE_IPC_MUX                             YES
  2. #if defined (RAM_SIZE_LEVEL_0)
  3. #define LOSCFG_BASE_IPC_MUX_LIMIT                       5              // the max mutex-num
  4. #else
  5. #define LOSCFG_BASE_IPC_MUX_LIMIT                       10              // the max mutex-num
  6. #endif

9、消息队列配置


  
  1. #define LOSCFG_BASE_IPC_QUEUE                           YES
  2. #if defined (RAM_SIZE_LEVEL_0)
  3. #define LOSCFG_BASE_IPC_QUEUE_LIMIT                     5             //the max queue-numb
  4. #elif defined (RAM_SIZE_LEVEL_1)
  5. #define LOSCFG_BASE_IPC_QUEUE_LIMIT                     7              //the max queue-numb
  6. #elif defined (RAM_SIZE_LEVEL_2)
  7. #define LOSCFG_BASE_IPC_QUEUE_LIMIT                     10              //the max queue-numb
  8. #else
  9. #define LOSCFG_BASE_IPC_QUEUE_LIMIT                     10              //the max queue-numb
  10. #endif

10、软件定时器配置


  
  1. #define LOSCFG_BASE_CORE_SWTMR                          YES
  2. #if defined (RAM_SIZE_LEVEL_0)
  3. #define LOSCFG_BASE_CORE_SWTMR_LIMIT                    4                                      // the max SWTMR numb
  4. #elif defined (RAM_SIZE_LEVEL_1)
  5. #define LOSCFG_BASE_CORE_SWTMR_LIMIT                    7                                      // the max SWTMR numb
  6. #elif defined (RAM_SIZE_LEVEL_2)
  7. #define LOSCFG_BASE_CORE_SWTMR_LIMIT                    16                                             // the max SWTMR numb
  8. #else
  9. #define LOSCFG_BASE_CORE_SWTMR_LIMIT                    16                                             // the max SWTMR numb
  10. #endif
  11. #define OS_SWTMR_MAX_TIMERID                           ((65535/LOSCFG_BASE_CORE_SWTMR_LIMIT) * LOSCFG_BASE_CORE_SWTMR_LIMIT)
  12. #define OS_SWTMR_HANDLE_QUEUE_SIZE                     (LOSCFG_BASE_CORE_SWTMR_LIMIT + 0)
  13. #define LOS_COMMON_DIVISOR                             10
  14. #endif

11、接口配置


  
  1. #define LOSCFG_COMPAT_CMSIS_FW                          YES
  2. #define VER                                             "Huawei LiteOS KernelV100R001c00B021"
  3. #define OS_SR_WAKEUP_INFO                                   YES   //配置唤醒信息,应该是通过串口打印,可裁剪
  4. #ifndef LOSCFG_LIB_LIBC
  5. #define LOSCFG_LIB_LIBC
  6. #endif
  7. extern UINT32 osTaskInit(VOID);
  8. extern VOID osHwiInit(void);
  9. extern UINT32 osSemInit(void);
  10. extern UINT32 osMuxInit(void);
  11. extern UINT32 osQueueInit(void);
  12. extern UINT32 osSwTmrInit(void);
  13. extern VOID LOS_StartToRun(VOID);
  14. extern UINT32 los_TestInit(VOID);
  15. extern VOID  osStart(void);
  16. extern VOID  osHwInit(VOID);
  17. extern VOID osRegister(VOID);
  18. extern int osMain(void);
  19. extern int LOS_KernelInit(void);
  20. extern UINT32 LOS_EnableTick(void);
  21. extern UINT32 LOS_Start(void);
  22. extern UINT32 osTickStart(VOID);
  23. extern VOID osTimesliceInit(VOID);
  24. extern UINT32 osMemSystemInit(VOID);
  25. extern VOID osTaskMonInit(VOID);
  26. extern UINT32 osCpupInit(VOID);
  27. extern void osBackTrace(VOID);

 

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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