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

Arduino程序结构详解与嵌入式开发对比指南

Arduino编程详解:从基础到进阶实践

一、Arduino程序的核心架构与扩展设计

1.1 程序框架的深度解析

Arduino程序的基石setup()loop()函数构成了整个开发体系的核心逻辑。这两个函数的设计哲学体现了嵌入式系统开发的两个关键维度:

  • 初始化阶段setup()):执行单次配置任务
  • 运行阶段loop()):持续执行主控逻辑

1.1.1 setup()函数的进阶应用

尽管setup()仅执行一次,但其功能远不止于简单的引脚配置。现代开发实践中,setup()承担着多项重要职责:

cpp

void setup() {// 基础配置pinMode(13, OUTPUT);       // 配置数字引脚13为输出模式pinMode(A0, INPUT_PULLUP); // 配置模拟引脚A0为上拉输入analogReference(DEFAULT);  // 设置参考电压为默认值// 通信初始化Serial.begin(115200);      // 高速串口通信Wire.begin();              // I2C总线初始化SPI.begin();               // SPI总线初始化// 外设初始化if (!SD.begin(4)) {        // SD卡初始化Serial.println("SD卡初始化失败");return;}// 中断配置attachInterrupt(digitalPinToInterrupt(2), handleInterrupt, RISING); // 配置外部中断// 外部库初始化if (!bme.begin(0x76)) {    // BME280传感器初始化Serial.println("传感器初始化失败");while (1); // 永久等待}
}
1.1.2 loop()函数的优化策略

loop()函数的执行效率直接影响系统响应速度。优化方法包括:

  • 状态机设计:使用有限状态机(FSM)管理复杂逻辑
  • 非阻塞编程:避免使用delay(),改用时间戳计算
  • 资源管理:动态分配内存时注意碎片化问题

cpp

unsigned long previousMillis = 0;
const long interval = 1000;void loop() {unsigned long currentMillis = millis();// 非阻塞延时if (currentMillis - previousMillis >= interval) {previousMillis = currentMillis;toggleLED(); // 执行状态切换}// 传感器数据采集if (millis() - lastSensorRead > 500) {readSensors();}// 通信任务if (Serial.available()) {processSerialInput();}
}

1.2 程序模块化设计

大型项目建议采用模块化架构:

cpp

// 主程序文件:main.ino
#include "ledControl.h"
#include "sensorManager.h"
#include "wifiHandler.h"void setup() {initLEDs();initSensors();connectToWiFi();
}void loop() {checkLEDStatus();readSensorData();handleWiFiTasks();
}

二、通信技术的全面拓展

2.1 串口通信的高级应用

2.1.1 多通道通信

Arduino支持硬件串口和软件串口:

cpp

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TXvoid setup() {Serial.begin(9600);mySerial.begin(19200);
}void loop() {// 硬件串口通信if (Serial.available()) {char c = Serial.read();mySerial.write(c);}// 软件串口通信if (mySerial.available()) {Serial.write(mySerial.read());}
}
2.1.2 数据帧协议设计

cpp

#define START_BYTE 0xA5
#define END_BYTE 0x5Avoid sendPacket(byte cmd, byte data) {Serial.write(START_BYTE);Serial.write(cmd);Serial.write(data);Serial.write(END_BYTE);
}bool receivePacket(byte *cmd, byte *data) {if (Serial.available() >= 4) {byte start = Serial.read();if (start == START_BYTE) {*cmd = Serial.read();*data = Serial.read();byte end = Serial.read();if (end == END_BYTE) return true;}}return false;
}

2.2 无线通信技术

2.2.1 蓝牙通信(ESP32示例)

cpp

