当前位置: 首页 > news >正文

TI---sysconfig生成宏

核心内容概览

1. 宏定义的总体作用

SysConfig生成的宏定义是硬件配置的符号化映射,将图形化界面的配置参数转化为可直接引用的编译时常量,核心价值包括:

  • 免硬编码:避免手动写入硬件参数(如引脚号、波特率),减少语法错误和维护成本。
  • 配置可视化:通过宏名即可明确参数含义(如UART0_BAUD_RATE),提升代码可读性。
  • 跨平台适配:同一套代码通过不同SysConfig配置文件,适配不同硬件平台(如开发板A与开发板B的引脚差异)。
  • 自动依赖检查:工具在生成宏时校验配置合法性(如引脚复用冲突时报错),编译阶段暴露问题。
2. 常见宏定义类型及详细解释
2.1 外设使能与存在性宏
#define UART0_ENABLED            (1U)       // UART0外设是否启用(1=启用,0=禁用)
#define I2C1_PRESENT             (1U)       // 硬件是否存在I2C1外设(用于多板卡兼容)
#define ADC0_INSTANCE_AVAILABLE  (1U)       // ADC0实例可用(多实例场景)
  • 作用:标记外设是否被用户在SysConfig中启用,或硬件是否支持该外设。
  • 典型场景
    #if UART0_ENABLEDUART_init(UART0_CONFIG);  // 仅启用时初始化
    #endif
    
2.2 引脚与I/O配置宏
基础引脚属性
#define LED_GPIO_PORT            (GPIO_PORT_A)    // 端口(如GPIOA、GPIOB)
#define LED_GPIO_PIN             (GPIO_PIN_5)     // 引脚号(0-31,具体取决于芯片)
#define LED_GPIO_DIR             (GPIO_DIR_OUT)   // 方向(输入/输出)
#define BUTTON_GPIO_PULL        (GPIO_PULL_UP)    // 上下拉模式(上拉/下拉/无)
#define SPI_CS_GPIO_DRIVE_STRENGTH (GPIO_DS_4MA)  // 驱动强度(如4mA、8mA)
引脚复用(IOMUX)配置
#define UART0_TX_PIN_IOMUX       (IOMUX_FUNC_2)   // 引脚复用为UART0_TX(功能2)
#define ADC_INPUT_PIN_IOMUX      (IOMUX_ANALOG)   // 引脚复用为模拟输入(ADC功能)
  • 作用:解决引脚多功能复用问题,明确引脚的实际功能(如GPIO、UART_TX、SPI_CS等)。
  • 扩展:部分芯片支持引脚摆率、施密特触发等高级属性,对应宏如GPIO_SLEW_RATE_FAST
2.3 中断相关宏
中断基本属性
#define TIMER0_INT_IRQN          (INT_TIMER0)    // 中断请求号(NVIC中的唯一标识)
#define TIMER0_INT_PRIORITY      (3U)             // 中断优先级(数值越小优先级越高)
#define TIMER0_INT_ENABLED       (1U)             // 中断是否使能(由SysConfig勾选生成)
中断分组与向量表
#define NVIC_PRIORITY_GROUP      (NVIC_PRIORITY_GROUP_4)  // 优先级分组策略(0-7组)
#define EINT_BUTTON_INT_VEC      (VECTOR_NUMBER_16)        // 外部中断在向量表中的位置
  • 作用:为中断服务函数(ISR)提供配置参数,如注册中断时指定IRQN和优先级。
  • 注意:部分芯片中断优先级分为“抢占优先级”和“子优先级”,对应宏如INT_PREEMPT_PRIORITYINT_SUB_PRIORITY
2.4 时钟系统宏
核心时钟频率
#define SYS_CLK_FREQ_HZ          (48000000U)      // 系统主时钟频率(如48MHz)
#define HFXTAL_CLK_FREQ_HZ       (24000000U)      // 高速外部晶振频率(用于PLL输入)
#define LFXTAL_CLK_FREQ_HZ       (32768U)         // 低速外部晶振频率(RTC时钟)
外设时钟配置
#define UART0_CLK_ENABLE         (1U)             // UART0时钟是否使能(避免未用外设耗电)
#define ADC_CLK_DIVIDER          (4U)             // ADC时钟分频系数(系统时钟/分频=外设时钟)
  • 作用:确保外设工作在正确的时钟频率下,避免因时钟配置错误导致功能异常。
2.5 外设参数配置宏(以UART/SPI/I2C为例)
UART配置
#define UART0_BAUD_RATE          (115200U)        // 波特率
#define UART0_DATA_BITS          (UART_DATA_8BIT)  // 数据位(7/8位)
#define UART0_STOP_BITS          (UART_STOP_1BIT)  // 停止位(1/2位)
#define UART0_PARITY             (UART_PARITY_NONE)// 奇偶校验(无/奇/偶)
#define UART0_RX_BUFF_SIZE       (64U)            // 接收缓冲区大小(字节)
SPI配置
#define SPI0_MODE                (SPI_MASTER)     // 主/从模式
#define SPI0_CLK_POLARITY        (SPI_CLK_IDLE_LOW) // 时钟极性(CPOL)
#define SPI0_CLK_PHASE           (SPI_CLK_TRAILING) // 时钟相位(CPHA)
#define SPI0_MAX_FREQ_HZ         (10000000U)      // 最大工作频率
I2C配置
#define I2C1_SLAVE_ADDR          (0x40U)          // 从机地址(7位或10位地址)
#define I2C1_CLK_FREQ_HZ         (400000U)        // 通信频率(标准模式100kHz,快速模式400kHz)
  • 特点:外设相关宏通常以[外设名]_为前缀,参数含义直接映射配置界面选项(如波特率下拉框对应UART_BAUD_RATE)。
