UcOs-III 源码阅读: os_cfg_app.c

/*


  •                                          uC/OS-III
    
  •                                    The Real-Time Kernel
    
  •                Copyright 2009-2022 Silicon Laboratories Inc. www.silabs.com
    
  •                             SPDX-License-Identifier: APACHE-2.0
    
  •           This software is subject to an open source license and is distributed by
    
  •            Silicon Laboratories Inc. pursuant to the terms of the Apache License,
    
  •                Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
    

*/

/*


  •                           操作系统配置(应用程序特定)
    
  • 文件 : os_cfg_app.c
  • 版本 : V3.08.02

  • 注意事项 : 不要修改此文件!

*/

define MICRIUM_SOURCE

include <os_cfg_app.h>

include "os.h"

ifdef VSC_INCLUDE_SOURCE_FILE_NAMES

// 如果定义了 VSC_INCLUDE_SOURCE_FILE_NAMES,则包含源文件名
const CPU_CHAR *os_cfg_app__c = "$Id: $";

endif

if (OS_CFG_TASK_IDLE_EN > 0u)

// 如果启用了空闲任务 (OS_CFG_TASK_IDLE_EN > 0),则定义空闲任务堆栈限制

define OS_CFG_IDLE_TASK_STK_LIMIT ((OS_CFG_IDLE_TASK_STK_SIZE * OS_CFG_TASK_STK_LIMIT_PCT_EMPTY) / 100u)

endif

if (OS_CFG_STAT_TASK_EN > 0u)

// 如果启用了统计任务 (OS_CFG_STAT_TASK_EN > 0),则定义统计任务堆栈限制

define OS_CFG_STAT_TASK_STK_LIMIT ((OS_CFG_STAT_TASK_STK_SIZE * OS_CFG_TASK_STK_LIMIT_PCT_EMPTY) / 100u)

endif

if (OS_CFG_TMR_EN > 0u)

// 如果启用了定时器任务 (OS_CFG_TMR_EN > 0),则定义定时器任务堆栈限制

define OS_CFG_TMR_TASK_STK_LIMIT ((OS_CFG_TMR_TASK_STK_SIZE * OS_CFG_TASK_STK_LIMIT_PCT_EMPTY) / 100u)

endif

/*


  •                                                数据存储
    

*/

if (OS_CFG_TASK_IDLE_EN > 0u)

// 如果启用了空闲任务 (OS_CFG_TASK_IDLE_EN > 0),则定义空闲任务堆栈
CPU_STK OSCfg_IdleTaskStk [OS_CFG_IDLE_TASK_STK_SIZE];

endif

if (OS_CFG_ISR_STK_SIZE > 0u)

// 如果定义了中断服务例程堆栈大小 (OS_CFG_ISR_STK_SIZE > 0),则定义中断服务例程堆栈
CPU_STK OSCfg_ISRStk [OS_CFG_ISR_STK_SIZE];

endif

if (OS_MSG_EN > 0u)

// 如果启用了消息功能 (OS_MSG_EN > 0),则定义消息池
OS_MSG OSCfg_MsgPool [OS_CFG_MSG_POOL_SIZE];

endif

if (OS_CFG_STAT_TASK_EN > 0u)

// 如果启用了统计任务 (OS_CFG_STAT_TASK_EN > 0),则定义统计任务堆栈
CPU_STK OSCfg_StatTaskStk [OS_CFG_STAT_TASK_STK_SIZE];

endif

if (OS_CFG_TMR_EN > 0u)

// 如果启用了定时器功能 (OS_CFG_TMR_EN > 0),则定义定时器任务堆栈
CPU_STK OSCfg_TmrTaskStk [OS_CFG_TMR_TASK_STK_SIZE];

endif

/*


  •                                                  常量
    

*/

if (OS_CFG_TASK_IDLE_EN > 0u)

// 如果启用了空闲任务 (OS_CFG_TASK_IDLE_EN > 0),则定义空闲任务堆栈基地址指针、堆栈限制、堆栈大小和堆栈在RAM中的大小
CPU_STK * const OSCfg_IdleTaskStkBasePtr = &OSCfg_IdleTaskStk[0];
CPU_STK_SIZE const OSCfg_IdleTaskStkLimit = OS_CFG_IDLE_TASK_STK_LIMIT;
CPU_STK_SIZE const OSCfg_IdleTaskStkSize = OS_CFG_IDLE_TASK_STK_SIZE;
CPU_INT32U const OSCfg_IdleTaskStkSizeRAM = sizeof(OSCfg_IdleTaskStk);

else

// 如果未启用空闲任务,则将相关变量设置为0或空指针
CPU_STK * const OSCfg_IdleTaskStkBasePtr = (CPU_STK *)0;
CPU_STK_SIZE const OSCfg_IdleTaskStkLimit = 0u;
CPU_STK_SIZE const OSCfg_IdleTaskStkSize = 0u;
CPU_INT32U const OSCfg_IdleTaskStkSizeRAM = 0u;

endif

if (OS_CFG_ISR_STK_SIZE > 0u)

