热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NuttX配置系统

(嵌入式实时操作系统rtosnuttx7.1)NuttX配置系统转载请注明出处:http:blog.csdn.netzhumaillarticledetails24286609

(嵌入式 实时操作系统 rtos nuttx 7.1)

NuttX 配置系统


转载请注明出处:
http://blog.csdn.net/zhumaill/article/details/24286609

1  简介


NuttX 源代码采用与 Linux 内核相同的配置系统,不像 eCos 那样自己搞一套配置系统。该配置系统主要包括 Kconfig、 Makefile 和配置工具,可以生成配置界面。配置界面是通过配置工具来生成的,配置工具通过 Makefile 编译执行,配置界面中的选项则是通过各级 Kconfig 文件来定义。
Kconfig 配置数据文件出现在几乎所有的 NuttX 目录。这些数据文件仍然是开发的一部分。 Kconfig 文件包含与该 Kconfig 文件所处的目录相关联的配置信息。
NuttX 的主 Kconfig 文件是 nuttx/Kconfig。主 Kconfig 文件调用各级子目录的 Kconfig 文件和应用程序目录的 Kconfig 文件,形成树状关系。
菜单按照树状结构组织,主菜单下有子菜单,子菜单还有子菜单或者配置选项。每个选项可以有依赖关系,这些依赖关系用于确定它是否显示。只有被依赖项的父项已经选中,子项才会显示。
NuttX 使用 kconfig 前端作为配置工具。kconfig 前端已经在《NuttX 安装脚本》一文中介绍了安装。安装后生成可执行文件 kconfig-mconf。
make 命令调用 Makefile 文件。NuttX 的顶层 Makefile 文件是 nuttx/Makefile,它只是简单地包含了 nuttx/Makefile.unix ,在 nuttx/Makefile.unix 中有如下几行:

menuconfig:
$(Q) APPSDIR=${CONFIG_APPS_DIR} kconfig-mconf Kconfig其中, CONFIG_APPS_DIR在预设的 .config 文件中定义,如果没有定义,默认为 ../apps。目标 menuconfig 调用命令 kconfig-mconf 进行配置。

2  操作方法


nuttx/.config 是预设的 .config 文件。从 nuttx/config/<板卡>/<目标配置>/defconfig 复制而来。由《NuttX 安装脚本》中的以下几行实现:

echo "nuttx配置"
cd $BASEDIR/$TOPDIR/nuttx/tools
./configure.sh $TARGETCONFIG在 nuttx 目录下执行 make menuconfig 命令,读取预设的 .config 文件,调出基于文本菜单的配置界面,如图所示:
        bubuko.com,布布扣
键盘操作方法:


  • 高亮字母为热键
  • 按<方向键>浏览菜单
  • 选择子菜单
  • 包含该选项
  • 不包含该选项
  • 编译成模块
  • 退出
  • 也可以使用<空&#26684;>键进行选择

这里的括号有3种:

  • 中括号:要么是空,表示包含该选项 ,要么是"*",表示不包含该选项。
  • 尖括号:可以是空、"*"和"M",多一样选择,可以编译成模块。
  • 圆括号:在所提供的几个选项中选择一项或手工输入限定范围的&#20540;。

3  配置选项


3.1  构建设置(Build Setup)


Prompt for development and/or incomplete code/drivers--对正在开发的和未完善的代码和驱动进行提示。
Default to smallest size--将默认&#20540;设置为编译成最小尺寸。不影响你更改默认&#20540;,也不影响你配置文件中的现有设置,只应用于需要默认&#20540;的新设置。
Build Host Platform--构建的主机平台,可选择 Linux、OSX、Windows、Other。
Build Configuration--构建配置
Binary Output Formats--二进制输出&#26684;式
Customize Header Files--定制头文件
Debug Options--调试选项
Optimization Level--优化等级

3.2  系统类型(System Type)