CAN配置

CAN的配置在文末详细介绍

2.6 多实例与配置结构体宏
extern const UART_Config UART0_Config;        // UART0的预配置结构体
#define UART0_HANDLE             (&UART0_Config) // UART0的句柄(供驱动函数使用)
#define UART_INSTANCE_COUNT      (2U)             // 系统支持的UART实例总数(0和1)
  • 作用:当外设支持多实例(如UART0、UART1)时,通过不同的宏区分实例,并生成对应的配置结构体(如UART0_Config包含该实例的所有参数)。
  • 使用示例
    UART_Handle uart = UART_open(UART0_HANDLE, &uartParams); // 打开UART0实例
    
2.7 电源与功耗管理宏
低功耗模式
#define PM_MODE_ACTIVE           (0U)             // 活动模式(全功能运行)
#define PM_MODE_STANDBY          (1U)             // 待机模式(部分外设断电)
#define PM_MODE_SLEEP            (2U)             // 睡眠模式(CPU停止,外设可选关闭)
功耗控制参数
#define PM_IDLE_TIMEOUT_MS       (100U)           // 空闲超时时间(超时后进入低功耗模式)
#define FLASH_POWER_DOWN_ENABLE  (1U)             // 允许Flash进入掉电模式(降低功耗)
  • 扩展:部分芯片支持唤醒源配置,如PM_WAKEUP_PIN_ENABLED(允许GPIO引脚唤醒低功耗模式)。
2.8 系统与平台信息宏
#define CHIP_MODEL               ("TM4C129")      // 芯片型号(字符串宏)
#define BOARD_NAME               ("LAUNCHXL-TM4C129") // 开发板名称
#define COMPILER_VERSION         ("GCC 11.3.1")   // 编译工具链版本(可选,由SysConfig生成)
  • 作用:方便代码中获取硬件平台信息,用于版本适配或日志输出。
2.9 用户自定义与条件宏
// 用户在SysConfig中手动添加的宏
#define USER_APP_VERSION         ("V1.2.0")       
// 根据配置选项动态生成的宏(如勾选“启用WiFi”时生成)
#define FEATURE_WIFI_ENABLED     (1U)             
  • 创建方式:通过SysConfig界面的“Custom Defines”选项添加,或利用工具的条件配置功能(如勾选框对应生成_ENABLED宏)。
2.10 错误与调试宏
#define ASSERT_ENABLED           (1U)             // 启用断言检查(调试模式)
#define DEBUG_UART_ID            (UART0)          // 调试串口实例(用于printf输出)
#define DEBUG_PIN_DEBUG_ENABLE   (0U)             // 禁用引脚调试输出(发布版优化)
3. 宏定义的命名规则与规范
  1. 命名格式

    • 全大写+下划线:如UART0_BAUD_RATE,禁止驼峰命名。
    • 前缀标识所属模块
      • 外设类:UART_SPI_ADC_
      • 引脚类:GPIO_IOMUX_
      • 系统类:SYS_PM_BOARD_
    • 多实例后缀:通过_0_1区分实例(如UART0_UART1_)。
  2. 避免冲突

    • SysConfig生成的宏自动添加唯一前缀(如DL_为TI Drivers Library前缀),用户自定义宏需避免与工具生成宏重名。
    • 示例:用户定义MY_UART_BAUD而非UART_BAUD_RATE,防止覆盖工具生成的宏。
  3. 条件编译保护

    • 生成的头文件包含保护宏,避免重复包含:
      #ifndef SYS_CONFIG_H
      #define SYS_CONFIG_H
      // 宏定义内容
      #endif
      
