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
}

浙公网安备 33010602011771号