手把手教你配置IAR的checksum功能:从CRC算法选择到Flash范围设置
深入解析IAR嵌入式校验和配置从算法原理到安全认证实战最近在为一个工业控制器项目做安全认证预审时团队遇到了一个棘手的问题同一份固件代码在不同开发人员的机器上编译后生成的HEX文件校验和竟然不一致。这直接影响了后续的产线烧录和现场升级流程。经过一番排查发现问题根源在于IAR开发环境中校验和功能的配置细节——那些看似简单的复选框和参数输入框背后其实隐藏着嵌入式系统可靠性的关键逻辑。对于需要满足功能安全标准如IEC 61508、ISO 26262的产品来说固件的完整性校验不是可选项而是强制要求。无论是医疗设备、汽车电子还是工业控制器启动时的自检Boot-Time Self-Test和运行时的周期性检查Run-Time Periodic Test都依赖于预先计算并存储在Flash中的校验值。IAR Embedded Workbench作为业界主流的嵌入式开发工具其内置的校验和生成功能为开发者提供了便捷的实现路径但真正用好这个功能需要理解从算法选择到存储范围设置的每一个环节。这篇文章将从一个实际工程案例出发系统梳理IAR校验和功能的完整配置流程。我不会简单重复官方手册的操作步骤而是结合在安全认证项目中积累的经验深入探讨配置参数背后的设计考量分享那些容易踩坑的细节并提供可复用的配置模板。无论你是刚刚接触功能安全开发还是正在为校验和一致性头疼的资深工程师相信都能从中找到实用的解决方案。1. 校验和功能的核心价值与安全认证背景在嵌入式系统中固件存储在非易失性存储器通常是Flash中。由于环境干扰、器件老化或意外写入等因素存储的内容可能在产品生命周期内发生位翻转或数据损坏。对于安全关键系统这种损坏如果未被检测到可能导致灾难性后果。因此各类功能安全标准都明确要求对程序存储器实施完整性保护。校验和Checksum或循环冗余校验CRC是实现这种保护的基础机制。其基本原理是在编译链接阶段对整个或部分Flash区域计算一个固定长度的摘要值然后将这个值一同写入Flash的预留位置。系统上电或运行时软件重新计算当前Flash内容的校验值与预先存储的值进行比较。如果两者匹配则认为固件完整如果不匹配则触发安全处理机制如进入安全状态、尝试恢复或报警。注意校验和主要用于检测意外损坏不能替代加密签名等防篡改机制。对于需要防止恶意篡改的场景应结合数字签名等密码学方法。IAR的校验和功能集成在链接器Linker配置中可以在生成最终可执行文件时自动完成计算和嵌入。这个设计看似简单但要确保其在实际项目中可靠工作必须理解以下几个关键点计算范围的一致性编译时计算的范围与运行时软件计算的范围必须完全一致否则比较结果必然失败算法的可重现性不同工具链、不同配置下计算的校验值必须一致存储位置的确定性校验值在Flash中的存储位置必须固定且已知以便运行时访问与硬件CRC外设的兼容性如果使用MCU内置的CRC硬件加速器软件配置必须与硬件特性匹配下面这个表格对比了不同安全等级对存储器完整性检查的典型要求安全等级检查频率允许的检测延迟典型应用场景SIL 1 / ASIL A上电时一次性检查数秒内完成家用电器、简单工业控制SIL 2 / ASIL B上电检查 周期性检查数百毫秒内完成医疗监测设备、汽车车身控制SIL 3 / ASIL C上电检查 高频率周期检查数十毫秒内完成刹车系统、航空电子SIL 4 / ASIL D上电检查 实时连续检查数毫秒内完成飞机飞控、核电站保护系统从表格可以看出安全等级越高对检查的实时性和频率要求也越高。这直接影响校验算法的选择——计算速度慢但检错能力强的算法可能不适合高实时性要求的场景。2. IAR校验和配置的完整工作流程2.1 工程配置的基础准备在开始配置校验和之前确保你的IAR工程已经能够正常编译生成HEX或BIN文件。特别要注意的是不同版本的IAR可能在默认配置或某些细节处理上存在差异这是导致相同工程不同校验和问题的常见原因之一。首先检查工程的基本配置是否一致工具链版本确认所有开发人员使用相同版本的IAR Embedded Workbench编译器选项特别是优化级别Optimization level和代码生成选项链接器配置包括内存布局ICF文件和段Section的定义输出文件格式HEX文件的格式Intel HEX还是Motorola S-record我曾经遇到过一个典型案例团队中有人使用IAR 8.40有人使用8.50编译同一工程时校验和不同。经过对比发现新版本对某些内置函数的实现做了微调导致生成的代码大小有细微差异。解决方法是在工程目录中明确指定工具链版本或者统一升级到相同版本。2.2 链接器脚本ICF文件的关键修改链接器脚本定义了程序在内存中的布局这是校验和配置的基础。我们需要在Flash的末尾预留固定位置来存储校验值确保这个位置不会因为代码大小的变化而被占用。在IAR的ICF文件中通常会有类似下面的Flash区域定义define region FLASH mem:[from 0x08000000 to 0x0807FFFF];为了给校验和预留空间我们需要做两处修改首先定义校验和的存储区域define region FLASH mem:[from 0x08000000 to 0x0807FFFC]; define region CHECKSUM mem:[from 0x0807FFFC to 0x0807FFFF];这里在Flash末尾预留了4字节0x0807FFFC到0x0807FFFF给32位校验值。注意起始地址要对齐到4字节边界这是大多数32位MCU的要求。其次定义校验和段并指定其位置place at end of FLASH { readonly section .checksum };这样链接器就会将校验和段放在Flash区域的最后。在实际项目中我建议预留的空间略大于实际需要比如对于32位CRC可以预留8字节为未来可能的算法升级留出余地。提示使用__checksum这个预定义符号可以在代码中直接访问存储的校验值。例如extern const uint32_t __checksum; uint32_t stored_crc __checksum;2.3 校验和参数配置详解在IAR工程选项的Linker Checksum页面配置界面分为上下两部分。上部分定义计算范围和填充模式下部分定义算法参数。每一处设置都需要仔细考虑。上部分配置Flash范围与填充Fill unused code memory这个选项必须勾选。它确保Flash中未使用的区域被填充为固定值避免随机内容影响校验和计算。想象一下如果未使用区域是随机值可能是上次编程残留的数据那么每次擦除后编程即使代码相同校验和也会不同。Fill pattern填充模式通常设置为0xFF或0x00。0xFF是Flash擦除后的状态选择这个值可以确保一致性。但在某些特殊情况下比如需要区分未使用和有效数据时可以选择其他值。Start address和End address这是整个配置中最关键的部分。它定义了计算校验和的内存范围。必须确保这个范围与运行时软件计算的范围完全一致。常见错误包括包含了不应该计算的区域如Bootloader区域没有排除校验和自身的存储位置地址计算错误导致范围不匹配假设Flash从0x08000000到0x0807FFFF校验和存储在最后4字节那么正确的范围应该是Start: 0x08000000 End: 0x0807FFFB 注意不是0x0807FFFF为什么是0x0807FFFB因为0x0807FFFC开始是校验和存储位置不应该包含在计算范围内。这个差一错误是导致校验和失败的最常见原因。下部分配置算法参数这部分配置需要与运行时使用的CRC算法完全匹配。如果使用MCU的硬件CRC外设必须查阅芯片手册确保参数一致。配置项说明典型值注意事项Checksum size校验值大小字节432位CRC必须与预留存储空间大小匹配Alignment对齐方式432位MCU通常需要4字节对齐Algorithm算法选择CRC32必须与运行时算法一致Complement补码计算As is 或 1s complement影响最终结果Bit order位顺序MSB first必须与硬件CRC模块一致Reverse byte order字节反转否某些硬件需要反转Initial value初始值0xFFFFFFFFCRC32常用初始值Checksum unit size计算单元大小32-bit与处理器位宽匹配以STM32系列MCU常用的CRC32为例对应的硬件配置应该是多项式0x04C11DB7标准CRC32初始值0xFFFFFFFF输入输出不反转结果异或值0xFFFFFFFF如果IAR配置了Complement这里有一个容易忽略的细节多项式表示形式。有些CRC实现使用反转多项式Reflected Polynomial而IAR使用的是标准形式。如果运行时使用的是硬件CRC必须确认硬件的多项式表示方式。2.4 验证配置正确性的方法配置完成后如何验证一切工作正常我通常采用以下验证流程编译生成HEX文件使用二进制查看工具检查末尾几个字节确认校验和已正确写入。编写简单的验证程序在开发板上运行比较软件计算的CRC与存储的CRC是否一致#include stdint.h #include stdbool.h // 假设CRC存储在Flash末尾 #define CRC_STORAGE_ADDRESS 0x0807FFFC #define FLASH_START 0x08000000 #define FLASH_END (CRC_STORAGE_ADDRESS - 1) extern uint32_t calculate_crc32(uint32_t start, uint32_t end); bool verify_flash_crc(void) { uint32_t calculated_crc calculate_crc32(FLASH_START, FLASH_END); uint32_t stored_crc *(uint32_t*)CRC_STORAGE_ADDRESS; return (calculated_crc stored_crc); }在不同环境下编译测试确保团队成员使用相同配置时能得到完全相同的HEX文件和校验和。进行边界测试比如代码大小刚好达到Flash容量时使用不同的优化级别时更新IAR版本后3. 常见问题排查与解决方案3.1 校验和不一致的根本原因根据我的经验校验和不一致问题可以归结为以下几类原因1. 工具链版本差异不同版本的IAR可能在以下方面存在差异默认编译器选项库函数的实现链接器的优化策略对某些语言特性的支持程度解决方案建立团队开发规范统一工具链版本。在工程目录中明确记录使用的IAR版本号新成员加入时首先安装指定版本。2. 环境变量和路径问题IAR工程可能依赖某些环境变量或相对路径不同机器上的设置不同可能导致包含的文件不同。解决方案使用工程相对路径而非绝对路径将必要的工具链组件包含在版本控制中建立统一的开发环境配置脚本3. 代码中的非确定性因素某些代码构造会导致每次编译生成不同的二进制// 示例1使用__DATE__、__TIME__等预定义宏 const char build_date[] __DATE__; // 示例2使用__FILE__宏原始文章中提到的问题 assert(condition Error in __FILE__); // 示例3未初始化的静态变量在某些配置下 static int counter; // 初始值可能不确定解决方案避免在固件中使用编译时间戳如果需要可以在运行时生成谨慎使用__FILE__考虑使用相对路径或自定义标识符明确初始化所有变量4. 配置参数不一致这是最常见的问题特别是校验和计算范围设置错误算法参数不匹配填充模式不同3.2 调试技巧与工具使用当遇到校验和问题时系统性的调试方法至关重要第一步生成并对比MAP文件MAP文件包含了详细的链接信息可以帮助定位差异# 在IAR中启用MAP文件生成 # Options Linker List Generate linker map file比较两个不同编译结果的MAP文件关注各段Section的大小和地址符号地址的变化库文件的版本和路径第二步分析HEX/BIN文件差异使用二进制比较工具如Beyond Compare、WinMerge的二进制比较功能直接比较生成的HEX文件。如果只有少数几个字节不同很可能就是校验和本身的差异如果大范围不同说明代码生成就有问题。第三步使用IAR的ielftool进行离线分析IAR提供了命令行工具ielftool可以手动计算校验和验证配置# 示例使用ielftool计算校验和 ielftool --checksum \ --range0x08000000-0x0807FFFB \ --algorithmcrc32 \ --width4 \ --fill0xFF \ input.elf output.hex这个命令可以绕过IDE的GUI配置直接测试参数设置是否正确。第四步编写最小化测试用例创建一个最简单的工程只包含最基本的校验和功能逐步添加复杂特性直到问题复现。这种方法虽然耗时但往往能定位到根本原因。3.3 实际案例__FILE__宏导致的校验和差异原始文章中提到了一个典型问题代码中使用了__FILE__宏而不同开发人员的项目路径不同导致生成的字符串不同最终影响校验和。这个问题有几种解决方案方案A使用相对路径或固定标识符// 不推荐 assert(condition Error in __FILE__); // 推荐使用模块名 #define MODULE_NAME PwrManager assert(condition Error in MODULE_NAME);方案B在链接后处理中统一路径使用IAR的post-build处理将路径信息标准化# 在post-build命令行中 ielftool --string_rep C:\\Users\\User1\\Project Project input.elf output.elf方案C将断言信息放在单独段将调试信息放在单独的段中排除在CRC计算之外#pragma location.debug_info const char file_name[] __FILE__;然后在ICF文件中将.debug_info段放在CRC计算范围之外。4. 高级应用安全认证项目的特殊考量对于需要通过安全认证如IEC 61508、ISO 26262的项目校验和的配置需要满足更严格的要求。这不仅涉及技术实现还包括文档记录、验证流程和变更管理。4.1 双重计算与交叉验证在安全关键系统中通常建议实现双重校验机制编译时校验由IAR工具链自动生成独立校验使用独立的脚本或工具重新计算这种方法可以检测工具链本身的错误。实现方式是在post-build步骤中添加一个验证脚本#!/usr/bin/env python3 独立CRC验证脚本 import struct import zlib # 使用Python标准库的CRC32实现 def calculate_file_crc(filename, start_addr, end_addr): 计算HEX文件中指定地址范围的CRC32 # 读取HEX文件并提取指定地址范围的数据 # ... 解析HEX文件的实现 ... data extract_hex_data(filename, start_addr, end_addr) crc zlib.crc32(data) return crc def verify_iar_crc(project_path): 验证IAR生成的CRC是否正确 # 从IAR工程文件读取配置参数 iar_config parse_iar_config(project_path) # 计算独立CRC independent_crc calculate_file_crc( iar_config[output_file], iar_config[start_addr], iar_config[end_addr] ) # 从HEX文件读取IAR存储的CRC iar_crc extract_stored_crc(iar_config[output_file]) return independent_crc iar_crc if __name__ __main__: if verify_iar_crc(MyProject.ewp): print(CRC验证通过) else: print(CRC验证失败) exit(1)4.2 可追溯的配置管理安全认证要求所有安全相关配置都必须可追溯、可验证。对于校验和配置这意味着版本控制所有配置文件包括ICF文件、IAR工程文件ewp、post-build脚本等记录配置基线每次发布都记录完整的配置参数自动化验证在CI/CD流水线中集成校验和验证我通常会在项目中创建一个checksum_config.md文件记录所有相关配置# 校验和配置基线 - 项目XYZ v1.2.3 ## 基本参数 - IAR版本9.30.1 - 计算范围0x08000000 - 0x0807FFFB - 算法CRC32/MPEG-2 - 初始值0xFFFFFFFF - 多项式0x04C11DB7 - 结果异或0x00000000 - 输入反转否 - 输出反转否 ## 验证结果 - 编译时CRC0x89ABCDEF - 独立验证CRC0x89ABCDEF ✓ - 硬件验证通过1000次测试 ## 变更历史 - v1.2.3更新多项式配置以匹配硬件CRC - v1.2.2修正计算范围排除最后4字节 - v1.2.1初始配置4.3 运行时校验的实现策略编译时正确生成校验和只是第一步运行时正确验证同样重要。以下是几种常见的实现模式模式A启动时一次性校验// 简单的启动时校验 bool boot_checksum_verified false; void system_init(void) { if (verify_flash_crc()) { boot_checksum_verified true; // 继续正常启动 } else { // 进入安全状态 enter_safe_state(); } }模式B分块校验适合大容量Flash// 分块校验避免长时间阻塞 typedef struct { uint32_t start_addr; uint32_t end_addr; uint32_t expected_crc; bool verified; } flash_block_t; flash_block_t flash_blocks[] { {0x08000000, 0x0800FFFF, 0x12345678, false}, {0x08010000, 0x0801FFFF, 0x9ABCDEF0, false}, // ... 更多块 }; bool verify_flash_blockwise(void) { for (int i 0; i BLOCK_COUNT; i) { if (!flash_blocks[i].verified) { uint32_t crc calculate_crc32( flash_blocks[i].start_addr, flash_blocks[i].end_addr ); flash_blocks[i].verified (crc flash_blocks[i].expected_crc); if (!flash_blocks[i].verified) { return false; } } } return true; }模式C后台周期性校验// 在低优先级任务中周期性校验 void checksum_monitor_task(void *arg) { while (1) { if (!verify_flash_crc()) { // 检测到损坏触发安全处理 report_corruption(); take_corrective_action(); } // 等待下一个检查周期 vTaskDelay(pdMS_TO_TICKS(CHECK_INTERVAL_MS)); } }4.4 错误处理与恢复机制当校验和验证失败时系统应该有明确的响应策略。根据安全等级的不同策略的严格程度也不同安全等级检测到错误时的响应恢复机制低记录错误继续运行尝试重新计算最多3次中进入降级模式切换到备份固件高立即进入安全状态需要人工干预恢复一个完整的错误处理实现可能包括typedef enum { CHECKSUM_OK, CHECKSUM_MISMATCH, CHECKSUM_CALC_ERROR, CHECKSUM_FLASH_ERROR } checksum_result_t; checksum_result_t perform_safe_checksum_verification(void) { uint32_t stored_crc; uint32_t calculated_crc; // 1. 读取存储的CRC带错误检查 if (!read_stored_crc(stored_crc)) { return CHECKSUM_FLASH_ERROR; } // 2. 计算当前CRC带错误检查 if (calculate_flash_crc(calculated_crc) ! CALC_OK) { return CHECKSUM_CALC_ERROR; } // 3. 比较 if (stored_crc ! calculated_crc) { // 可选重新计算确认 uint32_t recalculated_crc; calculate_flash_crc(recalculated_crc); if (calculated_crc recalculated_crc) { return CHECKSUM_MISMATCH; // 确认不匹配 } else { return CHECKSUM_CALC_ERROR; // 计算不一致 } } return CHECKSUM_OK; } void handle_checksum_failure(checksum_result_t result) { switch (result) { case CHECKSUM_MISMATCH: log_error(Flash corruption detected); if (has_backup_firmware()) { switch_to_backup(); } else { enter_safe_shutdown(); } break; case CHECKSUM_CALC_ERROR: log_error(CRC calculation error); // 可能是临时错误重试几次 if (retry_count MAX_RETRIES) { schedule_retry(); } else { enter_safe_shutdown(); } break; case CHECKSUM_FLASH_ERROR: log_error(Flash read error); // 可能是硬件故障 enter_safe_shutdown(); break; default: break; } }5. 性能优化与最佳实践5.1 计算速度的权衡在实时性要求高的系统中CRC计算的速度可能成为瓶颈。以下是一些优化策略使用硬件加速现代MCU通常内置CRC计算单元速度比软件实现快数十倍。// STM32硬件CRC使用示例 uint32_t calculate_crc_hardware(uint32_t start_addr, uint32_t end_addr) { CRC-CR | CRC_CR_RESET; // 复位CRC计算器 for (uint32_t addr start_addr; addr end_addr; addr 4) { uint32_t data *(uint32_t*)addr; CRC-DR data; } return CRC-DR; }分块计算与缓存将Flash分成多个块每次只计算一个块结果缓存起来供后续使用。选择更快的算法CRC32虽然检错能力强但计算量较大。在某些场景下CRC16甚至简单的校验和可能足够且速度更快。5.2 内存占用优化CRC计算本身不需要太多内存但实现方式可能影响内存使用栈空间优化避免在计算函数中使用大数组使用寄存器或静态缓冲区。代码大小优化使用查表法的CRC实现通常比直接计算更快但会占用更多Flash空间。根据实际情况选择。5.3 测试与验证策略完善的测试是确保校验和功能可靠性的关键单元测试测试CRC计算函数本身void test_crc_calculation(void) { const uint8_t test_data[] {0x01, 0x02, 0x03, 0x04}; uint32_t crc calculate_crc32(test_data, sizeof(test_data)); // 已知的正确值 assert(crc 0xB63CFBCD); }集成测试测试完整的校验和流程编译固件记录生成的CRC将固件下载到开发板运行自检程序验证CRC匹配故意修改Flash内容模拟损坏验证能检测到错误压力测试在高温、低温、电压波动等恶劣条件下测试确保可靠性。5.4 维护与升级考虑随着项目发展校验和配置可能需要调整算法升级从CRC16升级到CRC32时需要更新IAR配置更新运行时计算代码处理新旧版本固件的兼容性更新测试用例Flash布局变化增加或减少Flash使用区域时需要重新计算校验和范围更新ICF文件中的预留空间验证新配置的正确性工具链升级升级IAR版本时需要在新版本中重新验证所有配置对比新旧版本生成的二进制文件更新团队开发环境我在实际项目中建立了一个校验和配置的检查清单每次发布前都会逐项核对[ ] IAR版本与基线一致[ ] ICF文件中的校验和区域正确定义[ ] Linker Checksum配置正确[ ] 计算范围排除校验和存储位置[ ] 算法参数与硬件匹配[ ] 编译生成的HEX文件包含校验和[ ] 运行时验证代码正确读取存储的CRC[ ] 单元测试和集成测试通过[ ] 文档中的配置记录已更新嵌入式系统的可靠性建立在每一个细节的正确实现之上。校验和功能虽然只是众多安全机制中的一环但它的正确配置直接关系到系统能否检测到固件损坏从而采取适当的保护措施。通过理解IAR校验和配置的每一个参数掌握排查问题的系统方法建立完善的验证流程我们才能确保这一机制在实际产品中可靠工作。