4. 宏定义的使用场景与最佳实践
4.1 外设初始化
// 直接使用宏作为参数调用驱动函数
UART_init(UART0_BAUD_RATE, UART0_DATA_BITS, UART0_STOP_BITS);// 多实例场景通过句柄宏选择实例
GPIO_setDirection(GPIO_LED_PORT, GPIO_LED_PIN, GPIO_DIR_OUT);
4.2 条件编译与配置检查
// 仅启用时编译相关代码
#if UART0_ENABLED && (UART0_BAUD_RATE >= 9600)void uart_send_data(uint8_t *data, uint32_t len);
#endif// 编译时报错提示配置错误
#if (UART0_BAUD_RATE > 2000000)#error "UART baud rate exceeds hardware limit!"
#endif
4.3 与硬件抽象层(HAL)结合
// HAL函数内部使用宏获取配置参数
void HAL_UART_Init(UART_Handle handle) {handle->baudRate = UART0_BAUD_RATE;handle->dataBits = UART0_DATA_BITS;// ...
}// 用户代码通过宏选择HAL操作的实例
HAL_UART_Transmit(UART0_HANDLE, buffer, len);
4.4 动态配置切换(运行时)
// 根据宏定义设置不同的工作模式
if (UART0_BAUD_RATE == 115200) {set_high_speed_mode();
} else {set_low_speed_mode();
}
5. 注意事项与常见问题
5.1 注意事项
  • 不手动修改生成的宏:直接修改sys_config.h中的宏会被工具覆盖,应通过SysConfig界面重新配置。
  • 检查宏作用域:确保宏定义的头文件(如sys_config.h)已包含在项目中,且路径正确。
  • 数值类型后缀:宏值常带U(无符号)或L(长整型)后缀,避免类型溢出(如48000000U而非48000000)。
5.2 常见问题排查
问题现象可能原因解决方法
宏未定义报错未在SysConfig中启用对应外设勾选外设配置,重新生成代码
引脚功能异常IOMUX宏配置错误(如复用为错误功能)检查SysConfig中引脚复用设置
中断不触发优先级宏超出芯片支持范围(如设为8,而芯片仅支持0-7)参考芯片手册,修正优先级配置
波特率不匹配宏值与硬件电路晶振频率冲突确保SYS_CLK_FREQ_HZ与实际晶振一致
6. 宏定义与工具链的深度整合
  • 自动代码生成:SysConfig不仅生成宏,还会生成外设初始化函数(如UART_init()),函数内部直接使用宏参数,用户无需关心底层寄存器操作。
  • 依赖分析:工具在生成宏时自动解析依赖关系(如启用UART时自动使能对应时钟宏UART0_CLK_ENABLE),避免用户漏配。
  • 可视化映射:配置界面的每个选项直接对应一个或多个宏,修改界面参数后,宏值实时更新并重新生成头文件。
7. 总结

SysConfig生成的宏定义是嵌入式开发中硬件配置的“数字孪生”,覆盖从引脚到系统级的全维度参数,具备以下核心优势:

  • 零代码配置:通过图形界面完成复杂硬件配置,宏定义自动同步。
  • 类型安全:宏值结合芯片数据手册约束(如波特率范围、优先级范围),编译阶段校验。
  • 无缝集成驱动:与TI Driver Library等官方驱动深度适配,宏直接作为驱动函数的输入参数。