// 如果定义了中断服务例程堆栈大小 (OS_CFG_ISR_STK_SIZE > 0),则定义中断服务例程堆栈基地址指针、堆栈大小和堆栈在RAM中的大小
CPU_STK * const OSCfg_ISRStkBasePtr = &OSCfg_ISRStk[0];
CPU_STK_SIZE const OSCfg_ISRStkSize = OS_CFG_ISR_STK_SIZE;
CPU_INT32U const OSCfg_ISRStkSizeRAM = sizeof(OSCfg_ISRStk);

else

// 如果未定义中断服务例程堆栈大小,则将相关变量设置为0或空指针
CPU_STK * const OSCfg_ISRStkBasePtr = (CPU_STK *)0;
CPU_STK_SIZE const OSCfg_ISRStkSize = 0u;
CPU_INT32U const OSCfg_ISRStkSizeRAM = 0u;

endif

if (OS_MSG_EN > 0u)

// 如果启用了消息功能 (OS_MSG_EN > 0),则定义消息池大小、消息池在RAM中的大小和消息池基地址指针
OS_MSG_SIZE const OSCfg_MsgPoolSize = OS_CFG_MSG_POOL_SIZE;
CPU_INT32U const OSCfg_MsgPoolSizeRAM = sizeof(OSCfg_MsgPool);
OS_MSG * const OSCfg_MsgPoolBasePtr = &OSCfg_MsgPool[0];

else

// 如果未启用消息功能,则将相关变量设置为0或空指针
OS_MSG_SIZE const OSCfg_MsgPoolSize = 0u;
CPU_INT32U const OSCfg_MsgPoolSizeRAM = 0u;
OS_MSG * const OSCfg_MsgPoolBasePtr = (OS_MSG *)0;

endif

if (OS_CFG_STAT_TASK_EN > 0u)

// 如果启用了统计任务 (OS_CFG_STAT_TASK_EN > 0),则定义统计任务优先级、执行频率、堆栈基地址指针、堆栈限制、堆栈大小和堆栈在RAM中的大小
OS_PRIO const OSCfg_StatTaskPrio = OS_CFG_STAT_TASK_PRIO;
OS_RATE_HZ const OSCfg_StatTaskRate_Hz = OS_CFG_STAT_TASK_RATE_HZ;
CPU_STK * const OSCfg_StatTaskStkBasePtr = &OSCfg_StatTaskStk[0];
CPU_STK_SIZE const OSCfg_StatTaskStkLimit = OS_CFG_STAT_TASK_STK_LIMIT;
CPU_STK_SIZE const OSCfg_StatTaskStkSize = OS_CFG_STAT_TASK_STK_SIZE;
CPU_INT32U const OSCfg_StatTaskStkSizeRAM = sizeof(OSCfg_StatTaskStk);

else

// 如果未启用统计任务,则将相关变量设置为0或空指针
OS_PRIO const OSCfg_StatTaskPrio = 0u;
OS_RATE_HZ const OSCfg_StatTaskRate_Hz = 0u;
CPU_STK * const OSCfg_StatTaskStkBasePtr = (CPU_STK *)0;
CPU_STK_SIZE const OSCfg_StatTaskStkLimit = 0u;
CPU_STK_SIZE const OSCfg_StatTaskStkSize = 0u;
CPU_INT32U const OSCfg_StatTaskStkSizeRAM = 0u;

endif

// 定义最小堆栈大小
CPU_STK_SIZE const OSCfg_StkSizeMin = OS_CFG_STK_SIZE_MIN;

if (OS_CFG_TICK_EN > 0u)

// 如果启用了系统滴答 (OS_CFG_TICK_EN > 0),则定义系统滴答频率
OS_RATE_HZ const OSCfg_TickRate_Hz = OS_CFG_TICK_RATE_HZ;

else

// 如果未启用系统滴答,则将系统滴答频率设置为0
OS_RATE_HZ const OSCfg_TickRate_Hz = 0u;

endif

if (OS_CFG_TMR_EN > 0u)

// 如果启用了定时器功能 (OS_CFG_TMR_EN > 0),则定义定时器任务优先级、执行频率、堆栈基地址指针、堆栈限制、堆栈大小和堆栈在RAM中的大小
OS_PRIO const OSCfg_TmrTaskPrio = OS_CFG_TMR_TASK_PRIO;
OS_RATE_HZ const OSCfg_TmrTaskRate_Hz = OS_CFG_TMR_TASK_RATE_HZ;
CPU_STK * const OSCfg_TmrTaskStkBasePtr = &OSCfg_TmrTaskStk[0];
CPU_STK_SIZE const OSCfg_TmrTaskStkLimit = OS_CFG_TMR_TASK_STK_LIMIT;
CPU_STK_SIZE const OSCfg_TmrTaskStkSize = OS_CFG_TMR_TASK_STK_SIZE;
CPU_INT32U const OSCfg_TmrTaskStkSizeRAM = sizeof(OSCfg_TmrTaskStk);

else

