1 FreeRTOSConfig.h
操作系统freertos宏定义
1.1 configUSE_PREEMPTION
configUSE_PREEMPTION
为1时RTOS使用抢占式调度器,即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程;
为0时RTOS使用协作式调度器(时间片)高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占 CPU 运行
// 同步和通信配置
#define configUSE_MUTEXES 1 // 是否使用互斥锁
#define INCLUDE_xSemphoreGetMutexHolder 1 // 启用 xSemaphoreGetMutexHolder API
#define configUSE_RECURSIVE_MUTEXES 1 // 是否使用递归互斥锁
#define configUSE_COUNTING_SEMAPHORES 1 // 是否使用计数信号量
// 软件定时器配置
#define configUSE_TIMERS 1 // 是否启用软件定时器
// 钩子函数配置
#define configUSE_IDLE_HOOK 0 // 是否使用空闲任务钩子
#define configUSE_TICK_HOOK 0 // 是否使用系统节拍钩子
#define configUSE_DAEMON_TASK_STARTUP_HOOK 0 //禁用守护任务启动钩子
#define configUSE_malloc_failed_hook 1 //启用内存分配失败钩子
//调试和统计配置
#define configUSE_TRACE_FACILITY 0 //禁用跟踪功能,减少代码大小。
#define configUSE_NEWLIB_REENTRANT 0 //禁用 Newlib 可重入支持,适用于不使用 Newlib 的场景
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 //启用统计信息格式化函数,方便调试和性能分析。
#define configGENERATE_RUN_TIME_STATS 0 //禁用运行时统计,减少开销。
//任务和内存配置
#define configSUPPORT_STATIC_ALLOCATION 0 // 禁用静态内存分配
#define configMAX_PRIORITIES 7 // 最大任务优先级
#define configTIMER_TASK_PRIORITY configMAX_PRIORITIES-1
#define configMINIMAL_STACK_SIZE 256 //最小任务栈大小
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 ) //定时器任务栈深度
#define configTOTAL_HEAP_SIZE ((size_t )(50*1024)) // 堆大小
#define configMAX_TASK_NAME_LEN 10 // 任务名称最大长度
// 调度和任务行为配置
#define configIDLE_SHOULD_YIELD 1 // 空闲任务让出 CPU
#define configUSE_TIME_SLICING 1 // 启用时间片调度
#define configUSE_TASK_NOTIFICATIONS 1 // 启用任务通知
#define configUSE_QUEUE_SETS 1 // 启用队列集
#define configUSE_TASK_FPU_SUPPORT 1 // 启用任务浮点单元支持
#define configSTREAM_BUFFER 0 // 禁用流缓冲区
#define configMESSAGE_BUFFER 0// 禁用消息缓冲区
#define configUSE_16_BIT_TICKS 0// 使用 32 位 Tick 计数器
#define configAPPLICATION_TASK_TAG 0// 禁用任务标签
/* Co-routine related definitions. */
#define configUSE_CO_ROUTINES 0//禁用协程(Co-routines)功能
#define configMAX_CO_ROUTINE_PRIORITIES 2 // 协程最大优先级
#define configTICK_RATE_HZ ((TickType_t ) 1000)// 系统节拍频率为 1000 Hz
#define configTIMER_QUEUE_LENGTH 10// 定时器队列长度为 10
#define configCHECK_FOR_STACK_OVERFLOW 2// 启用栈溢出检查(方法 2)
#define configQUEUE_REGISTRY_SIZE 10 // 队列注册表大小为 10
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 3 // 每个任务有 3 个线程本地存储指针
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() // 配置运行时统计定时器
#define portGET_RUN_TIME_COUNTER_VALUE() // 获取运行时统计计数器值
#define configUSE_TICKLESS_IDLE 0// 禁用 Tickless 空闲模式
#define configTASK_RETURN_ADDRESS NULL
2 opt.h @L_知识混子_
协议栈在 src/include/lwip/opt.h 做好了默认配置,如果用户在lwipopts.h 中配置的相关参数后则会优先使用用户的配置。
3 lwipopt.h
lwipopts.h 是协议栈给用户的配置接口。
// 无操作系统,使用FreeRTOS时为0,使用AutoSar或baremental时为1
#define NO_SYS 1
#if NO_SYS == 0
// 当NO_SYS 为0时,可以使能下面两个选项,NO_SYS为1时下面选项必须配置为0,或不配置,默认为0
// 代表两种应用编程接口
#define LWIP_NETCONN 1
#define LWIP_SOCKET 1
// 网卡相关的函数接口,在FreeRTOS下能用改接口,AutoSar或baremental下不能用。
#define LWIP_NETIF_API 1
#endif
// 内存类相关配置
// 内存对齐,一般是4字节对齐
#define MEM_ALIGNMENT 4
// mem_malloc 使用该内存
// pbuf_alloc 的type==PBUF_RAM时调用mem_malloc 使用该内存
#define MEM_SIZE (22 * 1024)
// udp_new 在不释放的情况下最多创建udp_pcb的个数
#define MEMP_NUM_UDP_PCB 6
// 在不释放的情况下最多创建tcp_pcb的个数
#define MEMP_NUM_TCP_PCB 10
// 在不释放的情况下最多创建的tcp_pcb_listen的个数,监听pcb(服务端pcb)
#define MEMP_NUM_TCP_PCB_LISTEN 6
// 结构体 struct tcp_seg的个数,
// memp_malloc(MEMP_TCP_SEG), 在tcp_write函数中使用
#define MEMP_NUM_TCP_SEG 22
// 超时结构体,struct sys_timeo的个数,
// memp_malloc(MEMP_SYS_TIMEOUT)
// 改值得设置需要大于协议栈的超时时间的个数
// src/core/timeout.c 中数组struct lwip_cyclic_timer lwip_cyclic_timers[]的元素个数
#define MEMP_NUM_SYS_TIMEOUT 10
// pbuf 结构体的个数, 用作pbuf引用。仅申请pbuf结构体,引用别处的payload
// memp_malloc(MEMP_PBUF)
#define MEMP_NUM_PBUF 15
// memp_malloc(MEMP_PBUF_POOL),申请pbuf池中的pbuf(pbuf结构体+payload)
// payload 的长度固定为 PBUF_POOL_BUFSIZE
// pbuf内存池中的pbuf的最大个数
#define PBUF_POOL_SIZE 16
// 一个pbuf的payload 的长度,应设置为以太网帧最大的值
#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
// TCP包在网络中生存时间,默认为255
#define TCP_TTL 255
// 传输层最大段的大小
#define TCP_MSS (1500 - 40)
// 每个tcp_pcb的发送缓存区最大值,在创建tcp_pcb时初始化为改值。
// 不能小于 (2*TCP_MSS)
#define TCP_SND_BUF (6 * TCP_MSS)
#define TCP_SND_QUEUELEN (3 * TCP_SND_BUF) / TCP_MSS
// 每个tcp_pcb的接收窗口最大值,在创建tcp_pcb时初始化为改值。
#define TCP_WND (16 * TCP_MSS)
// 协议栈使能TCP
#define LWIP_TCP 1
// 在使用IPv4的情况下使能ICMP, IPv6下是LWIP_ICMP6
#define LWIP_ICMP 1
// 在使用IPv4的情况下使能DHCP, LWIP_IPV6_DHCP6
#define LWIP_DHCP 1
// 协议栈使能UDP
#define LWIP_UDP 1
// TCP包在网络中生存时间,默认为255
#define TCP_TTL 255
// UDP包在网络中生存时间,默认为255
#define UDP_TTL 255
// 校验选项配置
#ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
#define CHECKSUM_GEN_IP 0
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP 0
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP 0
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
#define CHECKSUM_CHECK_IP 0
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP 0
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP 0
#else
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP 1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP 1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP 1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP 1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP 1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP 1
#endif
//#define LWIP_TIMERS 1
//#define TCP_TMR_INTERVAL 20