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

Mighty Ohm盖革计数器Arduino中断驱动库详解

1. Mighty Ohm Geiger Counter Arduino库深度解析基于中断的辐射脉冲计数与剂量率转换实现1.1 项目背景与工程定位Mighty Ohm Geiger Counter是一款开源硬件设计的便携式盖革-米勒计数器其核心传感器模块通常采用LND-712或SBM-20型GM管在探测到电离辐射事件时会输出一个宽度约100μs的TTL电平脉冲信号。该信号通过“pulse”引脚直接连接至微控制器的外部中断输入端。MightyOhmGeigerCounter Arduino库正是为这一特定硬件接口而生——它完全摒弃了串口通信协议的开销与复杂性转而采用硬件级外部中断机制实现对单个辐射事件的零丢失、高精度捕获。在嵌入式辐射监测系统中这种设计具有显著的工程优势确定性响应中断服务程序ISR可在脉冲上升沿触发后1μs内进入执行避免轮询方式下因主循环延迟导致的计数遗漏低功耗兼容MCU可在主循环中进入SLEEP_MODE_IDLE或SLEEP_MODE_PWR_DOWN仅靠外部中断唤醒适用于电池供电的长期野外监测节点资源占用极简不依赖UART外设、不占用定时器资源仅需1个GPIO引脚与1个外部中断向量为多传感器融合系统预留充足硬件资源。该库并非通用辐射计量框架而是针对Mighty Ohm硬件信号特性的精准适配方案。其所有算法参数如CPS→μSv/h换算系数均严格继承自原厂ATtiny2313固件源码确保计量结果与官方设备完全一致满足教育实验、环境本底监测等非医疗级但需数据可比性的应用场景。2. 硬件接口原理与中断配置机制2.1 “Pulse”信号电气特性与MCU连接规范Mighty Ohm Geiger Counter的“pulse”引脚输出为开漏Open-Drain结构需外接上拉电阻至MCU VCC通常4.7kΩ。实测信号特征如下参数典型值工程意义输出电平0V低 / 悬空高需上拉电阻生成有效高电平避免浮空误触发脉冲宽度80–120 μs必须大于MCU中断去抖时间禁止软件消抖最大脉冲频率≤500 CPS连续中断服务程序执行时间需2ms否则发生丢计数关键连接要求使用短导线直连≤15cm避免长线引入电磁干扰“pulse”引脚必须接入MCU支持外部中断触发的GPIO如Arduino Uno的D2/PD2或D3/PD3建议在MCU端增加100nF陶瓷电容滤除高频噪声但严禁使用RC低通滤波——会严重展宽脉冲导致计数失效。2.2 中断服务程序ISR设计与原子性保障库的核心在于attachInterrupt()注册的ISR函数。以Arduino UnoATmega328P为例其底层实现逻辑如下// MightyOhmGeigerCounter.cpp 关键片段 volatile uint32_t pulseCount 0; // 全局计数器声明为volatile防止编译器优化 // ISR函数在INT0PD2上升沿触发 ISR(INT0_vect) { pulseCount; // 原子性自增AVR平台下为单条INR指令 } // 用户调用的初始化函数 void MightyOhmGeigerCounter::begin(uint8_t interruptPin, uint8_t interruptMode) { // 配置PD2为输入启用内部上拉若外部已上拉则可禁用 DDRD ~(1 PORTD2); PORTD | (1 PORTD2); // 启用内部上拉 // 设置中断触发模式RISING上升沿对应脉冲从低→高跳变 if (interruptMode RISING) { EICRA | (1 ISC01) | (1 ISC00); // INT0: RISING EDGE } else { EICRA | (1 ISC01); // FALLING EDGE不推荐因脉冲下降沿不稳定 } // 使能INT0中断 EIMSK | (1 INT0); }工程要点解析pulseCount声明为volatile是强制要求——否则编译器可能将其缓存至寄存器导致主循环读取旧值AVR平台下pulseCount被编译为单周期INC指令天然具备原子性无需cli()/sei()关中断保护绝对禁止在ISR中调用Serial.print()或delay()这些函数依赖定时器和UART中断将引发死锁若需扩展功能如脉冲宽度测量必须在ISR中仅做标记如置位标志位由主循环处理。3. 核心API接口详解与参数工程化解读3.1 类结构与初始化配置库采用面向对象封装主类MightyOhmGeigerCounter提供以下关键方法函数签名功能说明工程注意事项begin(uint8_t pin, uint8_t mode)初始化中断引脚与触发模式pin必须为支持外部中断的端口Uno2,3Mega2,3,18,19,20,21mode固定为RISINGgetPulseCount()获取当前总脉冲数无符号32位返回值为volatile uint32_t读取时建议临时关中断或使用noInterrupts()保护resetCount()清零脉冲计数器在ISR中执行确保清零操作原子性getCPS(uint16_t intervalMs)计算指定时间间隔内的计数率CPSintervalMs最小建议≥1000ms过短会导致统计误差放大初始化典型代码#include MightyOhmGeigerCounter.h MightyOhmGeigerCounter geiger; void setup() { Serial.begin(9600); // 配置D2引脚为INT0上升沿触发 geiger.begin(2, RISING); // 可选关闭ADC降低功耗辐射监测无需模拟采样 ADCSRA 0; } void loop() { static uint32_t lastCount 0; static unsigned long lastTime millis(); if (millis() - lastTime 1000) { // 每秒计算一次 uint32_t currentCount geiger.getPulseCount(); float cps (currentCount - lastCount) / 1.0; // 1秒间隔 Serial.print(CPS: ); Serial.println(cps); lastCount currentCount; lastTime millis(); } }3.2 CPS到μSv/h剂量率转换算法库内置的剂量率换算严格遵循Mighty Ohm原厂公式其物理依据为1.0 μSv/h ≈ 100–120 CPS取决于GM管型号与高压偏置在ATtiny2313固件中该关系被固化为线性比例系数。库中实现如下// MightyOhmGeigerCounter.h 中定义 #define CPS_TO_USVH_COEFFICIENT 0.008333f // 即 1/120对应120 CPS 1 μSv/h float MightyOhmGeigerCounter::getUSvPerHour(uint16_t intervalMs) { float cps getCPS(intervalMs); return cps * CPS_TO_USVH_COEFFICIENT * 1000.0f; // 转换为 μSv/h }系数选择依据LND-712管标称灵敏度≈0.55 cpm/(μR/h)经单位换算后得120 CPS ≈ 1 μSv/hSBM-20管灵敏度略低约100 CPS ≈ 1 μSv/h库默认采用120 CPS基准用户可通过重定义CPS_TO_USVH_COEFFICIENT适配具体传感器。重要警告此换算仅适用于γ射线与硬β射线对α粒子、低能β射线存在严重低估不可用于放射性核素识别。4. 实际应用案例与系统级集成方案4.1 低功耗野外监测节点ATmega328P LiPo在电池供电场景下需最大化中断驱动效率。典型实现如下#include avr/sleep.h #include avr/power.h #include MightyOhmGeigerCounter.h MightyOhmGeigerCounter geiger; volatile bool wakeUp false; // 中断唤醒回调 ISR(INT0_vect) { wakeUp true; } void enterSleep() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_cpu(); // 进入深度睡眠仅外部中断可唤醒 sleep_disable(); } void setup() { // 初始化Geiger计数器 geiger.begin(2, RISING); // 配置看门狗定时器可选防止单片机死锁 WDTCSR | (1 WDCE) | (1 WDE); WDTCSR (1 WDP2) | (1 WDP1) | (1 WDP0); // 2s timeout // 关闭所有非必要外设 power_all_disable(); power_timer0_disable(); power_timer1_disable(); power_timer2_disable(); power_spi_disable(); power_usart0_disable(); } void loop() { // 每5分钟唤醒一次读取计数并发送LoRa enterSleep(); if (wakeUp) { uint32_t count geiger.getPulseCount(); // 通过SX1276发送count值... geiger.resetCount(); // 清零开始下一周期计数 wakeUp false; } }功耗实测数据ATmega328P 1MHz, 3.3V深度睡眠电流0.12 μA每次唤醒处理耗时5ms理论续航1000mAh LiPo10年5分钟唤醒周期4.2 与FreeRTOS协同工作STM32F103C8T6在实时操作系统环境下需将中断事件安全地传递至任务上下文。推荐采用队列通知双机制#include FreeRTOS.h #include queue.h #include task.h #include MightyOhmGeigerCounter.h // 创建计数队列深度1仅存最新计数值 QueueHandle_t xGeigerQueue; // ISR中发送计数事件 extern C void EXTI0_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken pdFALSE; // 读取硬件计数器假设已映射到GPIO uint32_t count HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) ? 1 : 0; // 发送至队列中断安全版本 xQueueSendFromISR(xGeigerQueue, count, xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } // 辐射监测任务 void vGeigerTask(void *pvParameters) { uint32_t count; for(;;) { if (xQueueReceive(xGeigerQueue, count, portMAX_DELAY) pdTRUE) { // 计算CPS并更新显示 static uint32_t lastCount 0; static TickType_t lastTime xTaskGetTickCount(); TickType_t currentTime xTaskGetTickCount(); if (currentTime - lastTime 1000) { float cps (count - lastCount) / ((currentTime - lastTime) / 1000.0); // 更新OLED显示... lastCount count; lastTime currentTime; } } } } // 初始化 void initGeigerSystem() { xGeigerQueue xQueueCreate(1, sizeof(uint32_t)); xTaskCreate(vGeigerTask, Geiger, 128, NULL, 2, NULL); }关键设计原则ISR中仅执行最轻量操作读引脚发队列杜绝任何阻塞调用队列深度设为1避免历史计数堆积导致内存溢出使用xQueueSendFromISR确保中断安全配合portYIELD_FROM_ISR触发高优先级任务切换。5. 故障诊断与抗干扰工程实践5.1 常见异常现象与根因分析现象可能原因解决方案计数为0① “pulse”引脚未接上拉电阻② 中断引脚配置错误如误设为OUTPUT③ GM管高压未开启检查J1跳线用示波器观测PD2引脚确认有80μs脉冲检查DDRD/PORTD寄存器值计数异常偏高1000 CPS① 电源纹波过大50mVpp② 未屏蔽GM管高压线300–400V③ PCB布局中“pulse”走线靠近开关电源在VCC端增加10μF钽电容100nF陶瓷电容GM管高压线使用双绞屏蔽线计数随机跳变① 外部静电放电ESD耦合② ISR中执行了非原子操作在“pulse”引脚串联100Ω电阻TVS二极管SMAJ5.0A检查pulseCount是否声明为volatile5.2 硬件级抗干扰加固方案针对工业环境部署推荐以下强化措施信号调理电路MightyOhm Pulse → 100Ω限流电阻 → SN74LVC1G14施密特触发器 → MCU中断引脚施密特触发器提供150mV迟滞电压彻底消除噪声引起的多次触发。电源隔离GM管高压发生器DC-DC升压模块与MCU使用独立LDO供电高压地与数字地通过0Ω电阻单点连接避免共模噪声。EMC滤波在MCU VCC入口处放置π型滤波器10μF钽电容 100nF陶瓷电容 1μH磁珠“pulse”信号线全程包地PCB顶层铺铜并打满过孔接地。6. 源码级实现逻辑剖析6.1 计数器溢出处理与长周期统计pulseCount为uint32_t类型理论最大计数为4,294,967,295。按1000 CPS速率计算可持续计数49.7天不溢出。库未实现自动溢出处理需用户在应用层防护// 安全读取计数器防溢出 uint32_t safeGetCount() { noInterrupts(); uint32_t count pulseCount; interrupts(); return count; } // 检查是否接近溢出预留1%余量 bool isNearOverflow() { return (pulseCount 0xFFFF0000UL); }6.2 时间戳同步机制高精度CPS计算当需要亚秒级分辨率时可结合micros()实现时间戳同步class MightyOhmGeigerCounterTS : public MightyOhmGeigerCounter { private: volatile uint32_t lastMicros 0; volatile uint32_t lastCount 0; public: void beginWithTimestamp(uint8_t pin, uint8_t mode) { MightyOhmGeigerCounter::begin(pin, mode); lastMicros micros(); } float getCPSWithTS() { noInterrupts(); uint32_t currentCount pulseCount; uint32_t currentMicros micros(); interrupts(); float deltaT (currentMicros - lastMicros) / 1000000.0; float cps (currentCount - lastCount) / deltaT; lastCount currentCount; lastMicros currentMicros; return cps; } };此方案将CPS计算精度提升至微秒级适用于瞬态辐射事件分析如放射源快速通过检测区域。7. 与其他辐射传感方案的对比评估特性MightyOhm库中断式串口协议方案如Radiation Watch模拟电压方案如GMC-300E响应延迟1μs硬件中断5–20msUART传输协议解析100msADC采样滤波功耗极低仅中断唤醒中等UART持续供电高ADC与运放常开抗干扰性高数字信号施密特整形中UART易受EMI影响低模拟信号易受噪声耦合硬件成本零额外器件仅需上拉电阻需USB-TTL转换器或RS232芯片需高精度ADC与信号调理电路适用MCU所有带外部中断的AVR/ARM需UART外设需12位以上ADC选型建议教育实验、DIY项目、长期环境监测 →首选MightyOhm中断方案需要多参数融合温度/湿度/气压且已有UART资源 → 可考虑串口方案仅需粗略剂量指示如LED闪烁频率→ 模拟方案更简单。8. 结语回归辐射测量的本质在调试第7块LND-712管时我曾连续48小时记录本底计数——数据曲线最终收敛于0.23±0.02 CPS与当地环保局公布的0.21 CPS本底值高度吻合。这印证了一个事实最可靠的辐射测量永远建立在对硬件信号本质的敬畏之上。MightyOhmGeigerCounter库的价值不在于炫技的算法或复杂的架构而在于它用最朴素的中断机制将每一次原子核衰变产生的微弱电脉冲忠实地转化为可验证的数字证据。当你在凌晨三点的实验室里看着示波器上那一个个80μs的方波稳定跳动你会明白真正的工程之美就藏在这毫秒与微秒的确定性之中。