// 如果未启用定时器功能,则将相关变量设置为0或空指针
OS_PRIO const OSCfg_TmrTaskPrio = 0u;
OS_RATE_HZ const OSCfg_TmrTaskRate_Hz = 0u;
CPU_STK * const OSCfg_TmrTaskStkBasePtr = (CPU_STK *)0;
CPU_STK_SIZE const OSCfg_TmrTaskStkLimit = 0u;
CPU_STK_SIZE const OSCfg_TmrTaskStkSize = 0u;
CPU_INT32U const OSCfg_TmrTaskStkSizeRAM = 0u;

endif

/*


  •                                     应用程序配置的总大小
    

*/

CPU_INT32U const OSCfg_DataSizeRAM = 0u

if (OS_CFG_TASK_IDLE_EN > 0u)

// 如果启用了空闲任务 (OS_CFG_TASK_IDLE_EN > 0),则加上空闲任务堆栈的大小
+ sizeof(OSCfg_IdleTaskStk)

endif

if (OS_MSG_EN > 0u)

// 如果启用了消息功能 (OS_MSG_EN > 0),则加上消息池的大小
+ sizeof(OSCfg_MsgPool)

endif

if (OS_CFG_STAT_TASK_EN > 0u)

// 如果启用了统计任务 (OS_CFG_STAT_TASK_EN > 0),则加上统计任务堆栈的大小
+ sizeof(OSCfg_StatTaskStk)

endif

if (OS_CFG_TMR_EN > 0u)

// 如果启用了定时器功能 (OS_CFG_TMR_EN > 0),则加上定时器任务堆栈的大小
+ sizeof(OSCfg_TmrTaskStk)

endif

if (OS_CFG_ISR_STK_SIZE > 0u)

// 如果定义了中断服务例程堆栈大小 (OS_CFG_ISR_STK_SIZE > 0),则加上中断服务例程堆栈的大小
+ sizeof(OSCfg_ISRStk)

endif

// 最后加上一个常量0,确保表达式的完整性
+ 0u;

/*


  •                                         操作系统配置初始化
    
  • 描述: 此函数用于确保应用程序中未使用的调试变量不会被优化掉。此函数可能不是所有编译器都需要。在这种情况下,您应该删除此函数中的代码,但仍保留函数本身的声明。
  • 参数: 无
  • 返回: 无
  • 注意: (1) 此代码不执行任何操作,它只是防止编译器优化掉在此文件中声明的 'const' 变量。
  •   (2) 如果您的编译器不会优化掉上述的 'const' 变量,您可以选择在函数内部使用 #if 0/#endif 将代码编译出去。
    

*/

void OSCfg_Init (void)
{
// 确保 OSCfg_DataSizeRAM 不被优化掉
(void)OSCfg_DataSizeRAM;

if (OS_CFG_TASK_IDLE_EN > 0u)

// 如果启用了空闲任务 (OS_CFG_TASK_IDLE_EN > 0),确保以下变量不被优化掉
(void)OSCfg_IdleTaskStkBasePtr;
(void)OSCfg_IdleTaskStkLimit;
(void)OSCfg_IdleTaskStkSize;
(void)OSCfg_IdleTaskStkSizeRAM;

endif

// 确保中断服务例程堆栈相关的变量不被优化掉
(void)OSCfg_ISRStkBasePtr;
(void)OSCfg_ISRStkSize;
(void)OSCfg_ISRStkSizeRAM;

if (OS_MSG_EN > 0u)

// 如果启用了消息功能 (OS_MSG_EN > 0),确保以下变量不被优化掉
(void)OSCfg_MsgPoolSize;
(void)OSCfg_MsgPoolSizeRAM;
(void)OSCfg_MsgPoolBasePtr;

endif

if (OS_CFG_STAT_TASK_EN > 0u)

// 如果启用了统计任务 (OS_CFG_STAT_TASK_EN > 0),确保以下变量不被优化掉
(void)OSCfg_StatTaskPrio;
(void)OSCfg_StatTaskRate_Hz;
(void)OSCfg_StatTaskStkBasePtr;
(void)OSCfg_StatTaskStkLimit;
(void)OSCfg_StatTaskStkSize;
(void)OSCfg_StatTaskStkSizeRAM;

endif

// 确保最小堆栈大小的变量不被优化掉
(void)OSCfg_StkSizeMin;

if (OS_CFG_TICK_EN > 0u)

// 如果启用了系统滴答 (OS_CFG_TICK_EN > 0),确保以下变量不被优化掉
(void)OSCfg_TickRate_Hz;

endif

if (OS_CFG_TMR_EN > 0u)

// 如果启用了定时器功能 (OS_CFG_TMR_EN > 0),确保以下变量不被优化掉
(void)OSCfg_TmrTaskPrio;
(void)OSCfg_TmrTaskRate_Hz;
(void)OSCfg_TmrTaskStkBasePtr;
(void)OSCfg_TmrTaskStkLimit;
(void)OSCfg_TmrTaskStkSize;
(void)OSCfg_TmrTaskStkSizeRAM;

endif

}

posted @ 2024-11-02 12:58  炽杨  阅读(62)  评论(0)    收藏  举报