#include <BLEDevice.h>
#include <BLEServer.h>BLEServer* pServer;
BLEService* pService;
BLECharacteristic* pCharacteristic;void setup() {BLEDevice::init("MyESP32");pServer = BLEDevice::createServer();pService = pServer->createService(BLEUUID("0000110A-0000-1000-8000-00805F9B34FB"));pCharacteristic = pService->createCharacteristic(BLEUUID("0000110B-0000-1000-8000-00805F9B34FB"),BLECharacteristic::PROPERTY_READ |BLECharacteristic::PROPERTY_WRITE);pCharacteristic->setValue("Hello World");pService->start();pServer->getAdvertising()->start();
}void loop() {if (pCharacteristic->getValue().length() > 0) {String value = pCharacteristic->getValue().c_str();pCharacteristic->setValue(""); // 清空缓冲区}
}
2.2.2 LoRa远距离通信

cpp

#include <LoRa.h>void setup() {Serial.begin(9600);while (!Serial);if (!LoRa.begin(915E6)) {Serial.println("LoRa初始化失败");while (1);}
}void loop() {int packetSize = LoRa.parsePacket();if (packetSize) {while (LoRa.available()) {String data = LoRa.readString();Serial.println("收到数据: " + data);}} else {LoRa.beginPacket();LoRa.print("Hello LoRa");LoRa.endPacket();delay(1000);}
}

三、传感器与执行器的深度集成

3.1 多传感器融合系统

cpp

#include <Wire.h>
#include <Adafruit_BME280.h>
#include <DHT.h>Adafruit_BME280 bme;
DHT dht(A0, DHT11);void setup() {Serial.begin(115200);if (!bme.begin(0x76)) {Serial.println("BME280未检测到");while (1);}dht.begin();
}void loop() {float temp = bme.readTemperature();float hum = bme.readHumidity();float dhtTemp = dht.readTemperature();float dhtHum = dht.readHumidity();Serial.print("BME280 - 温度: ");Serial.print(temp);Serial.print(" °C, 湿度: ");Serial.print(hum);Serial.println(" %");Serial.print("DHT11 - 温度: ");Serial.print(dhtTemp);Serial.print(" °C, 湿度: ");Serial.print(dhtHum);Serial.println(" %");delay(2000);
}

3.2 电机控制的高级实现

3.2.1 步进电机精确控制

cpp

#include <AccelStepper.h>AccelStepper stepper(AccelStepper::DRIVER, 2, 3); // DIR, STEPvoid setup() {stepper.setMaxSpeed(1000);stepper.setAcceleration(500);
}void loop() {if (stepper.distanceToGo() == 0) {stepper.moveTo(stepper.currentPosition() + 200); // 移动200步}stepper.run();
}
3.2.2 无刷电机控制(ESC)

cpp

#include <Servo.h>Servo esc;void setup() {esc.attach(9); // 连接到PWM引脚9esc.write(3);  // 最小信号(停止)delay(2000);esc.write(7);  // 启动信号
}void loop() {for (int speed=3; speed<=7; speed++) {esc.write(speed);delay(1000);}for (int speed=7; speed>=3; speed--) {esc.write(speed);delay(1000);}
}

四、物联网系统的构建实践

4.1 云端数据传输

4.1.1 ThingSpeak平台集成

cpp

#include <WiFiNINA.h>
#include <ThingSpeak.h>char ssid[] = "YOUR_SSID";
char pass[] = "YOUR_PASSWORD";
unsigned long myChannelNumber = YOUR_CHANNEL_NUMBER;
const char * myWriteAPIKey = "YOUR_API_KEY";WiFiClient client;void setup() {Serial.begin(9600);while (!Serial);if (WiFi.status() != WL_CONNECTED) {WiFi.begin(ssid, pass);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}}ThingSpeak.begin(client);
}void loop() {float temperature = getTemperature(); // 自定义传感器读取函数ThingSpeak.writeField(myChannelNumber, 1, temperature, myWriteAPIKey);delay(20000); // 20秒间隔
}
4.1.2 MQTT协议实现

cpp

#include <WiFiNINA.h>
#include <PubSubClient.h>const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* mqtt_user = "";
const char* mqtt_password = "";WiFiClient espClient;
PubSubClient client(espClient);void callback(char* topic, byte* payload, unsigned int length) {Serial.print("Message arrived [");Serial.print(topic);Serial.print("] ");for (int i=0; i<length; i++) {Serial.print((char)payload[i]);}Serial.println();
}void setup() {Serial.begin(115200);connectToWiFi();client.setServer(mqtt_server, mqtt_port);client.setCallback(callback);
}void connectToWiFi() {WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}
}void reconnect() {while (!client.connect("ESP32Client", mqtt_user, mqtt_password)) {Serial.println("MQTT连接失败,5秒后重试...");delay(5000);}client.subscribe("test/topic");
}void loop() {if (!client.connected()) {reconnect();}client.loop();
}