CPU Architecture--CPU架构
(此处略去架构特定的配置)
*** Board Settings ***
Delay loops per millisecond--用于系统引导和驱动初始化的延时循环(毫秒)
Calibrate delay loop--校准延时循环
*** Interrupt options ***
Interrupt Stack Size--中断栈大小
*** Boot options ***
Boot Mode--引导模式
Boot Memory Configuration--引导内存配置

3.3  板卡选择(Board Selection)


Select target board--选择目标板
*** Common Board Options ***
Board LED support--板载LED支持
Board button support--板载按钮支持
MMC/SD minor number-- MMC/SD主设备号
MMC/SD slot number-- MMC/SD插槽
MMC/SD SPI device number-- MMC/SD所用的 SPI 设备号
*** Board-Specific Options ***

3.4  RTOS特征(RTOS Features)


Custom board/driver initialization--自定义的板卡/驱动初始化
Milliseconds per system timer tick--系统时钟节拍的毫秒数
64-bit system clock--64位系统时钟
Round robin timeslice (MSEC)--轮转时间片长度
Enable CPU load monitoring--启用CPU负载监控
Monitor system performance--监控系统运行
Maximum task name size--任务名称的最大大小
Support parent/child task relationships--支持父子任务关系
Enables Julian time conversions--启用Julian时间转换
Start year--起始年
Start month--起始月
Start day--起始日
Enable /dev/console--启用/dev/console
Enable mutex types--启用互斥体类型
Enable priority inheritance--启用优先级继承
Disable cloning of file descriptors--禁用文件描述符克隆
Disable clone file descriptors without stdio--在stdio之外禁止克隆文件描述符
Disable cloning of socket descriptors--禁用套接字描述符克隆
Enable waitpid() API--启用 waitpid() API
Enable startup hook--启用启动钩子
Enable atexit() API--启用 atexit() API
Enable on_exit() API--启用 on_exit() API
Application entry point--应用程序入口点
Disable NuttX interfaces--禁用 NuttX接口
Disable clock interfaces--禁用时钟接口
Disable POSIX timers--禁用 POSIX定时器
Disable pthread support--禁用 pthread支持
Disable signal support--禁用信号支持
Disable POSIX message queue support--禁用 POSIX消息队列支持
Disable environment variable support--禁用环境变量支持
*** Signal Numbers ***
SIGUSR1--SIGUSR1的数量
SIGUSR2--SIGUSR2的数量
SIGALRM--SIGALRM的数量
SIGCONDTIMEDOUT--SIGCONDTIMEDOUT的数量
SIGWORK--SIGWORK的数量
*** Sizes of configurable things (0 disables) ***
Max number of tasks--任务的最大数量
Maximum number of task arguments--任务参数的最大数量
Maximum number of pthread keys-- pthread键的最大数量
Maximum number of file descriptors per task--每个任务的文件描述符的最大数量
Maximum number of FILE streams--文件流的最大数量
Maximum size of a file name--文件名的最大大小
Number of pre-allocated messages--预分配的消息的数量
Maximum message size--最大消息大小
Maximum number of watchdog parameters--看门狗参数的最大数量
Number of pre-allocated watchdog timers--预分配的看门狗定时器的数量
Number of pre-allocated POSIX timers--预分配的 POSIX定时器的数量
*** Stack and heap information ***
Idle thread stack size--空闲线程栈的大小
Main thread stack size--主线程栈的大小
Minimum pthread stack size--最大 pthread栈的大小
Default pthread stack size--默认 pthread栈的大小

3.5  设备驱动(Device Drivers)


