配置
XWOS的配置
Categories:
6 分钟阅读
配置
XWOS所有配置文件都集中于 电路板名称/cfg 文件夹中:
cfg/project.h:工程配置文件cfg/arch.h:ARCH配置cfg/cpu.h:CPU配置cfg/soc.h:SOC配置cfg/board.h:电路板配置cfg/xwos.h:内核配置cfg/xwmd.h:中间件配置cfg/xwcd.h:芯片与外设配置cfg/xwem.h:第三方组件配置cfg/xwam.h:应用配置cfg/oem.h:OEM模块配置cfg/autogen.h:自动生成的配置
配置说明
XWOS在设计之初曾考虑过使用现成的配置生成工具,例如Linux内核的Kconfig工具。 但为了降低跨平台开发的工作量和难度,最终选择使用C语言的头文件来描述所有配置。
project.h :工程配置文件
- ARCH
XWCFG_ARCH:架构,可在xwcd/soc/中选择 架构文件夹XWCFG_SUBARCH:子架构,可在 架构文件夹 中选择 子架构文件夹XWCFG_COMPILER:编译器gcc:选择gcc作为编译器llvm/clang:选择clang作为编译器
XWCFG_LIBC:标准C库,目前支持newlib:选择newlib作为C库picolibc:选择picolibc作为C库n:不链接到C库
XWCFG_LDSCRIPT:链接脚本的的相对路径,相对于 电路板文件夹
- CPU
XWCFG_CPU:CPU子集,可在 架构文件夹 中选择 CPU文件夹
- SOC
XWCFG_SOC:片上系统,可在 CPU文件夹 中选择 SOC文件夹
- 电路板
XWCFG_BOARD:电路板,可在xwbd/中选择 电路板文件夹
- 内核配置
XWCFG_CORE:单核与多核的选择,可选择编译xwos/下的哪种内核mp:多核up:单核
XWCFG_XWCD:是否需要引用芯片、驱动库,路径xwcd/,取值:1或0XWCFG_XWMD:是否需要引用中间件库,路径xwmd/,取值:1或0XWCFG_XWEM:是否需要引用第三方组件库,路径xwem/,取值:1或0XWCFG_XWAM:是否需要引用应用组件库,路径xwam/,取值:1或0XWCFG_OEMPATH:OEM模块的搜索路径- 可以是相对路径,相对于
$(XWOS_BRD_DIR) - 可以为绝对路径
- 路径可指向XWOS根目录之外
- 可以是相对路径,相对于
arch.h :ARCH配置
- 数据大小端选择,只可选择一种配置为
1:ARCHCFG_LITTLE_ENDIAN:小端ARCHCFG_BIG_ENDIAN:大端
- 架构位宽,只可选择一种配置为
1:ARCHCFG_32BIT:32位ARCHCFG_64BIT:64位
- 浮点单元
ARCHCFG_FPU:是否包含浮点单元,取值:1或0
- C标准库
ARCHCFG_COMPILER_ERRNO:是否使用libc的errno.h中定义的错误码,取值:1或0
- 位操作与原子操作
ARCHCFG_LIB_XWBOP_<OP>:是否使用汇编实现的位操作函数<OP>,取值:1或0ARCHCFG_LIB_XWBMPOP_<OP>:是否使用汇编实现的位图操作函数<OP>,取值:1或0ARCHCFG_LIB_XWAOP_<OP>:是否使用汇编实现的原子操作函数集<OP>,取值:1或0ARCHCFG_LIB_XWBMPAOP_<OP>:是否使用汇编实现的位图原子操作函数集<OP>,取值:1或0
cpu.h :CPU配置
CPUCFG_CPU_NUM:CPU数量,仅仅对SMP的系统有效CPUCFG_L1_CACHELINE_SIZE:L1缓存的CacheLine大小,仅对有1级缓冲的SOC有效
soc.h :SOC配置
- ARM-M
SOCCFG_EXC_NUM:SOC异常数量,固定为16SOCCFG_IRQ_NUM:SOC外设中断数量SOCCFG_NVIC_PRIO_BITNUM:ARM-M中断优先级寄存器的位数SOCCFG_NVIC_SUBPRIO_BITIDX:ARM-M子中断优先级从第几位开始SOCCFG_BUG:SOC是否提供soc_bug()的定义,取值:1或0SOCCFG_CRC32:SOC是否提供 CRC32 计算单元,取值:1或0SOCCFG_CRC8:SOC是否提供 CRC8 计算单元,取值:1或0
- nuclei RISC-V bumblebee (rv32imac)
SOCCFG_EXC_NUM:SOC异常数量,固定为16SOCCFG_IRQ_NUM:SOC外设中断数量SOCCFG_BUG:SOC是否提供soc_bug()的定义,取值:1或0SOCCFG_CRC32:SOC是否提供CRC32计算单元,取值:1或0SOCCFG_CRC8:SOC是否提供CRC8计算单元,取值:1或0
- EPPC (e200z0)
SOCCFG_EXC_NUM:SOC异常数量,固定为9SOCCFG_IRQ_NUM:SOC外设中断数量SOCCFG_SYSHWT_SRCCLK:滴答定时器的频率SOCCFG_SYSHWT_CHANNEL:滴答定时器的通道SOCCFG_CLK_FXOSC:是有启用外部快速晶振SOCCFG_CLK_FXOSC_VALUE:外部快速晶振的频率SOCCFG_CLK_FXOSC_DIV:外部快速晶振的分频系数SOCCFG_CLK_FIRC:是否启用内部的快速RC振荡器SOCCFG_CLK_FIRC_VALUE:内部快速RC振荡器的频率SOCCFG_CLK_FIRC_DIV:内部快速RC振荡器的频率SOCCFG_CLK_SCOSC:是否启用外部慢速晶振SOCCFG_CLK_SCOSC_VALUE:外部慢速晶振的频率SOCCFG_CLK_SCOSC_DIV:外部慢速晶振的分频系数SOCCFG_CLK_SIRC_VALUE:内部慢速RC振荡器的频率SOCCFG_CLK_SIRC_DIV:内部慢速RC振荡器的分频系数SOCCFG_CLK_FMPLL_VALUE:锁相环的频率SOCCFG_BUG:SOC是否提供soc_bug()的定义,取值:1或0SOCCFG_BKUP:是否启用备用RAM区域,取值:1或0SOCCFG_CRC32:SOC是否提供CRC32计算单元,取值:1或0SOCCFG_CRC8:SOC是否提供CRC8计算单元,取值:1或0
board.h :电路板配置
- XWOS HOOK
BRDCFG_XWSKD_IDLE_HOOK:是否使用空闲任务HOOK,取值:1或0- 当取值
1时,需要提供void board_xwskd_idle_hook(struct xwospl_skd *)的定义
- 当取值
BRDCFG_XWSKD_PRE_SWCX_HOOK:是否使用任务切换前HOOK,取值:1或0- 当取值
1时,需要提供void board_xwskd_pre_swcx_hook(struct xwospl_skd *)的定义
- 当取值
BRDCFG_XWSKD_POST_SWCX_HOOK:是否使用任务切换后HOOK,取值:1或0- 当取值
1时,需要提供void board_xwskd_post_swcx_hook(struct xwospl_skd *)的定义
- 当取值
BRDCFG_XWSKD_SYSHWT_HOOK:是否使用系统滴答定时器中断HOOK,取值:1或0- 当取值
1时,需要提供void board_xwskd_syshwt_hook(struct xwospl_skd *)的定义
- 当取值
BRDCFG_XWSKD_THD_STACK_POOL:是否提供了线程栈的内存池,取值:1或0- 当取值
1时,需要提供xwer_t board_thd_stack_pool_alloc(xwsz_t , xwstk_t **)与xwer_t board_thd_stack_pool_free(xwstk_t *)的定义 BRDCFG_XWSKD_THD_POSTINIT_HOOK:是否使用线程初始化后HOOK,取值:1或0- 当取值
1时,需要提供void board_thd_postinit_hook(struct xwospl_thd *)
- 当取值
BRDCFG_LOG:是否支持日志打印,取值:1或0。取值为1时需要提供board_log_write()的定义,用于log字符串的输出。BRDCFG_DCACHE:是否支持DCACHE,取值:1或0BRDCFG_ICACHE:是否支持ICACHE,取值:1或0- 二进制标记
BRDCFG_FIRMWARE_TAILFLAG:定义编译后的bin文件尾的标记字符串,可用于升级功能检查文件是否完整
- 电路板模块的配置:
BMCFG_<module>- 电路板模块的路径需要按照 构建系统 的规则转换为配置宏,取值:
1或0
- 电路板模块的路径需要按照 构建系统 的规则转换为配置宏,取值:
xwos.h :内核配置
操作系统相关的配置
XWKNCFG_CHECK_PARAMETERS:是否开启API参数检查,取值:1或0XWKNCFG_BUG:是否启用BUG调试,取值:1或0- 玄武C库:
- 日志
XWLIBCFG_LOG:是否启用Log调试,取值:1或0XWLIBCFG_XWLOG_LEVEL:最低日志等级;XWLIBCFG_XWLOG_BUFSIZE:日志格式化缓冲区大小;
- 系统调用
XWLIBCFG_SC:是否启用系统调用,取值:1或0
- 原子操作
XWLIBCFG_XWAOP8:是否启用8位原子操作库,取值:1或0XWLIBCFG_XWAOP16:是否启用16位原子操作库,取值:1或0XWLIBCFG_XWAOP32:是否启用32位原子操作库,取值:1或0XWLIBCFG_XWAOP64:是否启用64位原子操作库,取值:1或0XWLIBCFG_XWBMPAOP:是否启用位图原子操作库,取值:1或0
- 数据结构
XWLIBCFG_MAP:是否启用键值对,取值:1或0
- CRC
XWLIBCFG_CRC32:是否启用CRC32,取值:1或0XWLIBCFG_CRC32_0X04C11DB7:是否启用CRC32多项式0x04C11DB7,取值:1或0XWLIBCFG_CRC32_0XEDB88320:是否启用CRC32多项式0xEDB88320,取值:1或0XWLIBCFG_CRC8:是否启用CRC8,取值:1或0XWLIBCFG_CRC8_0X07:是否启用CRC8多项式0x07,取值:1或0XWLIBCFG_CRC8_0X31:是否启用CRC8多项式0x31,取值:1或0XWLIBCFG_CRC8_0X9B:是否启用CRC8多项式0x9B,取值:1或0
- 长跳转
XWLIBCFG_SETJMP:是否启用setjmp()/longjmp(),取值:1或0
- 日志
- 内存管理
XWMMCFG_ALIGNMENT:内存管理对齐的字节数,通常设置为8字节XWMMCFG_STACK_ALIGNMENT:线程栈对齐的字节数,通常设置为8字节XWMMCFG_STACK_SIZE_DEFAULT:栈内存的默认大小XWMMCFG_STACK_SIZE_MIN:栈内存大小的最小值XWMMCFG_STACK_GUARD_SIZE_DEFAULT:栈的默认警戒线位置XWMMCFG_STACK_CHK_SWCX:是否在切换上下文时检查栈溢出,取值:1或0- 栈的类型,只可选择一种配置为
1:XWMMCFG_FD_STACK:满递减栈XWMMCFG_ED_STACK:空递减栈XWMMCFG_FA_STACK:满递增栈XWMMCFG_EA_STACK:满递增栈
XWMMCFG_MEMSLICE:是否启用内存切片算法,取值:1或0XWMMCFG_BMA:是否启用伙伴算法,取值:1或0XWMMCFG_MEMPOOL:是否启用内存池,取值:1或0
- 内核配置
- 调度器
XWOSCFG_SYSHWT_PERIOD:硬件定时器周期,单位纳秒XWOSCFG_SKD_PRIORITY_RT_NUM:调度器实时优先级数量,数量越小越省内存XWOSCFG_SKD_IDLE_STACK_SIZE:空闲任务栈大小XWOSCFG_SKD_IDLE_TLS:是否启用空闲任务的TLS(线程本地私有变量),取值:1或0XWOSCFG_SKD_BH:是否启用中断底半部,取值:1或0XWOSCFG_SKD_BH_STACK_SIZE:中断底半部栈大小XWOSCFG_SKD_BH_TLS:是否启用中断底半部任务的TLS(线程本地私有变量),取值:1或0XWOSCFG_SKD_PM:是否启用电源管理,此配置只对单核系统有效,多核系统不可关闭电源管理。取值:1或0XWOSCFG_SKD_THD_PRIVILEGED_DEFAULT:线程是否默认为特权线程,取值:1或0XWOSCFG_SKD_THD_MEMPOOL:是否启用mempool线程对象缓存,取值:1或0XWOSCFG_SKD_THD_MEMSLICE:是否启用memslice线程对象缓存,取值:1或0XWOSCFG_SKD_THD_SMA:是否启用sma线程对象缓存,取值:1或0XWOSCFG_SKD_THD_STDC_MM:是否启用C标准库中的malloc()来动态创建线程对象,取值:1或0XWOSCFG_SKD_THD_LOCAL_DATA_NUM:线程私有数据的数量XWOSCFG_SKD_THD_EXIT:是否启用线程退出,取值:1或0XWOSCFG_SKD_SWT:是否启用软件定时器,取值:1或0XWOSCFG_SKD_SWT_MEMPOOL:是否启用mempool软件定时器对象缓存,取值:1或0XWOSCFG_SKD_SWT_MEMSLICE:是否启用memslice软件定时器对象缓存,取值:1或0XWOSCFG_SKD_SWT_SMA:是否启用sma软件定时器对象缓存,取值:1或0XWOSCFG_SKD_SWT_STDC_MM:是否启用C标准库中malloc()来动态创建定时器对象,取值:1或0
- 同步
XWOSCFG_SYNC_PLSEM:是否启用管道信号量,取值:1或0XWOSCFG_SYNC_RTSEM:是否启用实时信号量,取值:1或0XWOSCFG_SYNC_SEM_MEMPOOL:是否启用mempool信号量对象缓存,取值:1或0XWOSCFG_SYNC_SEM_MEMSLICE:是否启用memslice信号量对象缓存,取值:1或0XWOSCFG_SYNC_SEM_SMA:是否启用sma信号量对象缓存,取值:1或0XWOSCFG_SYNC_SEM_STDC_MM:是否启用C标准库中malloc()来动态创建信号量对象,取值:1或0XWOSCFG_SYNC_COND:是否启用条件量,取值:1或0XWOSCFG_SYNC_COND_MEMPOOL:是否启用mempool条件量对象缓存,取值:1或0XWOSCFG_SYNC_COND_MEMSLICE:是否启用memslice条件量对象缓存,取值:1或0XWOSCFG_SYNC_COND_SMA:是否启用memslice条件量对象缓存,取值:1或0XWOSCFG_SYNC_COND_STDC_MM:是否启用C标准库中malloc()来动态创建条件量对象,取值:1或0XWOSCFG_SYNC_EVT:是否启用事件,取值:1或0XWOSCFG_SYNC_EVT_MEMPOOL:是否启用mempool事件对象缓存,取值:1或0XWOSCFG_SYNC_EVT_MEMSLICE:是否启用memslice事件对象缓存,取值:1或0XWOSCFG_SYNC_EVT_SMA:是否启用sma事件对象缓存,取值:1或0XWOSCFG_SYNC_EVT_STDC_MM:是否启用C标准库中malloc()来动态创建事件对象,取值:1或0
- 锁
XWOSCFG_LOCK_MTX:是否启用互斥锁,取值:1或0XWOSCFG_LOCK_MTX_MEMPOOL:是否启用mempool互斥锁对象缓存,取值:1或0XWOSCFG_LOCK_MTX_MEMSLICE:是否启用memslice互斥锁对象缓存,取值:1或0XWOSCFG_LOCK_MTX_SMA:是否启用sma互斥锁对象缓存,取值:1或0XWOSCFG_LOCK_MTX_STDC_MM:是否启用C标准库中malloc()来动态创建互斥锁对象,取值:1或0XWOSCFG_LOCK_FAKEMTX:是否启用虚假互斥锁,取值:1或0
- 调度器
xwmd.h :中间件配置
XWMDCFG_CHECK_PARAMETERS:是否开启API参数检查,取值:1或0XWMDCFG_isc_xwssc:是否启用点对点通讯协议,取值:1或0XWMDCFG_isc_xwssc_LOG:是否开启日志,取值:1或0XWMDCFG_isc_xwssc_PORT_NUM:消息通道的数量XWMDCFG_isc_xwssc_PRI_NUM:消息优先级的数量XWMDCFG_isc_xwssc_RETRY_PERIOD:重发消息的周期XWMDCFG_isc_xwssc_RETRY_NUM:重发消息的最大次数XWMDCFG_isc_xwssc_MEMBLK_SIZE:用于发送与接收的单位内存块的大小XWMDCFG_isc_xwssc_MEMBLK_ODR:单位内存块的数量,以2的n次方形式表示,此处配置的是指数nXWMDCFG_isc_xwssc_RXTHD_PRIORITY:接收线程的优先级XWMDCFG_isc_xwssc_TXTHD_PRIORITY:发送线程的优先级
XWMDCFG_isc_xwmq:是否启用消息队列,取值:1或0XWMDCFG_isc_xwcq:是否启用循环队列,取值:1或0XWMDCFG_libc:是否启用libc的适配代码,取值:1或0XWMDCFG_xwrust_ffi:是否启用XWOS RUST的底层C语言接口,取值:1或0
xwcd.h:芯片与外设配置
XWCDCFG_CHECK_PARAMETERS:是否开启API参数检查,取值:1或0XWCDCFG_ds:是否启用玄武设备栈,取值:1或0XWCDCFG_ds_LITE:是否启用LITE版的玄武设备栈,取值:1或0XWCDCFG_ds_PM:是否启用电源管理,取值:1或0XWCDCFG_ds_SOC:是否启用SOC,取值:1或0XWCDCFG_ds_SOC_CLK:是否启用SOC的Clock,取值:1或0XWCDCFG_ds_SOC_PWR:是否启用SOC的Power,取值:1或0XWCDCFG_ds_SOC_GPIO:是否启用SOC的GPIO,取值:1或0XWCDCFG_ds_SOC_EIRQ:是否启用SOC的外部IO中断,取值:1或0XWCDCFG_ds_SOC_EIRQ_ROISRT:SOC外部IO中断向量表是否为const的,取值:1或0XWCDCFG_ds_SOC_DMA:是否启用SOC的DMA,取值:1或0XWCDCFG_ds_SOC_DMA_ROCBT:SOC外部DMA回调函数表是否为const的,取值:1或0XWCDCFG_ds_UART:是否启用UART,取值:1或0XWCDCFG_ds_UART_RXQ_SIZE:UART接收队列的大小XWCDCFG_ds_I2C_MASTER:是否启用I2C总线控制器,取值:1或0XWCDCFG_ds_I2C_PERIPHERAL:是否启用I2C外设,取值:1或0XWCDCFG_ds_SPI_MASTER:是否启用SPI总线控制器,取值:1或0XWCDCFG_ds_SPI_PERIPHERAL:是否启用SPI外设,取值:1或0XWCDCFG_ds_LIN:是否启用LIN总线,取值:1或0XWCDCFG_ds_LINID:是否启用LIN总线的ID校验表,取值:1或0XWCDCFG_ds_CAN:是否启用CAN总线,取值:1或0XWCDCFG_ds_CAN_CONTROLLER:是否启用CAN控制器,取值:1或0XWCDCFG_ds_CAN_CONTROLLER_ROCBT:CAN控制器的回调函数表是否为只读,取值:1或0XWCDCFG_ds_CAN_CONTROLLER_SDU_MAXSIZE:CAN消息数据的最大数量XWCDCFG_ds_CAN_CONTROLLER_RXQNUM:CAN接收队列的最大数量XWCDCFG_ds_CAN_CONTROLLER_I2CP:CAN控制器是否为I2C外设,取值:1或0XWCDCFG_ds_CAN_CONTROLLER_SPIP:CAN控制器是否为SPI外设,取值:1或0
XWCDCFG_ds_CAN_TRANSCEIVER:是否启用CAN接收器,取值:1或0XWCDCFG_ds_CAN_TRANSCEIVER_I2CP:CAN接收器是否为I2C外设,取值:1或0XWCDCFG_ds_CAN_TRANSCEIVER_SPIP:CAN接收器是否为SPI外设,取值:1或0
XWCDCFG_ds_MISC:是否启用MISC设备,取值:1或0
XWCDCFG_peripheral_i2c_eeprom:是否启用I2C EEPROM的驱动,取值:1或0XWCDCFG_peripheral_spi_flash_w25qxx:是否启用SPI FLASH W25Q的驱动,取值:1或0XWCDCFG_peripheral_spi_lcd_st7735:是否启用SPI LCD ST7735的驱动,取值:1或0XWCDCFG_peripheral_can_transceiver_tja1042:是否启用CAN收发器TJA1042的驱动,取值:1或0
xwem.h:第三方软件配置
XWEMCFG_serializing_nanopb:是否启用protobuf-nanopb,取值:1或0XWEMCFG_fs_fatfs:是否启用FatFs,取值:1或0XWEMCFG_fs_littlefs:是否启用littlefs,取值:1或0XWEMCFG_fs_spiffs:是否启用spiffs,取值:1或0XWEMCFG_fs_dhara:是否启用dhara,取值:1或0XWEMCFG_vm_lua:是否启用Lua语言,取值:1或0XWEMCFG_vm_lua_INT_TYPE:Lua语言中整数类型XWEMCFG_vm_lua_FLOAT_TYPE:Lua语言中浮点类型XWEMCFG_vm_lua_THD_STACK_SIZE:Lua交互式解释器线程的栈大小XWEMCFG_vm_lua_BRDLIBS:是否启用BSP中Lua库,取值:1或0
xwam.h:应用配置
XWAMCFG_example_xwobj:是否启用示例 玄武对象 ,取值:1或0XWAMCFG_example_thd_new:是否启用示例 线程的创建 ,取值:1或0XWAMCFG_example_thd_exit:是否启用示例 线程的退出 ,取值:1或0XWAMCFG_example_thd_sleep:是否启用示例 线程的睡眠 ,取值:1或0XWAMCFG_example_swt:是否启用示例 软件定时器 ,取值:1或0XWAMCFG_example_lock_cpuirq:是否启用示例 CPU中断 ,取值:1或0XWAMCFG_example_lock_mtx:是否启用示例 互斥锁 ,取值:1或0XWAMCFG_example_lock_spinlock:是否启用示例 自旋锁 ,取值:1或0XWAMCFG_example_lock_seqlock:是否启用示例 顺序锁 ,取值:1或0XWAMCFG_example_sync_sem:是否启用示例 信号量 ,取值:1或0XWAMCFG_example_sync_cond:是否启用示例 条件量 ,取值:1或0XWAMCFG_example_sync_br:是否启用示例 线程栅栏 ,取值:1或0XWAMCFG_example_sync_flg:是否启用示例 事件标志 ,取值:1或0XWAMCFG_example_sync_sel:是否启用示例 信号选择器 ,取值:1或0XWAMCFG_example_mm_sma:是否启用示例 简单内存分配器 ,取值:1或0XWAMCFG_example_mm_memslice:是否启用示例 内存切片分配器 ,取值:1或0XWAMCFG_example_mm_bma:是否启用示例 伙伴算法分配器 ,取值:1或0XWAMCFG_example_xwlib_crc:是否启用示例 CRC计算 ,取值:1或0XWAMCFG_example_cxx:是否启用示例 C++ ,取值:1或0XWAMCFG_example_isc_xwmq:是否启用示例 消息队列 ,取值:1或0XWAMCFG_example_isc_xwcq:是否启用示例 循环队列 ,取值:1或0XWAMCFG_application_w25qrpt:是否启用应用 W25Q读写工具 ,取值:1或0XWAMCFG_application_ramcode:是否启用应用 RAMCODE ,取值:1或0