五、开发板选型的深度对比

5.1 性能参数对比表

特性Arduino UNOESP32Raspberry Pi Pico
处理器ATmega328P (16MHz)Xtensa LX6 (240MHz)ARM Cortex-M0+ (133MHz)
内存2KB SRAM, 32KB Flash520KB SRAM, 4MB Flash264KB SRAM, 2MB Flash
无线功能Wi-Fi/蓝牙无(需外接模块)
编程语言C/C++C++/MicroPythonC++/MicroPython
价格(约)2−2−55−5−154−4−6
功耗
开发环境Arduino IDEArduino IDE/ESP-IDFArduino IDE/Thonny

5.2 选型决策矩阵

项目需求推荐开发板理由
初学者教学Arduino UNO简单易用,社区资源丰富
物联网应用ESP32内置Wi-Fi/蓝牙,处理能力强
多任务处理Raspberry Pi Pico双核处理器,高性能
低功耗设备Arduino UNO低功耗设计,适合电池供电
工业控制Arduino Mega更多I/O引脚和内存
音频处理Teensy 4.1高速音频处理能力

六、高级编程技巧

6.1 中断处理优化

cpp

volatile bool interruptFlag = false;void handleInterrupt() {interruptFlag = true;
}void setup() {pinMode(2, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(2), handleInterrupt, FALLING);
}void loop() {if (interruptFlag) {interruptFlag = false;// 执行中断处理逻辑}// 主循环逻辑
}

6.2 内存管理技巧

  • 静态分配:优先使用固定大小数组
  • 动态分配:使用malloc()/free()时注意内存碎片
  • 字符串处理:避免频繁创建String对象

cpp

// 不推荐方式
String data = "Start";
for (int i=0; i<100; i++) {data += String(i);
}// 推荐方式
char buffer[100];
snprintf(buffer, sizeof(buffer), "Start 0-99");

6.3 代码优化策略

  • 常量声明:使用const限定不可变数据
  • 宏定义:简化重复代码
  • 位操作:提升寄存器级操作效率

cpp

#define LED_PIN 13void setup() {DDRB |= (1 << LED_PIN); // 设置为输出
}void loop() {PORTB ^= (1 << LED_PIN); // 切换LED状态delay(500);
}

七、典型应用案例

7.1 智能家居控制系统

cpp

#include <WiFi.h>
#include <WebServer.h>const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
WebServer server(80);void handleRoot() {String html = "<html><body>";html += "<h1>智能家居控制</h1>";html += "<a href=\"/light/on\">开灯</a><br>";html += "<a href=\"/light/off\">关灯</a>";html += "</body></html>";server.send(200, "text/html", html);
}void handleLightOn() {digitalWrite(LED_BUILTIN, HIGH);server.sendHeader("Location", "/");server.send(303);
}void handleLightOff() {digitalWrite(LED_BUILTIN, LOW);server.sendHeader("Location", "/");server.send(303);
}void setup() {pinMode(LED_BUILTIN, OUTPUT);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);}server.on("/", handleRoot);server.on("/light/on", handleLightOn);server.on("/light/off", handleLightOff);server.begin();
}void loop() {server.handleClient();
}

7.2 环境监测站

cpp

#include <Wire.h>
#include <Adafruit_BME280.h>
#include <WiFiNINA.h>
#include <ThingSpeak.h>Adafruit_BME280 bme;
char ssid[] = "YOUR_SSID";
char pass[] = "YOUR_PASSWORD";
unsigned long channelID = YOUR_CHANNEL_ID;
const char * apiKey = "YOUR_API_KEY";
WiFiClient client;void setup() {Serial.begin(9600);while (!Serial);if (!bme.begin(0x76)) {Serial.println("BME280未检测到");while (1);}WiFi.begin(ssid, pass);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}ThingSpeak.begin(client);
}void loop() {float temp = bme.readTemperature();float hum = bme.readHumidity();float pres = bme.readPressure() / 100.0F;ThingSpeak.writeFields(channelID, apiKey, temp, hum, pres);delay(20000); // 20秒间隔
}

八、调试与优化技巧

8.1 调试工具链

  • Serial Monitor:基础调试
  • Logic Analyzer:分析数字信号时序
  • Oscilloscope:观察模拟波形
  • SWD Debugger:专业调试接口(适用于高级开发)