Disable driver poll interfaces--禁用驱动程序轮询接口
Enable /dev/null--启用/dev/null
Enable /dev/zero--启用/dev/zero
Enable loop device--启用回环设备
RAM Disk Support--RAM盘支持
CAN Driver Support--CAN驱动支持
PWM Driver Support--PWM驱动支持
I2C Driver Support--I2C驱动支持
SPI Driver Support--SPI驱动支持
I2S Driver Support--I2S驱动支持
RTC Driver Support--RTC驱动支持
Watchdog Timer Support--看门狗定时器支持
Analog Device(ADC/DAC) Support--模拟设备( ADC/DAC)支持
Audio Device Support--音频设备支持
Video Device Support--视频设备支持
Block-to-Character (BCH) Support--块驱动到字符驱动(BCH)支持
Input Device Support--输入设备支持
LCD Driver Support--LCD驱动支持
MMC/SD Driver Support--MMC/SD驱动支持
Memory Technology Device (MTD) Support--存储技术设备(MTD)支持
Network Device/PHY Support--网络设备/PHY支持
FIFO and named pipe drivers--FIFO和命名管道驱动
Power management (PM) driver interfaces--电源管理(PM)驱动接口
Power Management Support--电源管理支持
Sensor Device Support--传感器设备支持
Osmocom-bb Sercomm Driver Support--Osmocom-bb Sercomm 驱动支持
Serial Driver Support--串口驱动支持
USB Device Driver Support--USB设备驱动支持
USB Host Driver Support--USB主机驱动支持
Wireless Device Support--无线设备支持
*** System Logging Device Options ***
*** System Logging ***
RAM log device support--RAM日志设备支持

3.6  网络支持(Networking Support)


Networking support--联网支持
Not interrupt driven--无中断驱动
Use multiple device-side I/O buffers--使用多个设备侧I/O缓冲
Promiscuous mode--混杂模式
Number of socket descriptor--套接字描述符的数量
Max socket operations--套接字操作的最大并发数
Socket options--套接字选项
SO_LINGER socket option--SO_LINGER套接字选项
Network packet buffer size (MTU)--网络数据包缓冲大小(MTU)
Urgent data--紧急数据
TCP/IP Networking--TCP/IP联网
UDP Networking--UDP联网
ICMP networking support--ICMP联网支持
ICMP ping interfaces--ICMP ping 接口
Ping address configuration--Ping地址配置
IGMPv2 clientsupport--IGMPv2客户端支持
Collect network statistics--收集网络统计
Receive window size--接收窗口大小
ARP table size--ARP表大小
ARP address harvesting--ARP地址获取
Routing table suport--路由表支持
Multi-cast Tx support--多播发送支持
SLIP support--SLIP支持

3.7  文件系统(File Systems)


*** File system configuration ***
Disable support for mount points--禁止支持挂载点
Disable pseudo-filesystem operations--禁止伪文件系统的操作
File mapping emulation--文件映射仿真
FAT file system--FAT文件系统
FAT upper/lower names--FAT upper/lower 名称
FAT long file names--FAT长文件名
FAT maximum file name size--FAT最大文件名大小
FAT timestamps--FAT时间戳
DMA memory allocator--DMA内存分配器
NFS client file system--NFS客户端文件系统
NXFFS file system--NXFFS文件系统
ROMFS file system--ROMFS文件系统
SMART file system--SMART文件系统
BINFS File System--BINFS文件系统
PROCFS File System--PROCFS文件系统
*** System Logging ***
Enable SYSLOG Controls--启用 SYSLOG 控制
Advanced SYSLOG features--高级 SYSLOG 特征

3.8  图形支持(Graphics Support)


NX Graphics--NX Graphics

3.9  内存管理(Memory Management)


Build support for multiple heaps--多堆构建支持
Small memory model--小内存模型
Number of memory regions--内存区数量
Enable Granule Allocator--启用粒度分配器

3.10  音频支持(Audio Support)


Audio Support--音频支持

3.11  二进制&#26684;式(Binary Formats)