掌握这些宏的分类、命名规则及使用场景,可高效完成从硬件配置到软件实现的全流程开发,避免95%以上的手动配置错误。实际项目中,建议通过以下步骤提升效率:

  1. 优先通过SysConfig界面修改配置,而非直接编辑宏。
  2. 利用宏的注释(如// Range: 1200-2000000)确保参数合法。
  3. 结合芯片数据手册,理解每个宏的硬件含义(如中断优先级与NVIC寄存器的映射)。

通过系统化使用这些宏定义,开发者可将精力聚焦于业务逻辑,而非底层硬件细节,显著提升嵌入式系统开发的效率与可靠性。


CAN配置并使用实例

TI 的 SysConfig 工具 是用于配置 TI 微控制器外设的图形化工具,可生成高效、可维护的初始化代码和宏定义。以下针对 CAN 通信相关的生成宏 进行详细讲解,覆盖配置流程、核心宏定义、功能参数及代码应用,确保 95% 以上的内容覆盖。

一、CAN 模块基础配置宏

1. 模块使能与实例定义
#define CAN0_MODULE_ENABLED       1       // 使能 CAN0 模块(0/1)
#define CAN0_INSTANCE             CAN0    // CAN 实例(对应硬件模块,如 CAN0、CAN1)
#define CAN0_BASEADDR             0x40060000UL  // 模块基地址(根据芯片型号生成)
  • 作用:启用 CAN 外设,指定硬件实例和物理地址。
  • 生成逻辑:通过 SysConfig 界面勾选 “Enable CAN” 后自动生成,多实例芯片(如 TMS320F28379D)可配置多个 CAN 模块(CAN0、CAN1)。
2. 引脚配置(GPIO 复用)
#define CAN0_TX_GPIO             GPIO28    // CAN0 TX 引脚(如 GPIO28)
#define CAN0_TX_GPIO_PIN         14        // 引脚编号(根据芯片数据手册)
#define CAN0_TX_GPIO_MODULE       GPIOA     // 所属 GPIO 模块(如 GPIOA、GPIOB)
#define CAN0_TX_GPIO_FUNCTION     4         // 复用功能(CAN_TX 对应功能选择值)
#define CAN0_RX_GPIO             GPIO29    // CAN0 RX 引脚
#define CAN0_RX_GPIO_PIN         15
#define CAN0_RX_GPIO_MODULE       GPIOA
#define CAN0_RX_GPIO_FUNCTION     4         // CAN_RX 复用功能
  • 作用:配置 CAN 收发引脚的 GPIO 复用功能,包括引脚编号、模块归属、功能选择(通过 sysconfig 界面拖拽引脚分配生成)。
  • 附加配置:可生成上拉/下拉电阻使能(如 CAN0_RX_GPIO_PULLUP_ENABLED)、驱动强度等(视芯片支持而定)。

二、波特率与时序参数宏

1. 波特率配置核心参数
#define CAN0_BAUD_RATE          500000UL  // 目标波特率(500kbps 为例)
#define CAN0_CLK_SOURCE         CAN_CLK_SRC_SYSCLK  // 时钟源(系统时钟或外部时钟)
#define CAN0_SYSCLK_FREQ        200000000UL  // 系统时钟频率(200MHz 为例)
  • 作用:指定 CAN 通信波特率及时钟源,SysConfig 会根据输入的波特率自动计算时序参数。
2. 时序寄存器参数(自动计算)
#define CAN0_BIT_TIME_SEG1      6           // 时间段 1(TSEG1,1-8 或 1-25 取决于芯片)
#define CAN0_BIT_TIME_SEG2      3           // 时间段 2(TSEG2,1-8 或 1-25)
#define CAN0_PROP_SEG           1           // 传播段(PROP_SEG,1-8)
#define CAN0_PRESCALER          25          // 预分频器(TQ = SYSCLK/(PRESCALER+1))
#define CAN0_SAMPLE_POINT       75          // 采样点位置(%,75% 为例)
  • 计算逻辑
    • 位时间 = (TSEG1 + TSEG2 + 1) × TQ
    • 波特率 = 系统时钟频率 / [(PRESCALER + 1) × (TSEG1 + TSEG2 + 1)]
    • SysConfig 通过图形化界面输入波特率后自动计算上述参数,避免手动计算错误。

三、滤波器与消息对象配置

1. 滤波器组配置(以 eCAN 模块为例)
#define CAN0_FILTER_MODE        CAN_FILTER_MODE_STD  // 滤波器模式(标准帧/扩展帧)
#define CAN0_FILTER_NUMBER      2                    // 滤波器组数量(如 2 组)
2. 单个滤波器参数(滤波器 0)
#define CAN0_FILTER0_ENABLED    1                    // 使能滤波器 0
#define CAN0_FILTER0_ID         0x123                // 滤波器 ID(标准帧 11 位/扩展帧 29 位)
#define CAN0_FILTER0_MASK       0x7FF                // 掩码(与 ID 同长度,匹配有效位)
#define CAN0_FILTER0_FIFO      CAN_FIFO0             // 关联 FIFO(FIFO0 或 FIFO1)
#define CAN0_FILTER0_ACCEPTANCE_MODE  CAN_ACCEPT_MATCH_ANY  // 接收模式(匹配任意/全部位)
  • 作用:定义滤波器的 ID、掩码、关联的 FIFO,实现消息过滤(仅接收符合条件的帧)。
  • 扩展:多滤波器组时生成 FILTER1FILTER2 等宏,支持配置为接收邮箱(Message Object)模式(如 TMS320 系列的 eCAN)。

四、中断与错误处理宏

1. 中断使能与优先级
#define CAN0_INT_ENABLED        1                    // 使能 CAN 模块中断
#define CAN0_INT_PRIORITY       3                    // 中断优先级(0-7,数值越小优先级越高)
#define CAN0_INT_SUBCORE        SYS_INT_SUBCORE_NONE // 中断所属子核心(多核芯片适用)
#define CAN0_RX_INT_ENABLED     1                    // 使能接收中断
#define CAN0_TX_INT_ENABLED     1                    // 使能发送中断
#define CAN0_ERROR_INT_ENABLED  1                    // 使能错误中断(总线错误、ACK 错误等)
  • 生成逻辑:SysConfig 界面勾选中断类型(接收、发送、错误)后生成对应宏,优先级可通过滑动条配置。
2. 错误处理参数
#define CAN0_ERROR_WARNING_THRESHOLD  96   // 错误警告阈值(接收/发送错误计数器 ≥96 时触发警告)
#define CAN0_BUS_OFF_AUTO_RECOVERY    1    // 使能总线关闭自动恢复(1 表示自动重启 CAN 模块)
  • 作用:设置错误处理策略,如总线关闭(Bus Off)后的恢复机制。

五、工作模式与高级配置

1. 工作模式选择
#define CAN0_OPERATION_MODE     CAN_MODE_NORMAL       // 工作模式:
// 可选值:CAN_MODE_NORMAL(正常模式)、CAN_MODE_SILENT(静默模式)、
// CAN_MODE_LOOPBACK(环回测试模式)、CAN_MODE_CONFIG(配置模式)
  • 环回测试模式:用于自测,发送的消息直接被本地接收,不输出到总线。
  • 配置模式:用于初始化滤波器、波特率等参数(必须在该模式下配置)。
2. 高级功能配置
#define CAN0_AUTO_RETRANSMIT    1                    // 使能自动重传未成功发送的消息
#define CAN0_USE_EXTENDED_ID    0                    // 是否使用扩展 ID(0=标准帧,1=扩展帧)
#define CAN0_MAX_DATA_LENGTH    8                    // 数据长度码(DLC,0-8,部分芯片支持 0-64)
#define CAN0_TX_QUEUE_ENABLED   1                    // 使能发送队列(支持多条消息排队)
  • 自动重传:发送失败时自动重传,直到成功(需禁用自动退出配置模式)。
  • 扩展 ID:支持 29 位 ID(扩展帧)或 11 位 ID(标准帧),需与滤波器模式匹配。

六、生成代码与宏的应用

1. 初始化函数与宏关联

SysConfig 生成的初始化代码(如 CAN_init())会读取上述宏,例如:

void CAN_init(CAN_Handle handle) {// 配置波特率CAN_setBitRate(handle, CAN0_SYSCLK_FREQ, CAN0_PRESCALER, CAN0_BIT_TIME_SEG1, CAN0_BIT_TIME_SEG2);// 使能模块CAN_enableModule(handle);// 配置滤波器CAN_configFilter(handle, CAN0_FILTER0_ID, CAN0_FILTER0_MASK, CAN0_FILTER0_FIFO);// 使能中断CAN_enableInterrupts(handle, CAN_INT_RX | CAN_INT_ERROR);
}
2. 用户代码中使用宏
#include "ti_drivers_config.h"  // 包含生成的配置头文件void CAN_sendMessage(uint32_t id, uint8_t* data, uint8_t dlc) {CAN_Message msg;msg.id = id;msg.data = data;msg.dlc = dlc;// 使用波特率宏验证兼容性if (CAN0_BAUD_RATE != 500000UL) {// 错误处理}CAN_transmit(CAN0_INSTANCE, &msg);
}