8.2 性能优化方法

  • 代码剖析:使用micros()测量函数执行时间
  • 内存分析:使用__heap_cap检查内存使用
  • 功耗优化:启用低功耗模式(如sleep()函数)

8.3 常见问题排查

问题现象可能原因解决方案
串口无法通信波特率不匹配检查Serial.begin()参数
传感器数据异常电源不稳定增加电容滤波
电机运行抖动PWM频率过低使用analogWriteFrequency()调整
Wi-Fi连接失败SSID/PASSWORD错误检查WiFi凭据
程序卡死内存泄漏检查动态内存分配

九、未来发展趋势

9.1 RISC-V架构的崛起

随着RISC-V架构在嵌入式领域的普及,未来Arduino生态系统可能会出现基于RISC-V的开发板,提供更灵活的指令集定制能力和更高的性能。

9.2 边缘计算的融合

结合TensorFlow Lite等机器学习框架,Arduino设备将具备本地AI推理能力,实现更智能的边缘计算应用。

9.3 低功耗物联网发展

随着LoRaWAN、NB-IoT等低功耗广域网技术的成熟,Arduino设备将在智慧城市、农业监测等领域发挥更大作用。

相关文章:

Arduino程序结构详解与嵌入式开发对比指南

Arduino编程详解&#xff1a;从基础到进阶实践 一、Arduino程序的核心架构与扩展设计 1.1 程序框架的深度解析 Arduino程序的基石setup()和loop()函数构成了整个开发体系的核心逻辑。这两个函数的设计哲学体现了嵌入式系统开发的两个关键维度&#xff1a; 初始化阶段&#…...

华为云汪维敏:AI赋能应用现代化,加速金融生产力跃升

4月24日&#xff0c;在2025第四届中国国际软件发展大会的“应用现代化赋能数智金融新时代”论坛上&#xff0c;华为云PaaS服务产品部副部长、应用现代化产业联盟特邀顾问汪维敏先生发表“AI赋能应用现代化&#xff0c;加速金融生产力跃升”主题演讲&#xff0c;介绍了未来应用智…...

linux find命令妙用

对于需要查找一定时间的文件&#xff0c;可以使用find 命令处理 格式参考 find /path/to/search -type f -name "pattern" -mtime -2 -exec sh /path/to/XXX.sh {} /;更多细节讲解看这里find命令时间细讲 那么实际工作中使用的案例 核心命令 find /var/path/ -ty…...

利用v0与Cursor优化开发流程和效率

以下是 v0.dev 与 Cursor 的深度对比分析&#xff0c;基于最新功能&#xff08;截至2025年4月&#xff09;和实际开发场景&#xff1a; 一、核心定位对比 维度v0.devCursor本质定位AI驱动的前端设计工具AI增强的代码编辑器核心目标快速生成可交互的UI原型提升全栈开发效率&am…...

ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning

&#x1f9e0; 一、论文背景&#xff1a;为什么需要 ReSearch&#xff1f; &#x1f30d; 大语言模型&#xff08;LLM&#xff09;的问题&#xff1a; 尽管 GPT、Claude、Qwen 等 LLMs 在推理上取得了巨大进展&#xff0c;但它们仍面临几个关键挑战&#xff1a; 信息孤岛&am…...

瑞芯微芯片算法开发初步实践

文章目录 一、算法开发的一般步骤1.选择合适的深度学习框架2.对于要处理的问题进行分类&#xff0c;是回归问题还是分类问题。3.对数据进行归纳和整理4.对输入的数据进行归一化和量化&#xff0c;保证模型运行的效率和提高模型运行的准确度5.在嵌入式处理器上面运行模型&#x…...

大连理工大学选修课——机器学习笔记(1):概述

机器学习概述 机器学习的本质 机器学习是为了设计解决问题的算法。 为输入与输出建立某种映射&#xff1a; 类似于函数关系&#xff1a; Y f ( X ) Yf(X) Yf(X) 不同的映射方法体现了不同的思想。 相关概念 深度学习是机器学习的一个分支 深度学习是深层次化的神经网…...

(4)python中jupyter lab使用python虚拟环境