相关新闻

从交叉熵到SupCon:深入解析监督对比损失的核心思想与实现

从交叉熵到SupCon:深入解析监督对比损失的核心思想与实现

1. 从“认人”到“认脸”:为什么我们需要超越交叉熵? 大家好,我是老张,在AI这个行当里摸爬滚打了十来年,从早期的传统机器学习一路跟到现在的深度学习大模型。今天想和大家聊聊一个特别有意思的话题:损失函…

2026/5/17 8:35:37 阅读更多 →
YOLACT系列模型实战:从零搭建自定义数据集实例分割任务(附COCO格式转换脚本)

YOLACT系列模型实战:从零搭建自定义数据集实例分割任务(附COCO格式转换脚本)

实战指南:基于YOLACT系列模型的自定义数据集实例分割全流程 在计算机视觉领域,实例分割任务因其能同时完成目标检测与像素级分割而备受关注。对于许多希望将AI能力落地到具体业务场景的开发者而言,如何将前沿的实例分割模型应用于自己的数据…

2026/5/17 8:35:37 阅读更多 →
DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码) 在精密仪器、自动化测试设备或者高保真音频系统中,我们常常需要生成多路高精度、高同步性的模拟信号。传统的单通道DAC方案不仅占用宝贵的MCU引脚和PCB面积&#xf…