七、特殊场景与注意事项

  1. 多核芯片(如 Hercules 系列)
    • 生成 CAN0_INT_AFFINITY 宏指定中断绑定的核心(如 CORE_ACORE_B)。
  2. 兼容性
    • 宏定义依赖芯片型号(如 F28379D 的 eCAN 与 MSP430 的 CAN 模块差异),SysConfig 会根据所选器件生成对应代码。
  3. 调试工具
    • 配合 SysConfig 的 “Validation” 功能,可检查波特率、滤波器配置是否冲突。
总结

SysConfig 生成的 CAN 相关宏覆盖了从 引脚复用、波特率配置、滤波器规则、中断控制到高级功能 的全流程配置,避免了手动编写寄存器配置的复杂性。用户通过图形化界面配置后,工具自动生成类型安全、高效的宏定义,显著提升开发效率。如需修改配置,只需在 SysConfig 中调整参数并重新生成代码,无需手动修改宏定义,确保了代码的可维护性和一致性。

相关文章:

TI---sysconfig生成宏

核心内容概览 1. 宏定义的总体作用 SysConfig生成的宏定义是硬件配置的符号化映射,将图形化界面的配置参数转化为可直接引用的编译时常量,核心价值包括: 免硬编码:避免手动写入硬件参数(如引脚号、波特率&#xff0…...

【C】初阶数据结构13 -- 快速排序

本篇文章主要讲解经典的排序算法 -- 快速排序算法 目录 1 递归版本的快速排序 1) 算法思想 (1) hoare 版本 (2) 双指针版本 (3) 挖坑法 2) 代码 3) 时间复杂度…...

Spring Boot 3.4 实战指南:从性能优化到云原生增强

一、核心新特性概览 Spring Boot 3.4 于 2024 年 11 月正式发布,带来 6 大维度的 28 项改进。以下是实战开发中最具价值的特性: 1. 性能革命:虚拟线程与 HTTP 客户端优化 虚拟线程支持:Java 21 引入的虚拟线程在 Spring Boot 3…...

Git分支重命名与推送参数解析

这两个参数的解释如下: git branch -M master 中的 -M 参数 -M 是 --move --force 的组合简写,表示强制重命名当前分支为 master。如果当前分支已经存在名为 master 的分支,-M 会强制覆盖它(慎用,可能导致数据丢失&…...

深度学习中的预训练与微调:从基础概念到实战应用全解析

摘要 本文系统解析深度学习中预训练与微调技术,涵盖核心概念、技术优势、模型复用策略、与迁移学习的结合方式,以及微调过程中网络参数更新机制、模型状态分类等内容。同时深入分析深层神经网络训练难点如梯度消失/爆炸问题,为模型优化提供理…...

EMC-148.5MHz或85.5辐射超标-HDMI

EMC 148.5MHz或85.5辐射超标-HDMI 遇到了一台设备过不了EMC ,经排查主要是显示器的HDMI问题 解决办法看看能否更换好一点的HDMI线缆...

DeepSeek系列(9):团队协作最佳实践

团队知识库构建 在知识经济时代,团队知识的有效管理和传递是组织核心竞争力的关键。DeepSeek可以成为打造高效团队知识库的得力助手,让知识管理从繁重工作变为自动化流程。 知识库架构设计 多层次知识结构 一个高效的团队知识库应具备清晰的层级结构,DeepSeek可以协助:…...

信息系统项目管理工程师备考计算类真题讲解十

一、立项管理 1)折现率和折现系数:折现也叫贴现,就是把将来某个时间点的金额换算成现在时间点的等值金额。折现时所使用的利率叫折现率,也叫贴现率。 若n年后能收F元,那么这些钱在现在的价值,就是现值&am…...