1. 先了解IPython和IPyKernel简介 IPython 是一个功能强大的交互式 Python 解释器和开发环境。它提供了一种增强的 Python Shell,使得用户能够以交互的方式探索、分析和可视化数据。IPython 的名称来源于 "Interactive Python",体现了其交互式的特性。 IPyKernel 是…...

VSCode Auto Rename Tag插件不生效

目录 一、问题 二、解决方法 一、问题 1.Auto Rename Tag插件安装后不生效&#xff0c;每次打开右下角都有 一个 弹框提示&#xff1a; The Auto Rename Tag server crashed 5 times in the last 3 minutes. The server will not be restarted. 大概意思&#xff1a;Auto …...

git did not exit cleanly (exit code 128) 已解决

在回退代码的时候遇到这个报错提示&#xff1a; 网上搜索的时候看到有几种解决办法&#xff1a; 1.更改地址 TortoiseGit --> "Settings" --> "Network" 将"C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe" 修改为"C:\…...

一个完整的神经网络训练流程详解(附 PyTorch 示例)

&#x1f9e0; 一个完整的神经网络训练流程详解&#xff08;附 PyTorch 示例&#xff09; &#x1f4cc; 第一部分&#xff1a;神经网络训练流程概览&#xff08;总&#xff09; 在深度学习中&#xff0c;构建和训练一个神经网络模型并不是简单的“输入数据、得到结果”这么简…...

2025年-redis(p1-p10)

1.redis介绍 &#xff08;1&#xff09;基础&#xff1a;常见的数据结构及命令、jedis的应用和优化、springDataRedis的应用和优化 &#xff08;2&#xff09;企业实战的应用场景&#xff1a;共享session、缓存解决问题、秒杀中的redis应用、社交app中的redis应用、redis特殊结…...

一、OrcaSlicer源码编译

一、下载 1、OrcaSlicer 2.3.0版本的源码 git clone https://github.com/SoftFever/OrcaSlicer.git -b v2.3.0 二、编译 1、在OrcaSlicer目录运行cmd窗口&#xff0c;输入build_release.bat 2、如果出错了&#xff0c;可以多运行几次build_release.bat 3、在OrcaSlicer\b…...

Linux 基础IO(上)--文件与文件描述符fd

前言&#xff1a; 在生活里&#xff0c;我们常和各种文件打交道&#xff0c;像用 Word 写文档、用播放器看视频&#xff0c;这些操作背后都离不开文件的输入输出&#xff08;I/O&#xff09;。在 Linux 系统中&#xff0c;文件 I/O 操作更是复杂且关键。 接下来我们将深入探讨…...

泛微OA.E9--07--IDEA搭建后端二开环境

泛微OA.E9–07–IDEA搭建后端二开环境 一.前期准备 1.安装IDEA 2.从服务器中把ecology和JDK这几个文件拷贝到本地。 &#xff08;ecology太大的话可以不拷log日志文件&#xff09; 3.拷到本地后&#xff0c;在ecology文件下创建src文件夹 二.配置IDEA 1.启动IDEA后&#xff0…...

美的人形机器人即将投入实际应用

国内家电巨头美的集团近日公布了其自主研发的人形机器人的具体落地计划。根据公司披露的信息&#xff0c;这款机器人将于5月在湖北荆州的洗衣机工厂率先投入使用&#xff0c;承担设备运维、质量检测和物料搬运等工作任务。预计今年下半年&#xff0c;该机器人还将进入美的线下门…...

【使用小皮面板 + WordPress 搭建本地网站教程】

&#x1f680; 使用小皮面板 WordPress 搭建本地网站教程&#xff08;快速上手&#xff09; 本教程将手把手教你如何使用 小皮面板&#xff08;XAMPP 类似工具&#xff09; 和 WordPress 搭建一个完全本地化的网站环境。适合 初学者 / 博主 / Web开发者 本地练习使用&#xf…...

EWM 流程全自动化实现方法

目录 1 简介 2 实现方法 2.1 EWM 内向交货单自动创建 2.2 EWM 自动收货 2.3 当 EWM GR 的时候,自动触发 EWM 上架仓库任务。 2.4 确认 EWM 仓库任务/订单 3 写在最后 1 简介 当仓库遇到 EWM 的时候,大家首先想到的是 EWM 的业务操作多且功能复杂,甚至有些客户还会考…...