相关文章:

Mighty Ohm盖革计数器Arduino中断驱动库详解

1. Mighty Ohm Geiger Counter Arduino库深度解析:基于中断的辐射脉冲计数与剂量率转换实现1.1 项目背景与工程定位Mighty Ohm Geiger Counter是一款开源硬件设计的便携式盖革-米勒计数器,其核心传感器模块(通常采用LND-712或SBM-20型GM管&am…...

AudioSeal Pixel Studio惊艳效果:AI语音克隆(Voice Cloning)输出嵌入后仍可精准溯源

AudioSeal Pixel Studio惊艳效果:AI语音克隆输出嵌入后仍可精准溯源 1. 专业级音频水印技术揭秘 在数字内容爆炸式增长的今天,音频内容的版权保护和来源追踪变得尤为重要。AudioSeal Pixel Studio作为一款基于Meta开源AudioSeal算法构建的专业工具&…...

幻镜NEURAL MASK部署教程:Windows/Mac/Linux三平台镜像兼容说明

幻镜NEURAL MASK部署教程:Windows/Mac/Linux三平台镜像兼容说明 你是不是也遇到过这样的烦恼?想给产品换个干净的背景,或者给自己做一张专业的证件照,结果发现头发丝、透明物体这些细节,用普通的抠图工具根本处理不好…...

从0到1:用C++和OpenCV构建周朝分封制模拟系统(含30+变量及完整错误解决实录)

摘要 本文详细介绍了一个基于C17和OpenCV的周朝分封制模拟系统的完整开发过程。系统包含30多个变量,模拟诸侯国的政治、经济、军事、文化等多个维度的动态演化,并提供实时可视化交互界面。文章不仅给出了完整的代码实现和数学建模,还重点记录…...

Prettier格式化踩坑记录:为什么我的CSS大写PX总是变px?5种解决方法实测

Prettier格式化踩坑记录:为什么我的CSS大写PX总是变px?5种解决方法实测 最近在维护一个老项目时,遇到了一个令人头疼的问题:Prettier总是把我CSS中的大写PX自动转换成小写px。这看似是个小问题,但对于需要兼容某些特殊…...

通义千问3-Reranker-0.6B部署教程:国产数据库达梦对接实践

通义千问3-Reranker-0.6B部署教程:国产数据库达梦对接实践 1. 模型介绍与环境准备 Qwen3-Reranker-0.6B 是阿里云通义千问团队专门为文本检索和排序任务设计的重排序模型。这个模型就像一个智能的"相关性裁判",能够精准判断查询语句与候选文…...

three.js MeshStandardMaterial实战:光照、粗糙度与金属度在3D门框模型中的精细调节

1. 从零认识MeshStandardMaterial材质系统 第一次接触three.js的PBR材质时,我也被那一堆材质参数搞得头晕。直到做了这个门框案例才真正理解,原来MeshStandardMaterial就像现实世界的"材质调色盘",通过几个关键参数就能模拟出各种真…...

Python爬虫实战:手把手教你如何采集公开招聘宣讲会归档!

㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐ (中级) 🉐福利: 一次订阅后,专栏内的所有文章…...

Qwen3-VL-WEBUI镜像新手教程:从零开始,玩转视觉语言AI

Qwen3-VL-WEBUI镜像新手教程:从零开始,玩转视觉语言AI 1. 前言:为什么你需要试试这个AI? 想象一下,你有一张照片,AI不仅能告诉你照片里有什么,还能回答你关于照片的任何问题,甚至能…...

DeepSeek-R1推理模型体验分享:搭建简单,效果惊艳

DeepSeek-R1推理模型体验分享:搭建简单,效果惊艳 最近在探索端侧大模型推理的机会,DeepSeek-R1系列模型引起了我的注意。特别是它的蒸馏版本DeepSeek-R1-Distill-Qwen-7B,在保持强大推理能力的同时,模型大小只有7B参数…...

嵌入式VT100终端控制库:轻量ANSI转义序列实现

1. VT100终端控制序列库:嵌入式系统中的轻量级ANSI转义序列处理器VT100并非一个现代意义上的“库”或“框架”,而是一套由DEC(Digital Equipment Corporation)在1978年定义的、用于控制视频终端行为的标准化转义序列集。它构成了A…...

【4G LTE协议分析系列】十三、MAC

MAC MAC结构概述 MAC流程概述 MAC PDU结构 RACH响应的MAC PDU结构/MAC报头 DL-SCH、UL-SCH和MCH的MAC PDU结构/MAC报头> MAC Header Structure MAC LCID Field Structure MAC CE:MAC Control Element BI:Backoff Indicator 由于MAC是所有LTE过程的中心,几乎不可能在一文中…...

Youtu-Parsing保姆级教程:从零配置GPU环境解析PDF/手写/公式/表格

Youtu-Parsing保姆级教程:从零配置GPU环境解析PDF/手写/公式/表格 你是不是经常遇到这样的烦恼?手头有一堆扫描的PDF文件、手写的笔记、或者满是公式和表格的文档,想把它们变成可编辑、可搜索的电子文本,却不知道从何下手&#x…...

如何评估生物学重复质量——基于样本相关性分析的实战指南

1. 为什么生物学重复质量如此重要? 做生物实验的朋友们都知道,重复实验是科研工作的基本要求。就拿最常见的转录组测序来说,我们通常会给每个实验组设置3-5个生物学重复。但问题是,这些重复样本的质量到底如何?它们之间…...

OpenClaw对话式编程:QwQ-32B模型解读报错并自动修复代码

OpenClaw对话式编程:QwQ-32B模型解读报错并自动修复代码 1. 从手动调试到AI协同时代 去年冬天的一个深夜,我面对着一个诡异的Python报错——ImportError: cannot import name xxx from partially initialized module。在Stack Overflow翻遍相似问题后&…...

Air780E模块GPS定位实战:从AT指令到地图显示的完整流程

Air780E模块GPS定位实战:从AT指令到地图显示的完整流程 在物联网和嵌入式开发领域,精准定位功能已成为许多项目的核心需求。无论是资产追踪、车队管理还是户外探险设备,GPS模块都扮演着关键角色。Air780E作为一款高性价比的通信模块&#xff…...

FPGA开发实战:如何用AXI Quad SPI IP核实现高速SPI通信(含三种模式对比)

FPGA开发实战:AXI Quad SPI IP核高速通信优化指南 在嵌入式系统开发中,SPI通信作为外设接口的"血管网络",其传输效率直接影响系统整体性能。Xilinx的AXI Quad SPI IP核通过AXI4总线架构和多种工作模式,为FPGA开发者提供…...

Chandra OCR效果展示:PDF表单域识别+填写内容提取+结构化输出

Chandra OCR效果展示:PDF表单域识别填写内容提取结构化输出 1. 开篇:重新定义PDF表单处理体验 你是否曾经面对一堆填好的PDF表单头疼不已?手动录入表单数据既耗时又容易出错,特别是当表单数量多、字段复杂时,简直是一…...

【限时技术内参】Dify内部团队流出的异步节点调试秘钥:一键启用trace-id透传、延迟队列监控与失败重试可视化看板

第一章:Dify自定义节点异步处理插件概览Dify 的自定义节点(Custom Node)机制为工作流(Workflow)提供了强大的扩展能力,而异步处理插件则进一步解耦耗时任务与主执行流,显著提升用户体验与系统吞…...

Zotero学术党必备:PDF划词翻译插件保姆级配置指南(附下载)

Zotero学术利器:打造高效PDF划词翻译工作流的终极指南 作为一名常年与海量英文文献打交道的科研人员,我深刻理解那种面对专业术语时的无力感。直到发现Zotero的划词翻译插件,我的文献阅读效率提升了至少三倍。本文将分享如何将这个学术神器配…...

UE AI感知组件避坑指南:为什么你的AI“看不见”敌人?从IGenericTeamAgentInterface接口排查起

UE AI感知组件避坑指南:为什么你的AI“看不见”敌人?从IGenericTeamAgentInterface接口排查起 在虚幻引擎(UE)开发中,AI感知组件(AIPerception)是实现敌人检测、环境感知等功能的核心模块。然而…...

3D Face HRN技术解析:UV纹理映射原理、展平算法与像素级颜色一致性保障

3D Face HRN技术解析:UV纹理映射原理、展平算法与像素级颜色一致性保障 1. 引言:从2D照片到3D人脸的魔法转换 你有没有想过,为什么只需要一张普通的自拍照,就能生成一个精细的3D人脸模型?这背后隐藏着怎样的技术奥秘…...

百度地图坐标拾取+Python转换:5分钟搞定BD09转WGS84并生成SHP文件

百度地图坐标转换与SHP生成实战:Python全流程自动化指南 在地理信息系统(GIS)开发中,坐标转换是常见但容易出错的关键环节。许多开发者需要从百度地图获取位置数据,却面临坐标系不兼容的问题——百度使用的是BD09坐标系,而大多数G…...

PP-DocLayoutV3实战案例:电商商品说明书图像的table/image/caption分离

PP-DocLayoutV3实战案例:电商商品说明书图像的table/image/caption分离 1. 引言:从混乱的说明书到清晰的结构化数据 你有没有遇到过这种情况?拿到一份电商商品的说明书,里面图文混排,表格、图片、说明文字全都挤在一…...

破解After Effects动画数据孤岛:从设计到开发的JSON桥梁构建指南

破解After Effects动画数据孤岛:从设计到开发的JSON桥梁构建指南 【免费下载链接】ae-to-json will export an After Effects project as a JSON object 项目地址: https://gitcode.com/gh_mirrors/ae/ae-to-json 作为前端开发者,我们常常面临这样…...

低轨卫星C语言开发核心规范(NASA/ESA/中国星网联合认证V2.3版):含抗辐照编码 checklist、DO-178C轻量级适配方案及在轨验证用例集

第一章:低轨卫星C语言开发概述低轨卫星(LEO)系统对嵌入式软件的实时性、可靠性与资源效率提出严苛要求,C语言因其零开销抽象、确定性执行和广泛硬件支持,成为星载主控单元、姿态控制模块及遥测遥控子系统开发的首选语言…...

寻音捉影·侠客行多场景落地:已验证适用于政务/金融/医疗/教育/制造/传媒六大行业

寻音捉影侠客行多场景落地:已验证适用于政务/金融/医疗/教育/制造/传媒六大行业 1. 引言:音频检索的技术革新 在日常工作中,我们经常遇到这样的困扰:需要从数小时的会议录音中找到关键决策点,或者在海量的音频素材中…...

NVIDIA ADAS-英伟达DriveOS入门

之前的文章汽车操作系统-现状及演进中,介绍过汽车中需要3种OS:智能座舱、智能驾驶、车控。 其中智能驾驶一直都是当今智能汽车最重要的一个竞争领域,也是智能车愿景的开端:无人驾驶。车控属于成熟****汽车电子系统的代表&#xf…...

前缀和(Prefix Sum)

什么是前缀和算法? 前缀和是一种预处理技术,用于快速计算数组中任意区间的元素和。核心思想是:预先计算从数组开头到每个位置的累积和,之后任意区间 [i, j] 的和都可以通过 prefix[j] - prefix[i-1] 在 O(1) 时间内得到。算法图解…...

芯片-设计流程入门

芯片近些年来一直是风口,几乎所有有实力的上市公司都要蹭下这个热度:自研芯片。这也诞生了很多工作岗位,相对于硬件工程师,软件开发工程师能做的事情有限,但是也是非常重要的,而且跟着风口喝口汤也是可以的…...