第1章 基础知识

1.1 机器语言 1.2 汇编语言的产生 用汇编语言编写程序的工作过程如下: 1.编写程序:汇编程序包括汇编指令、伪指令、其他符号,如下图。其中,“伪指令”并不是由计算机直接执行的指令,而是帮助编译器完成“编译”的符号。 2.编译:将汇编程序转换成机器码。 3.计算机执行。 …...

16.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Github Action

GitHub Actions 是 GitHub 提供的持续集成和持续部署(CI/CD)平台,它允许我们自动化软件开发工作流程。通过 GitHub Actions,我们可以构建、测试和部署代码,而无需手动干预。 一、基本概念 1.1 Workflow(工作流) 工作…...

‌MySQL 事务隔离级别详解

‌ 以下是 MySQL 支持的四种事务隔离级别及其特性,按并发安全性从低到高排列: ‌1. 读未提交 (Read Uncommitted)‌ ‌问题‌: ‌脏读 (Dirty Read)‌:事务可读取其他事务未提交的数据。‌不可重复读 (Non-repeatable Read)‌&am…...

A. Ambitious Kid

time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…...

C19-while循环及for循环等价引入

一 while的表达式 //while的表达式有三个 #include <stdio.h> int main() { int sum; int data1; //第一个表达式,条件的初始值while(data<100){ //第二个表达式,条件的临界值sumsumdata;data; //第三个表达式,条件变化}printf("0至100的和是:%d\n",sum);…...

华为盘古OS深度评测:构建AI自进化系统的实践密码

华为盘古OS通过分布式AI内核与自适应学习框架的深度耦合&#xff0c;重新定义操作系统级智能能力。实测显示其AI任务调度效率较传统系统提升17倍&#xff0c;本文从智能体编排、持续学习机制、端云协同架构三个维度&#xff0c;解析如何基于DevKit 3.0打造具备认知进化能力的下…...

SpringBoot UserAgentUtils获取用户浏览器 操作系统设备统计 信息统计 日志入库

介绍 UserAgentUtils 是于处理用户代理&#xff08;User-Agent&#xff09;字符串的工具类&#xff0c;一般用于解析和处理浏览器、操作系统以及设备等相关信息&#xff0c;这些信息通常包含在接口请求的 User-Agent 字符串中。 这个库可以用于解析用户代理头&#xff0c;以提…...

PCL绘制点云+法线

读取的点云ASCII码文件&#xff0c;每行6个数据&#xff0c;3维坐标3维法向 #include <iostream> #include <fstream> #include <vector> #include <string> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pc…...

DataStreamAPI实践原理——计算模型

引入 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在 无边界 和 有边界 数据流上进行有状态的计 算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。Flink可以处理批数据也可以处理流数据&#xff0c;本质上&#xff0c;流处理…...

【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)

由于各种网络政策&#xff0c;在国内访问DockerHub速度会非常缓慢&#xff0c;大家一般都会采取更换镜像源的方式来进行加速。但是&#xff0c;2024.6之后&#xff0c;由于政策的加强&#xff0c;大部分常见的镜像源已经无法使用&#xff0c;可能在更换镜像源后出现如下报错信息…...

【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

本文介绍了MCP大模型上下文协议的的概念&#xff0c;并对比了MCP协议和function call的区别&#xff0c;同时用python sdk为例介绍了mcp的使用方式。 1. 什么是MCP&#xff1f; 官网&#xff1a;https://modelcontextprotocol.io/introduction 2025年&#xff0c;Anthropic提出…...

交换机之配置系统基本信息(Basic Information of the Configuration System for Switches)

交换机之配置系统基本信息 本文章中的信息都是基于一些特定实验环境写的。文章中使用的所有设备最初均采用缺省配置启动。如果不按初始配置&#xff0c;有可能会导致本文中的部分或全部步骤失败。如果您使用的是真实网络设备&#xff0c;请确保您已经了解所有使用过的命令影响。…...

贝叶斯算法学习

贝叶斯算法学习 贝叶斯算法基础与原理应用场景主要分类优缺点​简单示例代码实现 贝叶斯算法是基于贝叶斯定理的一种统计学习方法&#xff0c;在机器学习、数据挖掘、自然语言处理等领域有广泛应用。以下是其原理、应用和示例的详细介绍&#xff1a; 贝叶斯算法基础与原理 贝…...

Java 日志:掌握本地与网络日志技术

日志记录是软件开发中不可或缺的一部分&#xff0c;它为开发者提供了洞察应用程序行为、诊断问题和监控性能的手段。在 Java 生态系统中&#xff0c;日志框架如 Java Util Logging (JUL)、Log4j 和 Simple Logging Facade for Java (SLF4J) 提供了丰富的功能。然而&#xff0c;…...

线程池单例模式

线程池的概念 线程池是一种线程使用模式。 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。…...

物联网安全解决方案介绍:有效利用现有的下一代防火墙