智能驾驶新时代:NVIDIA高级辅助驾驶引领未来出行安全

智能驾驶新时代&#xff1a;NVIDIA高级辅助驾驶引领未来出行安全 在全球汽车产业数字化转型的时代潮流中&#xff0c;高级辅助驾驶技术已逐渐成为推动产业革新的核心动力。作为这一领域的领导者之一&#xff0c;NVIDIA通过其先进的技术解决方案&#xff0c;正在积极塑造未来的…...

NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代

随着科技的不断进步&#xff0c;汽车行业正迎来前所未有的变革&#xff0c;智能驾驶技术成为全球产业竞相布局的焦点之一。然而&#xff0c;这场技术革命的背后&#xff0c;最关键且被广泛关注的是安全性问题。近日&#xff0c;我认真研读了NVIDIA发布的《自动驾驶安全报告》白…...

聚焦数字中国|AI赋能与安全守护:Coremail引领邮件办公智能化转型

4月28日&#xff0c;第八届数字中国建设峰会在福州拉开序幕。当天&#xff0c;数字中国新产品新技术发布会开讲&#xff0c;Coremail受邀亮相现场&#xff0c;与与会嘉宾分享AI在邮件产品领域的最新应用成果和实践经验。 Coremail首席客户代表刘子建以《AI赋能与安全守护&#…...

OpenCV的grabCut算法分割图像

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 基本概念 使用grabCut算法可以用最小程度的用户交互来分解前景。从用户角度来看&#xff0c;grabCut算法是怎么工作的呢&#xff1f;首先画一个矩形方块把前景图圈起来&#xff0c;前景区域应该完全在矩形内…...