Disble BINFMT support--禁用 BINFMT支持
Support PATH variable--支持 PATH变量
Enable the NXFLAT Binary Format--启用 NXFLAT二进制&#26684;式
Enable the ELF Binary Format--启用ELF二进制&#26684;式
Support Builtin Applications--支持内建应用程序
Symbol Tables Ordered by Name--按名称排序符号表

3.12  库例程(Library Routines)


*** Standard C Library Options ***
C STDIO buffer size--C STDIO缓冲区大小
STDIO line buffering--STDIO行缓冲
Number unget() characters--unget()的字符数
Home directory--Home目录
Standard Math library--标准数学库
Disable sprintf support fieldwidth--禁止 sprintf 支持字段宽度
Enable floating point in printf--在 printf 中启用浮点
Order of the random number generate--随机数生成规则
Newline Options--新行选项
Enable exec[l|v] / posix_spawn() Support--启用 exec[l|v] / posix_spawn() 支持
Spawn Stack Size--创建子栈的大小
Default task_spawn Stack Size--默认 task_spawn 栈的大小
Enable strerror--启用 strerror
perror() to stdout--perror()输出到 stdout
Low-level console output--底层控制台输出
sendfile() buffer size--sendfile()缓冲区大小
Support for ROM string access--支持ROM字符串访问
Enable arch optimized functions--启用对特定架构优化的函数
*** Non-standard Library Support ***
Enable worker thread--启用工作者线程
High priority (kernel) worker thread--高优先级(内核)工作者线程
High priority worker thread priority--高优先级工作者线程的优先级
High priority worker thread period--高优先级工作者线程的周期
High priority worker thread stack size--高优先级工作者线程的栈大小
Low priority (kernel) worker thread--低优先级(内核)工作者线程
Keyboard CODEC--键盘编译码器
Segment LCD CODEC--段式 LCD 编译码器
*** Basic CXX Support ***
sizeof(_Bool) is 8-bits--sizeof(_Bool) 为8位
Have C&#43;&#43; compiler--有 C&#43;&#43; 编译器
Have C&#43;&#43; initialization--有 C&#43;&#43; 初始化
size_t is type long--size_t 为 long 类型
*** uClibc&#43;&#43; Standard C&#43;&#43; Library ***
Build uClibc&#43;&#43; (must be installed)--构建 uClibc&#43;&#43; (必须已安装)

3.13  应用程序配置(Application Configuration)


Built-In Applications--内建应用程序
Examples--示例
Graphics Support--图形支持
Interpreters--解释器
Network Utilities--网络实用程序
FreeModBus--FreeModBus 协议
NSH Library--NSH 库
NxWidgets/NxWM--NxWidgets/NxWM 图形用户界面包
Platform-specific Support--平台特定的支持
System Libraries and NSH Add-Ons--系统库和 NSH 插件

4  配置顺序


基本的配置顺序是由下而上:

  • 选择构建环境
  • 选择处理器
  • 选择板卡
  • 选择支持的外设
  • 配置设备驱动
  • 配置应用程序选项

对创建新的配置来说,这是相当正确的方向,但对修改现有的配置来说则不合适。

5  完成配置


退出配置界面时选保存,在 nuttx 目录下生成新的 .config 文件,如图所示:
        bubuko.com,布布扣
生下 .config 后,配置系统的任务就完成了。.config 去哪儿了,将在下一篇文章《NuttX 编译系统》一文中介绍。

6  手工修改 .config 文件


.config 文件的&#26684;式如下所示:

#
# Automatically generated file; DO NOT EDIT.
# Nuttx/ Configuration
#
#
# Build Setup
#
# CONFIG_EXPERIMENTAL is not set
#
# Build Configuration
#
# CONFIG_APPS_DIR="../apps"
# CONFIG_BUILD_2PASS is not set
#
# Binary Output Formats
#
# CONFIG_RRLOAD_BINARY is not set
CONFIG_INTELHEX_BINARY=y
# CONFIG_MOTOROLA_SREC is not set
CONFIG_RAW_BINARY=y
#
# Customize Header Files
#
# CONFIG_ARCH_STDBOOL_H is not set
# CONFIG_ARCH_MATH_H is not set
# CONFIG_ARCH_FLOAT_H is not set
# CONFIG_ARCH_STDARG_H is not set
#
# Debug Options
#
# CONFIG_DEBUG is not set
# CONFIG_DEBUG_SYMBOLS is not set
......
对于简单的修改,可以文本编辑器中进行,例如修改 NSH 的目标 IP 地址和主机 IP 地址:

CONFIG_NSH_IPADDR=0xc0a8020a
CONFIG_NSH_DRIPADDR=0xc0a80201其中的十六进制赋&#20540;与点分十进制的对应关系如下:
c0--192
a8--168
02--2
0a--10

7  Kconfig 语言


7.1  菜单项


大多数选项定义一个配置选项,其它选项起辅助组织作用。一个配置选项可以被定义为如下形式:

config DEBUG_USB
bool "USB Debug Output"
default n
depends on USBDEV || USBHOST
---help---
Enable usb debug SYSLOG output (disabled by default)以关键字“config”开始一个新的配置选项,并可以跟随多个参数。后面的几行定义该配置选项的属性。属性可以是该配置选项的类型、输入提示、依赖关系、帮助文本和默认&#20540;。同名的配置选项可以被定义多次,但每次定义只能有单个输入提示并且类型不能冲突。

7.2  菜单属性


一个菜单选项可以有多种属性,不过这些属性也不是任意用的,受到语法的限制。
每个配置选项必须有类型定义。类型定义包括:bool、tristate、string、hex、int 共5种。其中有2 种基本的类型:tristate 和 string,每种类型定义可以有一个输入提示。
输入提示:"prompt" ["if" ]--每个菜单选项最多有一条提示,可以显示在菜单上。某选择提示可选的依赖关系可以通过“if”语句添加。
默认&#20540;:"default" ["if" ]--配置选项可以有几个默认&#20540;。如果有多个默认&#20540;可选,只使用第一个默认&#20540;。某选项默认&#20540;还可以在其他地方定义,并且被前面定义的默认&#20540;覆盖。如果用户没有设置其他&#20540;,默认&#20540;就是配置符号的唯一&#20540;。如果有选择提示出现,就可以显示默认&#20540;并且可以配置修改。某默认&#20540;可选的依赖关系可以通过“if”语句添加。
依赖关系:"depends on"/"requires" --这个定义了菜单选项的依赖关系。如果定义多个依赖关系,那么要用“&&”符号连接。依赖关系对本菜单项中其他所有选项有效(也可以用“if”语句)。
反向依赖:"select" ["if" ]--普通的依赖关系是缩小符号的上限,反向依赖关系则是符号的下限。当前菜单符号的&#20540;用作符号可以设置的最小&#20540;。如果符号&#20540;被选择了多次,这个限制将被设成最大选择&#20540;。反向依赖只能用于布尔或者三态符号。
数字范围:"range" ["if" ]--这允许对 int 和 hex 类型符号的输入&#20540;限制在一定范围内。用户输入的&#20540;必须大于等于第一个符号&#20540;并且小于等于第二个符号&#20540;。
帮助文本:"help"或者"---help---"--这可以定义帮助文本。帮助文本的结束是通过缩进层次判断的。当遇到一行缩进比帮助文本第一行小的时候,就认为帮助文本已经结束。“---help---”和“help”功能没有区别,主要给开发者提供不同于“help”的帮助。

7.3  菜单依赖关系


依赖关系定义了菜单选项的显示,也能减少三态符号的选择范围。表达式的三态逻辑比布尔逻辑多一个状态,用来表示模块状态。依赖关系表达式的语法如下:

::= (1)
‘=‘ (2)
‘!=‘ (3)
‘(‘ ‘)‘ (4)
‘!‘ (5)
‘&&‘ (6)
‘||‘ (7)表达式是以优先级的降序列出的。
(1)  把符号转换成表达式,布尔和三态符号可以转换成对应的表达式&#20540;。其他类型符号的结果都是“n”。
(2)  如果两个符号的&#20540;相等,返回“y”,否则返回“n”。
(3)  如果两个符号的&#20540;相等,返回“n”,否则返回“y”。
(4)  返回表达式的&#20540;,括号内表达式优先计算。
(5)  返回(2-/expr/)的计算结果。
(6)  返回min(/expr/, /expr/)的计算结果。
(7)  返回max(/expr/, /expr/)的计算结果。
一个表达式的&#20540;是“n”、“m”或者“y”(或者对应数&#20540;的0、1、2)。当表达式的&#20540;为“m”或者“y”时,菜单选项变为显示状态。
符号类型分为两种:常量和非常量符号。
非常量符号最常见,可以通过 config 语句来定义。非常量符号完全由数字符号或者下划线组成。
常量符号只是表达式的一部分。常量符号总是包含在引号范围内的。在引号中,可以使用其他字符,引号要通过“\”号转义。

7.4  菜单组织结构


菜单选项的树状结构有两种组织方式。
第一种是显式地声明为菜单。

menu "SPI Configuration"
depends on STM32_SPI
config STM32_SPI_INTERRUPTS
bool "Interrupt driver SPI"
default n
---help---
......
endmenu“menu”与“endmenu”之间的部分成为“SPI Configuration”的子菜单。所有子选项继承该菜单的依赖关系,例如,依赖关系“STM32_SPI”就被添加到“STM32_SPI_INTERRUPTS”配置选项的依赖关系列表中。
第二种是通过依赖关系确定菜单的结构。
如果一个菜单选项依赖于前一个选项,它就是一个子菜单。这要求前一个选项和子选项同步地显示或者不显示。

config DISABLE_OS_API
bool "Disable NuttX interfaces"
default y
......
config DISABLE_CLOCK
bool "Disable clock interfaces"
depends on DISABLE_OS_API
default nDISABLE_CLOCK 依赖于 DISABLE_OS_API,这样只有 DISABLE_OS_API 不是“n”的时候才显示。

7.5  Kconfig 语法


Kconfig 配置文件描述了一系列的菜单选项。每一行都用一个关键字开头(除了帮助文本)。下列关键字结束菜单选项:config、 menuconfig、 choice/endchoice、 comment、 menu/endmenu、 if/endif、 source。前五个也开始菜单选项的定义。
config:"config" --这可以定义一个配置符号,并且可以配置选项属性。
menuconfig:"menuconfig" --这类&#20284;于简单的配置选项,但是它暗示:所有的子选项应该作为独立的选项列表显示。
choices:"choice"、、"endchoice"--这定义了一个选择组,并且可以配置选项属性。每个选择项只能是布尔或者三态类型。布尔类型只允许选择单个配置选项,三态类型可以允许把任意多个选项配置成“m”。如果一个硬件设备有多个驱动程序,内核一次只能静态链接或者加载一个驱动,但是所有的驱动程序都可以编译为模块。选择项还可以接受另外一个选项“optional”,可以把选择项设置成“n”,并且不需要选择什么选项。
comment:"comment" --这定义了一个注释,在配制过程中显示在菜单上,也可以回显到输出文件中。唯一可能的选项是依赖关系。
Menu:"menu" 、"endmenu"--这定义了一个菜单项,在菜单组织结构中有此描述。唯一可能的选项是依赖关系。
If:"if" 、"endif"--这定义了一个 if 语句块。依赖关系表达式 附加给所有封装好的菜单选项。
Source:"source" --读取指定的配置文件。读取的文件也会解析生成菜单。

NuttX 配置系统,布布扣,bubuko.com


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
author-avatar
拍友2502908871
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有