管理物联网设备安全的挑战 如今,随着IoT(物联网)的普及,可以集中管理相机、打印机、传感器、电器、机床等各种设备,并分析和有效利用从这些设备收集的数据。这些设备已成为商业环境中不可或缺的一部分,但设备的多样化使其难以管理。与PC、服务器和网络设备不同,识别物联…...

Java社区门诊系统源码 SaaS医院门诊系统源码 可上线运营

Java社区门诊系统源码 SaaS医院门诊系统源码 医院门诊系统适用于&#xff1a;社区卫生服务站、门诊部、诊所、村卫生室等&#xff0c;有上百家医疗机构正常使用&#xff1b;包括医保结算。 系统功能 &#xff08;一&#xff09;后端管理系统功能 用户管理&#xff1a;提供用…...

如何在 Windows 10 中使用 WSL 和 Debian 安装 Postgresql 和 Postgis

安装 Postgresql 和 Postgis 的常规方法需要设置多个二进制文件&#xff0c;并且工作流程通常在图形用户界面 (GUI) 上进行。我们希望找到一种在 Windows 10 中安装 Postgresql 和 Postgis 的方法&#xff0c;同时保留 Linux 的 shell 体验。本教程展示了在 Windows 10 中的 De…...

[论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting

Mip-Splatting: Alias-free 3D Gaussian Splatting 论文地址&#xff1a;https://arxiv.org/abs/2403.17888 源码地址&#xff1a;https://github.com/autonomousvision/mip-splatting 项目地址&#xff1a;https://niujinshuchong.github.io/mip-splatting/ 论文解读 两个主…...

MongoDB 入门使用教程

MongoDB 入门使用教程 MongoDB 是一个开源的 NoSQL 数据库&#xff0c;使用文档&#xff08;JSON-like&#xff09;存储数据&#xff0c;与传统的关系型数据库不同&#xff0c;它不依赖表结构和行列的约束。MongoDB 提供了强大的查询能力&#xff0c;支持高效的数据存储和检索…...

PowerBI动态路径获取数据技巧

PowerBI动态路径获取数据技巧 场景一&#xff1a;同事接力赛——不同电脑共用模板 &#xff08;想象一下&#xff1a;小王做完报表要传给小李&#xff0c;结果路径总对不上怎么办&#xff1f;&#xff09; 这种情况就像接力赛交接棒&#xff0c;每台电脑的账户名不同&#xff0…...

【数据结构】优先级队列

目录 1. 优先级队列概念 2. 优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 向下调整的时间复杂度 2.3.2 建堆时间复杂度 2.3.3 向上调整的时间复杂度 2.4 堆的插入与删除 3. 堆的应用 4. 常用接口介绍 4.1 PriorityQueue的特性 4.2 Pri…...

Myweb项目——面试题总结

一.项目描述 项⽬概述&#xff1a;本项⽬在云服务上开发了⼀个后端服务器与前端⻚⾯为⼀体的⾳乐专辑 鉴赏⽹站&#xff0c;旨在为⽤⼾提供丰富的⾳乐专辑信息展⽰和优 质的浏览体验。 主要内容及技术&#xff1a; 后端开发&#xff1a;利⽤ C 语⾔构建后端服务器&#xff0c;…...

用高德API提取广州地铁线路(shp、excel)

目录 结果示例html文件——直观看出输出的效果excel文件——包括地铁的具体信息完整代码网络上现有的地铁数据要么过于老旧且不便于更新,要么过于定制化限定于具体的城市无法灵活调整得到自己真正想要的那部份数据。而使用高德的API可以非常方便得到全国各地的地铁数据,而且可…...

leetcode110 平衡二叉树

一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 二叉树节点的深度&#xff1a;指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度&#xff1a;指从该节点到叶子节点的最长简单路径边的条数。 递归&#xff1a;…...

二、信息时代社会结构的转变

到了信息时代,以及在核武器的前提下,上述的社会结构的逻辑,就有了一个根 本性的转变,就是暴力的成本和收益,都在下降。 暴力的成本在降低。比如说枪支,它的制造和分发都变得非常容易。现在我们都 知道有 3D 打印,它就好像工业时代的印刷机,印刷圣经或者书籍,使知识更加 普及和容…...

Vue2+ElementUI实现无限级菜单

使用Vue2和ElementUI实现无限级菜单,通常菜单数据以树形结构存储,每个菜单包含多个子菜单 ,子菜单又可以继续包含更深层次的子菜单项。所以,需要使用递归形式,完成子项菜单的渲染。 这里,结合Element UI界面的el-menu和el-submenu组件来构建菜单结构,有子菜单时使用el-s…...

YTJ笔记——FFT、NCC

FFT算法 快速傅里叶算法 为了计算两个多项式相乘&#xff08;卷积&#xff09;&#xff0c;将多项式系数表示法转换成点值表示法 F(g(x)∗f(x))F(g(x))F(f(x)&#xff09; 超详细易懂FFT&#xff08;快速傅里叶变换&#xff09;及代码实现_傅立叶变换编程-CSDN博客 NCC算法…...

模型 隐含前提

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。隐藏的思维地基&#xff0c;决策的无声推手。 1 隐含前提模型的应用 1.1 金融投资决策—科技股估值隐含前提的验证 行业&#xff1a;金融投资 应用方向&#xff1a;投资逻辑验证 背景解读&#xff1…...

大模型微调与蒸馏的差异性与相似性分析

大模型微调与蒸馏的差异性分析 一、定义与核心目标差异 大模型微调 在预训练大模型基础上&#xff0c;通过少量标注数据调整参数&#xff0c;使模型适应特定任务需求。核心目标是提升模型在特定领域的性能&#xff0c;例如医疗影像分析或金融预测。该技术聚焦于垂直场景的精度…...

Ubuntu下安装vsode+qt搭建开发框架(一)

Ubuntu下安装vsode+qt搭建开发框架(一) g++的编译环境,这里不介绍,可点击这里查看 查看一下当前的g++环境 g++ --version g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copyin…...

单片机-89C51部分:3、创建工程

飞书文档https://x509p6c8to.feishu.cn/wiki/Mzhnwb1qni6YkykJtqXc17XMnre 创建工程 首先创建一个文件夹&#xff0c;用来存放工程文件&#xff0c;文件夹名称最好为英文&#xff0c;例如Demo1。 打开软件KEIL&#xff0c;上方菜单栏选择Project ->new uVision Project&am…...

从零实现 registry.k8s.io/pause:3.8 镜像的导出与导入

以下是为 registry.k8s.io/pause:3.8 镜像的导出与导入操作定制的完整教程&#xff0c;适用于 Kubernetes 集群中使用 containerd 作为容器运行时的场景。本教程包含详细步骤、常见问题解析及注意事项。 从零实现 registry.k8s.io/pause:3.8 镜像的导出与导入 背景说明 Kuber…...

详解Adobe Photoshop 2024 下载与安装教程

Adobe Photoshop下载安装和使用教程 Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地进行图片编辑和创造工作&#xff0c…...

thinking-intervention开源程序用于DeepSeek-R1等推理模型的思维过程干预,有效控制推理思考过程

一、软件介绍 文末提供程序和源码下载 thinking-intervention开源程序用于DeepSeek-R1等推理模型的思维过程干预&#xff0c;有效控制推理思考过程。基于论文 《Effectively Controlling Reasoning Models through Thinking Intervention》 实现的思维干预技术&#xff0c;用于…...

Qt 5.15 编译路径吐槽点

在Qt 5.15以前&#xff0c;勾选“Shadow build”会自动将编译文件放在同一个目录下&#xff08;区分编译器类型、Qt版本、debug和release等&#xff09;&#xff0c;可将代码文件和编译文件区分开&#xff0c;用户不用操心。但是奇葩的是&#xff0c;这个功能Qt 5.15居然失效了…...

【机器学习-线性回归-3】深入浅出:简单线性回归的概念、原理与实现

在机器学习的世界里&#xff0c;线性回归是最基础也是最常用的算法之一。作为预测分析的基石&#xff0c;简单线性回归为我们理解更复杂的模型提供了完美的起点。无论你是机器学习的新手还是希望巩固基础的老手&#xff0c;理解简单线性回归都至关重要。本文将带你全面了解简单…...

【MCP Node.js SDK 全栈进阶指南】中级篇(5):MCP客户端高级开发

在前面的系列文章中,我们主要关注了服务器端的开发,包括基础服务器构建、资源设计、身份验证与授权以及错误处理与日志系统。本篇文章将转向客户端,探讨MCP TypeScript-SDK在客户端开发中的高级应用。 客户端开发是MCP应用的重要组成部分,它连接了用户与服务器,提供了交互…...

RASP技术在DevOps中的安全应用

随着新技术的不断演进&#xff0c;DevOps开发模式不断被利用&#xff0c;Web应用程序的开发相比过往更高效。随之而来的是保护这些应用程序同样面临着巨大挑战&#xff0c;黑客的攻击手段不断多变&#xff0c;而DevOps团队成员却不都是安全专家&#xff0c;难以保证应用程序的安…...

2025.04.26-饿了么春招笔试题-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 魔法网格变换计数 问题描述 LYA是一位魔法研究学者,她正在研究一种特殊的魔法网格。这个网格有 n n n...

Linux线程与进程:探秘共享地址空间的并发实现与内

Linux系列 文章目录 Linux系列前言一、线程的概念二、线程与地址空间2.1 线程资源的分配2.2 虚拟地址到物理地址的转换 三 、线程VS进程总结 前言 在Linux操作系统中&#xff0c;线程作为CPU调度的基本单位&#xff0c;起着至关重要的作用。深入理解线程控制机制&#xff0c;是…...

数据结构手撕--【堆】

目录 ​编辑 定义结构体&#xff1a; 初始化&#xff1a; 插入数据&#xff1a; 删除&#xff1a; 取堆顶元素&#xff1a; 堆销毁&#xff1a; 判断堆是否为空&#xff1a; TopK问题&#xff1a; 堆其实是完全二叉树 物理结构&#xff1a;二叉树的层序遍历&#xff08…...