[计算机科学#6]:从锁存器到内存,计算机存储的构建与原理

【核知坊】&#xff1a;释放青春想象&#xff0c;码动全新视野。 我们希望使用精简的信息传达知识的骨架&#xff0c;启发创造者开启创造之路&#xff01;&#xff01;&#xff01; 内容摘要&#xff1a;在上一篇文章中&#xff0c;我们深入了解了计算机如…...

练习001

目录 前言 数字诗意 分析 代码 封闭图形个数 分析 代码 回文数组 分析 代码 商品库存管理 分析 代码 挖矿 分析 代码 回文字符串 分析 代码 前言 好久不更新了&#xff0c;今天来更新一下。 当然不是主包偷懒啊&#xff0c;是最近的事情实在是有点多QAQ。…...

【Linux调整FTP端口】

Linux调整FTP端口 一、确保新端口未被占用在修改端口之前&#xff0c;可以使用以下命令检查端口是否被占用&#xff1a; 二、修改vsftpd配置文件1. 打开vsftpd配置文件2. 找到并修改端口配置3. 保存并退出4. 重启vsftpd服务 三、配置防火墙 在Linux系统中修改FTP端口&#xff0…...

spring中的@Configuration注解详解

一、概述与核心作用 Configuration是Spring框架中用于定义配置类的核心注解&#xff0c;旨在替代传统的XML配置方式&#xff0c;通过Java代码实现Bean的声明、依赖管理及环境配置。其核心作用包括&#xff1a; 标识配置类&#xff1a;标记一个类为Spring的配置类&#xff0c;…...

AI中常用概念的理解

1. RAG&#xff08;检索增强生成&#xff09; 通俗理解&#xff1a;就像你写作业时&#xff0c;先查课本 / 百度找资料&#xff0c;再根据资料写答案&#xff0c;而不是纯靠记忆瞎编。 AI 模型&#xff08;比如 ChatGPT&#xff09;回答问题时&#xff0c;先去 “数据库 / 互联…...

JWT GenTokenParseToken

JWT(Json Web Token) 获取Token、解密Token jwt.go package jwtimport ("errors""time""github.com/golang-jwt/jwt/v5" )var jwtSecret []byte("secret")type CustomClaims struct {Username string json:"username"jw…...

ROS:发布相机、IMU等设备消息主题

文章目录 📚简介📷发布相机消息主题🌐网络相机🚀RTSP🔌串口设备🧩 踩坑📚简介 使用ROS系统录制rosbag包,需要发布设备消息主题,才能使用rosbag record命令录制rosbag包。 📷发布相机消息主题 获取相机视频流的方式有多种,主要包含: 网络相机,使用RTSP…...

C++好用的打印日志类

在项目中,调试打印十分重要,这里分享一个自己写的简单但是实用的打印日志类,控制台打印时间戳具体内容保存文件 1.相关库介绍及其基本用法 a.<iostream> 功能&#xff1a;提供基本的输入输出流功能&#xff0c;如std::cout用于控制台输出&#xff0c;std::cin用于控制台输…...

晶振:从消费电子到航天领域的时间精度定义者

从手表到卫星&#xff1a;晶振如何在不同领域定义时间精度 在时间的长河中&#xff0c;人类对时间精度的追求永无止境。从古老的日晷到如今精密的计时仪器&#xff0c;每一次进步都离不开技术的革新。而晶振&#xff0c;作为现代计时的核心元件&#xff0c;在不同领域发挥着至…...

huggingface下载数据和模型,部分下载,本地缓存等常见问题踩坑

huggingface 注&#xff1a;系统环境为windows11 23H2&#xff0c;macOS和Linux用户可以查看下【参考】里的链接文档&#xff0c;差异不大 安装huggingface-cli 虽然可以通过代码下载模型和数据集&#xff08;下文会提及&#xff09;&#xff0c;但我依然推荐你用此方法来管理…...

分布式架构:Dubbo 协议如何做接口测试

传统单体架构是一个应用程序进程内处理完所有的逻辑&#xff1a;一个系统糅合了多个功能&#xff0c;如注册 --登录–充值–余额管理–用户积分等&#xff0c;所有的功能模块都是在一个应用程度里处理完的&#xff1b;一个请求过来–> 到应用程序系统–>数据库处理–>…...

Python math 库教学指南

Python math 库教学指南 一、概述 math 库是 Python 标准库中用于数学运算的核心模块&#xff0c;提供以下主要功能&#xff1a; 数学常数&#xff08;如 π 和 e&#xff09;基本数学函数&#xff08;绝对值、取整等&#xff09;幂与对数运算三角函数双曲函数特殊函数&…...

Antd Upload组件连续回车会多次触发文件夹弹窗的bug修复

看了看issue一大堆&#xff0c;没一个解决的&#xff0c;真恼火&#xff1a;Upload 上传组件&#xff0c;当上传完一个文件后&#xff0c;我按下键盘回车键&#xff0c;自动又打开了“选择文件窗口”&#xff0c;点击“选择文件窗口”下面的取消按钮&#xff0c;再次打开了“选…...

数据仓库与数据湖的对比分析

目录 一、数据来源 数据仓库 数据湖 二、数据模式转换时机 数据仓库 数据湖 三、数据存储成本 数据仓库 数据湖 四、数据质量 数据仓库 数据湖 五、面向用户 数据仓库 数据湖 六、主要支撑的应用类型 数据仓库 数据湖 在企业数据管理领域&#xff0c;数据仓库…...

Windows系统下MinerU的CUDA加速配置指南

Windows系统下MinerU的CUDA加速配置指南 快速解锁GPU性能,提升文档解析效率 1、简介 MinerU是一款高效的文档解析工具,支持通过CUDA加速显著提升处理速度。本指南详细说明如何在Windows系统中配置CUDA环境,并启用MinerU的GPU加速功能,帮助用户充分利用NVIDIA显卡的计算能…...

LeetCode路径总和系列问题解析:I、II、III的解决方案与优化

文章目录 引言一、路径总和 I&#xff08;LeetCode 112&#xff09;问题描述方法思路Java代码实现复杂度分析 二、路径总和 II&#xff08;LeetCode 113&#xff09;问题描述方法思路Java代码实现复杂度分析 三、路径总和 III&#xff08;LeetCode 437&#xff09;问题描述方法…...

【漫话机器学习系列】233.激活阈(Threshold Activation)

深度学习入门&#xff1a;了解“阈值激活函数”&#xff08;Threshold Activation Function&#xff09; 激活函数是神经网络中至关重要的一环。今天&#xff0c;我们通过一幅简单直观的手绘图&#xff0c;一起理解最早期也最基础的激活函数之一 —— 阈值激活函数&#xff08;…...

使用vue开发electron

1.全局安装electron npm i electron -g 查看是否安装成功 electron -v 在vue项目中添加electron模块 vue add electron-builder 添加成功后&#xff0c;目录中多了background.js文件 可以在background.js配置 例如 窗口大小&#xff0c;是否可以缩放&#xff0c;是否可以移…...

安全企业内部im,BeeWorks即时通讯

BeeWorks企业即时通讯软件具备哪些优势&#xff1f; 1. 多样的沟通方式 文本消息&#xff1a;支持发送文字消息&#xff0c;包括富文本格式&#xff08;如加粗、斜体、下划线、颜色等&#xff09;。 语音消息&#xff1a;支持发送语音消息&#xff0c;方便快捷&#xff0c;适…...

网易爆米花 1.8.8 | 免费无广告,支持多网盘聚合和智能刮削技术,提供顶级画质和逼真音效的影视管理应用

网易爆米花TV是一款专为家庭设计的影视管理应用&#xff0c;旨在提供一个简洁易用的家庭影视库。它支持从多个网盘&#xff08;如阿里、百度、天翼等&#xff09;、WebDAV以及本地资源导入&#xff0c;聚合用户的影视资源&#xff0c;并通过智能刮削技术将视频信息形成精美的影…...

蓝牙语音遥控国产适用芯片HS6621

蓝牙语音遥控器一般是通过按下语音键&#xff0c;遥控器会发送一个 HID 编码通知智能电视或者机顶盒打开识音功能&#xff0c;此时&#xff0c;遥控器LED灯保持闪烁或者长亮&#xff0c;用户开始录音同时将语音数据上传给智能电视或者机顶盒。而智能电视或者机顶盒&#xff0c;…...

【Vue2】1-创建一个Vue实例

Vue2官方文档 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&g…...

销售与金融领域的数据处理与分析方法

一、引言 在销售和金融领域&#xff0c;除了常见的同比、环比和移动平均等数据处理方法外&#xff0c;还有众多方法可供选择&#xff0c;这些方法分布于不同的专业方向&#xff0c;旨在帮助分析和解决问题&#xff0c;以下将按类别对这些方法进行详细梳理。 二、按类别划分的…...

DataWorks Copilot 集成 Qwen3-235B-A22B混合推理模型,AI 效能再升级!

刚刚&#xff0c;阿里云一站式智能大数据开发治理平台 DataWorks 正式接入 Qwen3 模型&#xff0c;可支持235B最大尺寸。用户通过 DataWorks Copilot 智能助手即可调用该模型&#xff0c;通过自然语言交互完成多种代码操作&#xff0c;实现数据开发、数据分析的快速实现。 Qwen…...

芯片软错误概率探究:基于汽车芯片安全设计视角

摘要&#xff1a; 本文深入剖析了芯片软错误概率问题&#xff0c;结合 AEC-Q100 与 IEC61508 标准&#xff0c;以 130 纳米工艺 1Mbit RAM 芯片为例阐述其软错误概率&#xff0c;探讨汽车芯片安全等级划分及软错误对汽车关键系统的影响&#xff0c;分析先进工艺下软错误变化趋势…...

青少年抑郁症患者亚群结构和功能连接耦合的重构

目录 1 研究背景及目的 2 研究方法 2.1 数据来源与参与者 2.1.1 MDD患者&#xff1a; 2.1.2 健康对照组&#xff1a; 2.2 神经影像分析流程 2.2.1 图像采集与预处理&#xff1a; 2.2.2 网络构建&#xff1a; 2.2.3 区域结构-功能耦合&#xff08;SC-FC耦合&#xff09…...

汽车OTA在线升级法规分析

摘要 本文介绍了R156法规即《关于批准车辆的软件升级和软件升级管理体系统一规定的法规》、该法规专注于汽车软件升级功能&#xff0c;并为此提出了一系列具体要求&#xff0c;旨在确保软件升级流程的安全性、可控性和合规性&#xff0c;从而顺应汽车行业智能化、联网化的发展趋…...

【上海大学数据库原理实验报告】MySQL基础操作

实验目的 熟悉MySQL基础操作。 实验内容 创建四张工程项目的关系表。 图 1 四张工程项目关系表的结构 检索供应零件编号为J1的工程的供应商编号SNO。检索供应零件给工程J1&#xff0c;且零件编号为P1的供应商编号SNO。查询没有正余额的工程编号、名称及城市&#xff0c;结果…...