2026/5/17 8:35:36 阅读更多 →

最新新闻

中国自动驾驶标准如何走向全球:从路况建模到国际采纳

中国自动驾驶标准如何走向全球:从路况建模到国际采纳

1. 项目概述:当“中国方案”开始定义全球自动驾驶的标尺“中国 自动驾驶 标准何以走向全球”——这个标题乍看像一篇政策评论,但作为在智能网联汽车领域摸爬滚打十二年、参与过5项国标起草、3次UN/WP.29(联合国世界车辆法规协调论坛&#xff…

2026/7/3 18:22:15 阅读更多 →
多路摄像头AI分析性能优化指南

多路摄像头AI分析性能优化指南

在将视觉AI算法从“单路Demo”推向“多路并发”的产业化落地阶段,大部分架构师和工程师都会遭遇一场性能灾难:原本在开发机上跑得好好的算法,一旦接入32路、64路现场摄像头,系统轻则疯狂丢帧、告警延迟拉长到几分钟,重…

2026/7/3 18:22:15 阅读更多 →
【小白也能轻松玩转龙虾】虾壳云一键部署图文版,零基础弄懂 OpenClaw v2.7.9 整套搭建逻辑(附最新安装包)

【小白也能轻松玩转龙虾】虾壳云一键部署图文版,零基础弄懂 OpenClaw v2.7.9 整套搭建逻辑(附最新安装包)

OpenClaw(小龙虾)Windows 一键部署实操手册|十分钟搭建专属本地数字员工 适配平台:Windows 10/11(64 位)|零基础友好|全可视化界面|无编程门槛 当下热度较高的开源 AI 智…

2026/7/3 18:20:14 阅读更多 →
2026视频去水印软件推荐电脑手机在线免费无广告

2026视频去水印软件推荐电脑手机在线免费无广告

日常整理学习素材、收藏喜欢的短视频内容时,画面上的平台水印往往会影响观看体验,也给后续的个人剪辑练习带来不便。2026 年市面上的去水印工具覆盖小程序、电脑软件、在线站点等多种形态,不少用户挑选时会关注是否免费、有无广告弹窗&#x…

2026/7/3 18:20:14 阅读更多 →
英伟达RTX Spark超级芯片:重新定义AI PC的硬件与生态

英伟达RTX Spark超级芯片:重新定义AI PC的硬件与生态

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 最近几年,AI PC的概念炒得火热,但很多用户拿到手后感觉和传统PC差别不大,无非是多了个AI助手快捷…

2026/7/3 18:18:13 阅读更多 →
工信局如何高效分析产业链技术断点并指导企业技改方向?

工信局如何高效分析产业链技术断点并指导企业技改方向?

观点作者:科易网-国家科技成果转化(厦门)示范基地 核心要点 工信局需借助数智化手段精准识别产业链技术断点,指导企业技改方向。构建涵盖产业链多维度知识的科创知识图谱,是识别技术断点的关键。数智化产品如企业技术…

2026/7/3 18:16:12 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