Files
cosyos/Config/syscfg.h
T
零中断延迟的RTOS d5dca7c8bb update Config/syscfg.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2025-02-25 04:52:29 +00:00

432 lines
18 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**************************************************************************//**
* @item CosyOS-III Config
* @file syscfg.h
* @brief OS Config File
* @author 迟凯峰
* @version V1.0.2
* @date 2025.02.25
******************************************************************************/
#ifndef __SYSCFG_H
#define __SYSCFG_H
#include "..\System\os_def.h"
///////////////////////////////////////////////////////////////////////////////
//*** <<< Use Configuration Wizard in Context Menu >>> ***//
///////////////////////////////////////////////////////////////////////////////
// <h> 系统设置
// <i> 系统设置
// <o> MCU内核
// <0=> 8051 <1=> 80251 <2=> Cortex-M
// <i> 告知CosyOS您的MCU内核,CosyOS将自动包含相匹配的MCU配置文件。
#define __SYSCFG_MCUCORE 0
// <s> 标准头文件
// <i> 定义与您的MCU相匹配的标准头文件,您的c文件中不必再包含此文件。
// <i> 示例一:STC8H.H
// <i> 示例二:..\MCU\STC8H.H,此种包含路径的写法,在图形用户界面输入有时会出问题,可在文本编辑界面中定义或加强校对。
// <i> 在文本编辑界面中定义时,外层应添加双引号,例如:"..\MCU\STC8H.H"。
#define SYSCFG_STANDARDHEAD "STC8H.H"
// <o> 系统时钟频率(HZ
// <i> 告知CosyOS您所配置的系统时钟,单位为赫兹。
#define SYSCFG_SYSCLK 24000000
// <o> 系统滴答周期(us
// <i> 定义系统滴答定时器的溢出时间,单位为微秒。
// <i> 是CosyOS软件定时器,延时、超时、定时等操作的基本时间和步长。
// <i> 可开启系统滴答时间统计功能,您的设定值应远大于统计值。
#define SYSCFG_SYSTICKCYCLE 1000
// <q> 内核锁嵌套
// <i> 内核锁是否支持嵌套调用?
// <i> 通常您可能不会用到内核锁,即使偶尔使用也应是极简的代码、一般不会嵌套调用。
#define SYSCFG_KERNELLOCKNESTING 0
// <q> 安全运行时
// <i> 是否启用安全运行时?
// <i> 安全运行时是CosyOS的安全关键技术之一,可防止某任务长期独占或超时使用处理器。
#define SYSCFG_SAFERUNTIME 0
// <q> 低功耗模式
// <i> 是否启用低功耗模式?
// <i> 如果开启该选项,CosyOS会在系统空闲任务中进入低功耗模式。
// <i> 低功耗模式通常为空闲模式、睡眠模式,可被中断唤醒,但未必所有中断都能唤醒。
#define SYSCFG_LOWPOWERMODE 0
// </h>
///////////////////////////////////////////////////////////////////////////////
// <e> DEBUG接口设置
// <i> 是否启用DEBUG接口?
// <i> DEBUG接口是您与命令行和任务管理器通讯的专用接口,您应为它专门配置一个串口。
#define SYSCFG_DEBUGGING 1
#if SYSCFG_DEBUGGING == 1
// <o> 任务名称最大长度
// <i> 取值范围:<8-255>
// <i> 任务名称应尽量简短,不可过长,因为它会对总的flash和内存占用有着一定的影响。
#define SYSCFG_TASKNAMELEN_MAX 8
// <q> PendSV_FIFO监控
// <i> 是否开启PendSV_FIFO监控?
// <i> 开启后,系统将自动监控PendSV_FIFO的实际最大占用深度,并通过任务管理器输出,输出格式为:历史最大值/设置值。
// <i> 建议在调试阶段开启此项功能,正式的产品可禁用以提高性能。
#define SYSCFG_PENDSVFIFO_MONITOR 1
// <q> 任务PC监控
// <i> 是否启用任务PC监控?
// <i> 当任务管理器被调度运行时,被切换的任务入栈的PC值。
// <i> 当有任务出现代码运行卡死或死循环时,此功能可用来帮助用户锁定具体位置,以便查找BUG。注意,PC值为下一条汇编指令的地址。
// <i> 建议在调试阶段开启此项功能,正式的产品可禁用以提高性能。
// <i> 某任务出现代码运行卡死或死循环的表现:任务始终为就绪状态,且占用较高的CPU使用率,比它优先级低的任务一直都没有机会运行。
#define SYSCFG_TASKPC_MONITOR 1
// <q> 运行时间统计
// <i> 是否启用运行时间统计?
#define SYSCFG_RUNTIME_COUNT 1
// <q> 系统滴答时间统计
// <i> 是否启用系统滴答时间统计?
// <i> 统计SysTick_Handler/定时器0中断,在每个系统滴答周期运行时间的平均值。
// <i> 建议在调试阶段开启此项功能,正式的产品可禁用以提高性能。
#define SYSCFG_SYSTICKTIME_COUNT 1
// <q> 当前时间显示
// <i> 是否显示当前时间?
#define SYSCFG_RTC_SHOW 0
#endif
// <q> 开机自动启动任务管理器
// <i> 设备开机后,是否自动启动任务管理器?
#define SYSCFG_TASKMGRAUTOSTART 1
// <o> 任务管理器默认更新速度
// <500=> 快速(500毫秒)<1000=> 中速(1秒)<2000=> 慢速(2秒)
// <i> 任务管理器默认更新速度
#define SYSCFG_TASKMGRUPSPEED 1000
// <o> 串口发送使能
// <i> 定义DEBUG接口的串口发送使能,此项您应在文本编辑界面中定义。
// <i> 示例:
// <i> 8051/251-UART1TI = 1
// <i> STM32 - USART1USART_ITConfig(USART1, USART_IT_TXE, ENABLE)
#define SYSCFG_DEBUGSEND S2CON |= S2TI
// </e>
///////////////////////////////////////////////////////////////////////////////
// <h> 任务设置
// <i> 任务设置
// <o> 任务PICK位图
// <1=> 128字节 <2=> 256字节
// <i> 128字节PICK位图占用128字节常量内存;
// <i> 256字节PICK位图占用256字节常量内存;
// <i> 256字节PICK位图的任务调度性能优于128字节PICK位图。
#define SYSCFG_TASKPICKBITMAP 1
// <o> 任务优先级数
// <i> CosyOS的任务优先级,数值越大优先级越高,数值越小优先级越低,最低优先级固定为0级。
// <i> 如定义的优先级为8级,则最高优先级为7级,最低优先级为0级。
// <i> 如果未启用DEBUG接口,系统会占用3级优先级,包括最高两级和最低一级;
// <i> 如果启用了DEBUG接口,系统会占用5级优先级,包括最高四级和最低一级;
// <i> 设置任务优先级数,应有分组意识,如8级不够用应尽量控制在64级内;如64级不够用,最大可为256;
// <i> 原因是:
// <i> <=8:任务就绪表为零级位图;
// <i> <=64:任务就绪表为一级位图;
// <i> <=256:任务就绪表为二级位图。
#define SYSCFG_TASKPRIORITY 16
// <o> 相同优先级任务调度算法
// <0=> 无调度 <1=> 协作式调度 <2=> 时间片轮转调度
// <i> 对于 CosyOS 来说,不同优先级的任务,永远都实行抢占式调度;
// <i> 而相同优先级的任务,则分为无调度、协作式调度、时间片轮转调度。
// <i> 无调度,是指不支持相同优先级的任务调度,每个任务的优先级都必须不同。
// <i> 协作式调度,要求任务必须主动放弃处理器使用权(阻塞或挂起等方式),才能切换至下一个相同优先级的任务运行。
// <i> 协作式调度,在性能上会高于时间片轮转调度,而且更节约内存。
// <i> 协作式调度,用户不能创建自己的空闲任务。
// <i> 在未经深思熟虑时,可优先选择时间片轮转调度,以保证相同优先级任务的平等运行机会。
#define SYSCFG_SAMEPRISCHEDULE 2
// <o> 在线用户任务总数
// <i> 当相同优先级任务调度算法未选择无调度时,应定义此项。
// <i> 仅指启动并加入到任务队列的用户任务总数,不包括未启动的任务和系统任务。
// <i> 此项参数应大于等于实际的数量,但不可小于。
#define SYSCFG_USERTASKTOTAL 16
// <h> 时间片模式
// <i> 当相同优先级任务调度算法选择为时间片轮转调度时,应定义此项。
// <i> CosyOS有三种时间片的定义模式,全局时间片、算法时间片、自定义时间片,您只能选其一。
// <i> 全局时间片,所有任务采用相同的时间片。
// <i> 算法时间片,不同优先级的任务,时间片不同,采用一个算法公式来描述。
// <i> 自定义时间片,不同优先级的任务,时间片不同,用户自定义各优先级的时间片。
// <i> 全局时间片,简单高效,时间片轮转调度性能为最佳;算法时间片、自定义时间片,可实现不同优先级的、精细的时间片控制。
// <i> 时间片的取值范围:<1-65535>,单位为滴答周期。
// <e> 全局时间片
// <i> 是否启用全局时间片?
#define __SYSCFG_GLOBALTIMESHARING 1
// <o> 时间片时间
// <i> 时间片时间
#define SYSCFG_GLOBALTIMESHARING 100
// </e>
// <e> 算法时间片
// <i> 是否启用算法时间片?
#define __SYSCFG_ALGORITHMTIMESHARING 0
// <o> 时间片算法公式
// <i> 时间片 = f(pri)pri为任务优先级。
// <i> 应在文本编辑界面中定义。
// <i> 示例:(256 - pri)
#define SYSCFG_ALGORITHMTIMESHARING(pri) (256 - pri)
// </e>
// <e> 自定义时间片
// <i> 是否启用自定义时间片?
#define __SYSCFG_CUSTOMTIMESHARING 0
// <o> 时间片数组
// <i> 从优先级0级开始,逐个写出各优先级的时间片并用逗号间隔。
// <i> 应在文本编辑界面中定义。
// <i> 示例(优先级分组为8级时):80,70,60,50,40,30,20,10
#define SYSCFG_CUSTOMTIMESHARING 80,70,60,50,40,30,20,10
// <o> 时间片最大值
// <i> 时间片最大值
#define SYSCFG_TIMESHARING_MAX 255
// </e>
// </h>
// <o> Starter 创建模式
// <0=> 静态创建 <1=> 动态创建
// <i> 一般情况下,推荐采用动态创建,Starter 删除自身后,内存可被回收。
#define __SYSCFG_STARTERCREATE 1
// <o> 延时定时器位数/延时超时最大有效值(系统滴答周期数)
// <8=> 8位/254 <16=> 16位/65,534 <32=> 32位/4,294,967,294 <64=> 64位
// <i> 如果您的MCU内核为8051,此项建议尽量配置为低位(8位/16位),这将使大部分任务服务的执行效率提升约10%。
#define SYSCFG_DELAYBITS 16
// </h>
///////////////////////////////////////////////////////////////////////////////
// <h> 定时中断/查询设置
// <i> 定时中断/查询设置
// <o> 用户定时中断总数
// <i> 取值范围:<0-64>
// <i> 用户创建的定时中断任务/钩子总数。
// <i> 此项参数应等于实际的数量,既不能大于也不能小于。
// <i> 如果定义数量大于实际数量,会引起编译器警告,否则不会有任何提示。
#define SYSCFG_USERTIMINTTOTAL 0
// <o> 用户定时查询总数
// <i> 取值范围:<0-64>
// <i> 用户创建的定时查询任务/钩子总数。
// <i> 此项参数应等于实际的数量,既不能大于也不能小于。
// <i> 如果定义数量大于实际数量,会引起编译器警告,否则不会有任何提示。
#define SYSCFG_USERTIMQRYTOTAL 0
// <o> 用户定时查询初始化状态
// <0=> 停止状态 <1=> 查询状态
// <i> 停止状态:用户的定时查询,在初始化后为停止状态,不能计数也不能查询用户定义的事件。
// <i> 查询状态:用户的定时查询,在初始化后为查询状态,系统已经开始查询用户定义的事件了。
#define SYSCFG_USERTIMQRYINIT 1
// <o> 定时中断定时器位数/定时最大有效值(系统滴答周期数)
// <8=> 8位/254 <16=> 16位/65,534 <32=> 32位/4,294,967,294 <64=> 64位
// <i> 如果您的MCU内核为8051,此项建议尽量配置为低位,以提高性能。
#define SYSCFG_TIMINTBITS 16
// <o> 定时查询定时器位数/定时最大有效值(系统滴答周期数)
// <8=> 8位/254 <16=> 16位/65,534 <32=> 32位/4,294,967,294 <64=> 64位
// <i> 如果您的MCU内核为8051,此项建议尽量配置为低位,以提高性能。
#define SYSCFG_TIMQRYBITS 16
// </h>
///////////////////////////////////////////////////////////////////////////////
// <h> 钩子函数设置
// <i> 钩子函数设置
// <q> 空闲钩子
// <i> 是否启用空闲钩子?
#define SYSCFG_IDLEHOOK 0
// <q> 滴答钩子
// <i> 是否启用滴答钩子?
#define SYSCFG_TICKHOOK 0
// <q> 挂起服务钩子
// <i> 是否启用挂起服务钩子?
#define SYSCFG_PENDSVHOOK 0
// <q> 副本钩子
// <i> 是否启用副本钩子?
#define SYSCFG_COPYHOOK 0
// </h>
///////////////////////////////////////////////////////////////////////////////
// <h> 线程通信设置
// <i> 线程通信设置
// <q> 互斥信号量
// <i> 是否启用互斥信号量?
#define SYSCFG_MUTEX 0
// <q> 二值信号量
// <i> 是否启用二值信号量?
#define SYSCFG_BINARY 0
// <e> 计数信号量
// <i> 是否启用计数信号量?
#define SYSCFG_SEMAPHORE 0
// <o> 计数信号量位数/最大值
// <8=> 8位/255 <16=> 16位/65,535 <32=> 32位/4,294,967,295 <64=> 64位
// <i> 如果您的MCU内核为8051,此项建议尽量配置为低位,以提高性能。
#define SYSCFG_SEMAPHOREBITS 16
// </e>
// <q> 事件标志组
// <i> 是否启用事件标志组?
#define SYSCFG_FLAGGROUP 0
// <q> 飞信
// <i> 是否启用飞信?
#define SYSCFG_FETION 0
// <q> 消息邮箱
// <i> 是否启用消息邮箱?
#define SYSCFG_MAILBOX 0
// <q> 消息队列
// <i> 是否启用消息队列?
#define SYSCFG_MSGQUEUE 0
// </h>
///////////////////////////////////////////////////////////////////////////////
// <h> 杂项设置
// <i> 杂项设置
// <q> 用户动态内存分配
// <i> 在任务中是否使用动态内存分配?包括进程内存分配和线程内存分配的相关服务调用。
#define SYSCFG_DYNMEMMGE 0
// <e> 软件RTC
// <i> 是否启用软件RTC
#define SYSCFG_SOFTRTC 0
#if SYSCFG_SOFTRTC == 1
// <q> 中断中获取RTC
// <i> 是否需要在用户中断中获取RTC?关联服务:iGetTime(t)。
#define SYSCFG_GETRTC_INT 0
#endif
// <h> 生产日期
// <o> 年
// <2025=> 2025 <2026=> 2026 <2027=> 2027 <2028=> 2028 <2029=> 2029
// <2030=> 2030 <2031=> 2031 <2032=> 2032 <2033=> 2033 <2034=> 2034 <2035=> 2035 <2036=> 2036 <2037=> 2037 <2038=> 2038 <2039=> 2039
// <2040=> 2040 <2041=> 2041 <2042=> 2042 <2043=> 2043 <2044=> 2044 <2045=> 2045 <2046=> 2046 <2047=> 2047 <2048=> 2048 <2049=> 2049
// <2050=> 2050 <2051=> 2051 <2052=> 2052 <2053=> 2053 <2054=> 2054 <2055=> 2055 <2056=> 2056 <2057=> 2057 <2058=> 2058 <2059=> 2059
// <2060=> 2060 <2061=> 2061 <2062=> 2062 <2063=> 2063 <2064=> 2064 <2065=> 2065 <2066=> 2066 <2067=> 2067 <2068=> 2068 <2069=> 2069
// <2070=> 2070 <2071=> 2071 <2072=> 2072 <2073=> 2073 <2074=> 2074 <2075=> 2075 <2076=> 2076 <2077=> 2077 <2078=> 2078 <2079=> 2079
// <2080=> 2080 <2081=> 2081 <2082=> 2082 <2083=> 2083 <2084=> 2084 <2085=> 2085 <2086=> 2086 <2087=> 2087 <2088=> 2088 <2089=> 2089
// <2090=> 2090 <2091=> 2091 <2092=> 2092 <2093=> 2093 <2094=> 2094 <2095=> 2095 <2096=> 2096 <2097=> 2097 <2098=> 2098 <2099=> 2099
#define __SYSCFG_YEAR 2025
// <o> 月
// <1=> 1 <2=> 2 <3=> 3 <4=> 4 <5=> 5 <6=> 6 <7=> 7 <8=> 8 <9=> 9 <10=> 10 <11=> 11 <12=> 12
#define __SYSCFG_MONTH 2
// <o> 日
// <1=> 1 <2=> 2 <3=> 3 <4=> 4 <5=> 5 <6=> 6 <7=> 7 <8=> 8 <9=> 9 <10=> 10
// <11=> 11 <12=> 12 <13=> 13 <14=> 14 <15=> 15 <16=> 16 <17=> 17 <18=> 18 <19=> 19 <20=> 20
// <21=> 21 <22=> 22 <23=> 23 <24=> 24 <25=> 25 <26=> 26 <27=> 27 <28=> 28 <29=> 29 <30=> 30 <31=> 31
#define __SYSCFG_DATE 8
// <o> 周
// <1=> 一 <2=> 二 <3=> 三 <4=> 四 <5=> 五 <6=> 六 <7=> 日
#define __SYSCFG_WEEK 6
#define SYSCFG_MANUFACTUREDATE __SYSCFG_YEAR / 100, __SYSCFG_YEAR % 100, __SYSCFG_MONTH, __SYSCFG_DATE, 0, 0, 0, __SYSCFG_WEEK
// </h>
// </e>
// </h>
///////////////////////////////////////////////////////////////////////////////
//*** <<< end of configuration section >>> ***//
///////////////////////////////////////////////////////////////////////////////
#if __SYSCFG_MCUCORE == 0
#define SYSCFG_MCUCORE 8051
#elif __SYSCFG_MCUCORE == 1
#define SYSCFG_MCUCORE 80251
#elif __SYSCFG_MCUCORE == 2
#define SYSCFG_MCUCORE cmx
#endif
#if SYSCFG_SYSCLK < 1000000UL
#error 非法的设置值!
#endif
#if SYSCFG_SYSTICKCYCLE < 1 || SYSCFG_SYSTICKCYCLE > 1000000UL
#error 非法的设置值!
#endif
#if SYSCFG_DEBUGGING == 0
#define SYSCFG_PENDSVFIFO_MONITOR 0
#define SYSCFG_TASKPC_MONITOR 0
#define SYSCFG_RUNTIME_COUNT 0
#define SYSCFG_SYSTICKTIME_COUNT 0
#define SYSCFG_RTC_SHOW 0
#elif SYSCFG_RTC_SHOW && !SYSCFG_SOFTRTC
#error 未启用软件RTC,无法显示当前时间!
#endif
#if SYSCFG_SOFTRTC == 0
#define SYSCFG_GETRTC_INT 0
#endif
#if __SYSCFG_GLOBALTIMESHARING == 1 && __SYSCFG_ALGORITHMTIMESHARING == 0 && __SYSCFG_CUSTOMTIMESHARING == 0
#define SYSCFG_TIMESHARINGMODE 0
#elif __SYSCFG_GLOBALTIMESHARING == 0 && __SYSCFG_ALGORITHMTIMESHARING == 1 && __SYSCFG_CUSTOMTIMESHARING == 0
#define SYSCFG_TIMESHARINGMODE 1
#elif __SYSCFG_GLOBALTIMESHARING == 0 && __SYSCFG_ALGORITHMTIMESHARING == 0 && __SYSCFG_CUSTOMTIMESHARING == 1
#define SYSCFG_TIMESHARINGMODE 2
#elif __SYSCFG_GLOBALTIMESHARING == 0 && __SYSCFG_ALGORITHMTIMESHARING == 0 && __SYSCFG_CUSTOMTIMESHARING == 0
#error 时间片模式未定义!
#else
#error 时间片模式重定义!
#endif
#ifdef SYSCFG_TASKNAMELEN_MAX
#if SYSCFG_TASKNAMELEN_MAX < 8 || SYSCFG_TASKNAMELEN_MAX > 255
#error 非法的设置值!
#endif
#endif
#if __SYSCFG_STARTERCREATE == 0
#define SYSCFG_STARTERCREATE u
#else
#define SYSCFG_STARTERCREATE d
#endif
#if SYSCFG_USERTIMINTTOTAL > 64
#error 非法的设置值!
#endif
#if SYSCFG_USERTIMQRYTOTAL > 64
#error 非法的设置值!
#endif
#endif