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

Android 端侧运行 LLM 框架 MNN 及其应用

MNN Chat Android App - 基于 MNN 引擎的智能聊天应用

  • 一、MNN 框架简介与工作原理
    • 1.1 什么是 MNN?
    • 1.2 MNN 的工作原理
  • 二、MNN Chat Android App
    • 2.1 MNN Chat 的功能
    • 2.2 MNN Chat 的优势
    • 2.3 MNN Chat Android App 的使用
  • 三、总结

随着移动端人工智能需求的日益增长,如何在资源受限的设备上高效运行深度学习模型成为了一个热门话题,阿里巴巴开源的 MNN(Mobile Neural Network) 框架正是这一领域的佼佼者。

一、MNN 框架简介与工作原理

1.1 什么是 MNN?

MNN 是由阿里巴巴淘系技术团队开发的一个高效、轻量级的深度学习推理框架,专为移动端和嵌入式设备设计。它支持多种主流深度学习模型格式(如 TensorFlow、Caffe、ONNX 等),并通过高度优化的计算内核实现跨平台的模型推理。MNN 的核心目标是低门槛、高性能、轻量化,让开发者能够轻松将复杂的 AI 模型部署到手机、平板等设备上。

MNN 官网:https://www.mnn.zone

在这里插入图片描述

1.2 MNN 的工作原理

  1. 模型转换与优化
    MNN 提供了一个强大的模型转换工具,可以将 TensorFlow、ONNX 等格式的模型转换为 MNN 专用的轻量化格式。在转换过程中,它会对模型进行优化,例如量化(支持 FP16 和 Int8,减少模型大小 50%-70%)、算子融合和冗余计算消除,从而提升推理效率。
  2. 高效计算内核
    MNN 使用大量手写汇编代码(针对 ARM 和 x86 架构)优化核心计算。例如,它支持 Winograd 卷积算法(适用于 3x3、5x5 等对称卷积),并在 ARM v8.2 上利用 FP16 半精度计算提升 2 倍速度。此外,MNN 还集成了 GPU 加速(如 Metal、OpenCL、Vulkan),充分利用设备的计算资源。
  3. 多设备混合计算
    MNN 支持在 CPU 和 GPU 之间动态分配计算任务,确保在不同硬件条件下都能达到最优性能。这种灵活性使其适配性极强,从高端手机到低端嵌入式设备都能流畅运行。
  4. 轻量化设计
    MNN 的核心库体积极小(Android 平台约为 800KB),无第三方依赖,易于集成到各种应用中。开发者甚至可以通过 MNN_BUILD_MINI 选项进一步压缩包体大小(约减少 25%)。

二、MNN Chat Android App

MNN Chat 是基于 MNN 引擎开发的一款 Android 端智能聊天应用,集成了多模态大语言模型(LLM)。它旨在为用户提供一个轻便、高效的聊天体验,支持文本输入、图像识别等多种交互方式。MNN Chat 的核心亮点在于其本地推理能力,无需依赖云端服务器即可运行强大的 AI 模型。

下载:MnnLlmChat-v0.2.2

2.1 MNN Chat 的功能

  1. 多模态 LLM 支持
    MNN Chat 集成了主流大语言模型(如千问、百川、LLAMA 等),这些模型通过 MNN 的转换工具优化后部署到 Android 设备上。MNN 框架支持 Transformer 等复杂网络结构,确保模型在移动端的推理性能。
  2. 本地化部署
    通过 MNN 的轻量化设计,MNN Chat 将模型和推理引擎打包到 APK 中,用户无需联网即可使用。这不仅提升了响应速度,还增强了数据隐私性。
  3. 多输入处理
    MNN Chat 支持多模态输入(文本、图像等),借助 MNN 的图像预处理和推理能力,用户可以上传图片并与 AI 进行基于内容的对话。例如,用户可以上传一张猫咪照片,询问“这是什么品种?”。

2.2 MNN Chat 的优势

  1. 高效性能
    得益于 MNN 的优化,MNN Chat 在中低端设备上也能实现秒级响应。例如,在 ARM v8.2 设备上,FP16 计算和 Winograd 算法让推理速度提升显著。
  2. 离线运行
    无需联网,所有计算都在本地完成,既节省流量,又保护用户隐私。
  3. 轻量便捷
    APK 体积小(核心引擎仅 800KB 左右),占用存储空间少,安装后对设备性能影响 минимален。
  4. 多模态体验
    支持文本和图像输入,相比单一文本聊天应用,功能更加丰富,用户体验更佳。
  5. 开源生态
    MNN Chat 基于开源的 MNN 框架,开发者可以根据需求定制模型或功能,具有极高的灵活性。

2.3 MNN Chat Android App 的使用

  • 安装与配置

用户可以从 MNN 官网 或 GitHub 仓库获取 MNN Chat 的 APK 文件。在 Android 设备上安装 APK,确保设备版本在 Android 4.3 以上。打开应用后,您可以浏览所有支持的模型,下载所需模型,并直接在应用内与模型交互。此外,您可以通过侧边栏访问聊天历史,轻松查看和管理之前的对话记录。

在这里插入图片描述

  • 使用步骤
  1. 文本聊天
    在主界面输入文本问题,例如“今天天气如何?”,MNN Chat 会快速生成回复。
  2. 图像交互
    点击“上传图片”按钮,选择本地照片,配合文本提问(如“这是什么?”),即可获得智能回答。
  3. 设置调整
    用户可在设置中选择不同的模型(如中文千问或英文 LLAMA),以满足多样化需求。

三、总结

MNN Chat Android App 是 MNN 框架在移动端 AI 应用中的一次成功实践。它充分利用了 MNN 的轻量化、高性能特点,将复杂的多模态大语言模型带到了用户手中。无论是普通用户寻求便捷的智能助手,还是开发者探索移动端 AI 的可能性,MNN Chat 都提供了极具吸引力的解决方案。

如果你对移动端 AI 感兴趣,不妨下载 MNN Chat 体验一番,或者深入研究 MNN 框架,解锁更多技术潜力!

相关文章:

Android 端侧运行 LLM 框架 MNN 及其应用

MNN Chat Android App - 基于 MNN 引擎的智能聊天应用 一、MNN 框架简介与工作原理1.1 什么是 MNN?1.2 MNN 的工作原理 二、MNN Chat Android App2.1 MNN Chat 的功能2.2 MNN Chat 的优势2.3 MNN Chat Android App 的使用 三、总结 随着移动端人工智能需求的日益增长…...

jupyter汉化、修改默认路径详细讲解

1、配置镜像路径 修改第三方库的下载路径,比如:[清华镜像pypi](https://mirrors.tuna.tsinghua.edu.cn/help/pypi/),配置镜像地址。 首先执行 pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 2、安…...

java面试笔记(二)

1.流程中如何数据回填 (1)方法1: 在工作流中有一个标识,每一次审批的时候去判断是否审批完成,然后调用反射 (2)方法2: 创建一个流程结束的监听器,监听流程是否结束&a…...

【大语言模型笔记进阶一步】提示语设计学习笔记,跳出框架思维,自己构建提示词

一、大语言模型应用场景 1. 文本生成 文本创作: 诗歌故事,剧本,推文帖子 摘要与改写: 长文本摘要与简化,多语言翻译与本地化 结构化生成: 表格,根据需求生成代码片段,API文档生成…...

sql调优:优化响应时间(优化sql) ; 优化吞吐量

Sql性能调优的目的 1.优化响应时间>>优化sql 经过调优后,执行查询、更新等操作的时候,数据库的反应速度更快,花费的时间更少。 2.优化吞吐量 即“并发”, 就是“同时处理请求”的能力。 优化sql 尽量将多条SQL语句压缩到一句>…...

debian/control中的包关系

软件包依赖就是软件包关系的一种,一般用 Depends 表示。 每个软件包都可以和其他软件包有各种不同的关系。除 Depends 外,还有 Recommends、Suggests、Pre-Depends、Breaks、Conflicts、Provides 和 Replaces,软件包管理工具(如 …...

python学习第三天

条件判断 条件判断使用if、elif和else关键字。它们用于根据条件执行不同的代码块。 # 条件判断 age 18 if age < 18:print("你还是个孩子&#xff01;") elif age 18:print("永远十八岁&#xff01;") else:print("你还年轻&#xff01;")…...

k8s架构及服务详解

目录 1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介绍5.1.1.Serice简介 5.1.1.1什么是Service5.1.1.2.Service的创建5.1.1.3.检测服务5.1.1.4.在运行的容器中远程执行命令 5.2.连接集群外部的服务 5.2.1.介绍服务endpoint5.2.2.手动配置服务的endpoint5.2.3.为外部服务…...

Unity中动态切换光照贴图LightProbe的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...

基于Matlab的多目标粒子群优化

在复杂系统的设计、决策与优化问题中&#xff0c;常常需要同时兼顾多个相互冲突的目标&#xff0c;多目标粒子群优化&#xff08;MOPSO&#xff09;算法应运而生&#xff0c;作为群体智能优化算法家族中的重要成员&#xff0c;它为解决此类棘手难题提供了高效且富有创新性的解决…...

Android Studio 新版本Gradle发布本地Maven仓库示例

发布代码到JitPack示例&#xff1a;https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2&#xff08;Gradle 8.10.2 AGP 8.8.0 JDK17&#xff09; 的本地 Maven 仓库发布示例&#xff0c;包含aar和jar的不同配置&#xff1a; 1.…...

Langchain解锁LLM大语言模型的结构化输出能力(多种实现方案)

在 LangChain解锁LLM大语言模型的结构化输出能力&#xff1a;调用 with_structured_output() 方法 这篇博客中&#xff0c;我们了解了格式化LLM输出内容的必要性以及如何通过调用langchain框架中提供的 with_structured_output() 方法对LLM输出进行格式化&#xff08;三种可选方…...

深入理解Spring @Async:异步编程的利器与实战指南

一、为什么需要异步编程&#xff1f; 在现代高并发系统中&#xff0c;同步阻塞式编程会带来两大核心问题&#xff1a; // 同步处理示例 public void processOrder(Order order) {// 1. 保存订单&#xff08;耗时50ms&#xff09;orderRepository.save(order); // 2. 发送短信…...

让Word插上AI的翅膀:如何把DeepSeek装进Word

在日常办公中&#xff0c;微软的Word无疑是我们最常用的文字处理工具。无论是撰写报告、编辑文档&#xff0c;还是整理笔记&#xff0c;Word都能胜任。然而&#xff0c;随着AI技术的飞速发展&#xff0c;尤其是DeepSeek的出现&#xff0c;我们的文字编辑方式正在发生革命性的变…...

清华DeepSeek深度探索与进阶指南

「清华北大-Deepseek使用手册」 链接&#xff1a;https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理&#xff09; 1&#xff0d;6版本链接&#xff1a;https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …...

迁移学习策略全景解析:从理论到产业落地的技术跃迁

&#xff08;2025年最新技术实践指南&#xff09; 一、迁移学习的范式革命与核心价值 在人工智能进入"大模型时代"的今天&#xff0c;迁移学习已成为突破数据瓶颈、降低训练成本的关键技术。本文基于2025年最新技术进展&#xff0c;系统梳理六大核心策略及其在产业实…...

WireGuard搭建网络,供整个公司使用

一、清理现有配置&#xff08;如已有失败尝试&#xff09; # 停止并删除现有 WireGuard 接口 sudo wg-quick down wg0 sudo rm -rf /etc/wireguard/wg0.conf# 验证接口已删除 (执行后应该看不到 wg0) ifconfig二、服务器端完整配置流程 1. 安装 WireGuard sudo apt update &…...

MyAgent:用AI开发AI,开启智能编程的产业革命

在人工智能技术爆发的2025年&#xff0c;‌MyAgent智能体平台‌凭借其独特的“AI开发AI”模式&#xff0c;正在重构全球软件开发行业的底层逻辑。这一创新范式不仅将自然语言处理、机器学习、RPA&#xff08;机器人流程自动化&#xff09;等技术深度融合&#xff0c;更通过‌“…...

Cherno C++ P60 为什么不用using namespace std

这篇文章我们讲一下之前写代码的时候的一个习惯&#xff0c;也就是不使用using namespace std。如果我们接触过最早的C教程&#xff0c;那么第一节课都会让我们写如下的代码&#xff1a; #include<iostream>using namespace std;int main() {cout << "Hello …...

el-select的下拉选择框插入el-checkbox

el-check注意这里要使用model-value绑定数据 <el-selectv-model"selectDevice"multiplecollapse-tags:multiple-limit"5"style"width: 200px"popper-class"select-popover-class" ><el-optionv-for"item in deviceList…...

M系列芯片 MacOS 在 Conda 环境中安装 TensorFlow 2 和 Keras 3 完整指南

目录 1. 引言2. 环境准备3. 安装 TensorFlow 和必要依赖4. 结语Reference 1. 引言 Keras 是搞深度学习很可爱的工具&#xff0c;其友好的接口让我总是将其作为搭建模型原型的首选。然而&#xff0c;当我希望在 M 系列芯片的MacBook Pro上使用 Keras时&#xff0c;使用Conda和P…...

GitHub教程

目录 1.是什么?2.安装3.创建库3.增删改查4.远程仓库5.分支6.标签7.使用流程8.总结 1.是什么? Git 是一个命令行工具&#xff0c;但也有许多图形用户界面可用。本地仓库&#xff0c;安装包下载到本地。Git 的一个流行 GUI 是 GitHub&#xff0c;它可以方便地管理存储库、推送…...

《JavaScript解题秘籍:力扣队列与栈的高效解题策略》

232.用栈实现队列 力扣题目链接(opens new window) 使用栈实现队列的下列操作&#xff1a; push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue new MyQueue(); queue…...

Supra软件更新:AGRV2K CPLD支持无源晶体做时钟输入

Supra软件更新&#xff1a;AGRV2K CPLD支持无源晶体做时钟输入 AGRV2K CPLD支持无源晶体做时钟输入&#xff0c;和AG32一样接入OSC_IN和OSC_OUT管脚。 VE管脚文件设为PIN_HSE&#xff0c;如&#xff1a; clk PIN_HSE ledout[0] PIN_31 ledout[1] PIN_32 ...... 在下载烧录文…...

简易的微信聊天网页版【项目测试报告】

文章目录 一、项目背景二、项目简介登录功能好友列表页面好友会话页面 三、测试工具和环境四、测试计划测试用例部分人工手动测试截图web自动化测试测试用例代码框架配置内容代码文件&#xff08;Utils.py&#xff09;登录页面代码文件&#xff08;WeChatLogin.py&#xff09;好…...

nio使用

NIO &#xff1a; new Input/Output,&#xff0c;在java1.4中引入的一套新的IO操作API&#xff0c;&#xff0c;&#xff0c;旨在替代传统的IO&#xff08;即BIO&#xff1a;Blocking IO&#xff09;&#xff0c;&#xff0c;&#xff0c;nio提供了更高效的 文件和网络IO的 操作…...

【蓝桥杯单片机】第十二届省赛

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数&#xff08;led.c&#xff09; void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…...

Jenkins与Flutter项目持续集成实战指南

一、环境准备 1. 基础环境要求 Jenkins Server&#xff1a;已安装JDK 11&#xff0c;建议使用Linux服务器&#xff08;Ubuntu/CentOS&#xff09;Flutter SDK&#xff1a;全局安装或通过工具动态管理构建代理节点&#xff1a; Android构建&#xff1a;需Android SDK、Gradle、…...

linux常见操作命令

查看目录和文件 ls&#xff1a;列出目录内容。 常用选项&#xff1a; -l&#xff1a;以长格式显示&#xff0c;显示文件的权限、所有者、大小、修改时间等详细信息。-a&#xff1a;显示所有文件和目录&#xff0c;包括隐藏文件&#xff08;以 . 开头的文件&#xff09;。-h&…...

6.人工智能与机器学习

一、人工智能基本原理 1. 人工智能&#xff08;AI&#xff09;定义与范畴 核心目标&#xff1a;模拟人类智能行为&#xff08;如推理、学习、决策&#xff09;分类&#xff1a; 弱人工智能&#xff08;Narrow AI&#xff09;&#xff1a;专精单一任务&#xff08;如AlphaGo、…...

GPU架构分类

一、NVIDIA的GPU架构 NVIDIA是全球领先的GPU生产商&#xff0c;其GPU架构在图形渲染、高性能计算和人工智能等领域具有广泛应用。NVIDIA的GPU架构经历了多次迭代&#xff0c;以下是一些重要的架构&#xff1a; 1. Tesla&#xff08;特斯拉&#xff09;架构&#xff08;2006年…...

23种设计模式之单例模式(Singleton Pattern)【设计模式】

文章目录 一、简介二、关键点三、实现单例模式的步骤四、C#示例4.1 简单的单例模式4.2 线程安全的单例模式&#xff08;双重检查锁定&#xff09;4.3 静态初始化单例模式 五、单例模式优缺点5.1 优点5.2 缺点 六、适用场景七、示例的现实应用 一、简介 单例模式&#xff08;Si…...

MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信

在现代电子设备的通信领域&#xff0c;串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色&#xff0c;发挥着不可或缺的作用。下面&#xff0c;我们将依据提供的资料&#xff0c;深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…...

Day 55 卡玛笔记

这是基于代码随想录的每日打卡 所有可达路径 题目描述 ​ 给定一个有 n 个节点的有向无环图&#xff0c;节点编号从 1 到 n。请编写一个函数&#xff0c;找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 ​ 第一行包含两个整数…...

python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源

文章目录 统一定义的金融历史数据表最重要的数据表数据表的定义交易日历表的定义&#xff1a;交易日历表: trade_calendar qteasy是一个功能全面且易用的量化交易策略框架&#xff0c; Github地址在这里。使用它&#xff0c;能轻松地获取历史数据&#xff0c;创建交易策略并完…...

AVM 环视拼接 鱼眼相机

https://zhuanlan.zhihu.com/p/651306620 AVM 环视拼接方法介绍 从内外参推导IPM变换方程及代码实现&#xff08;生成AVM环视拼接图&#xff09;_avm拼接-CSDN博客 经典文献阅读之--Extrinsic Self-calibration of the Surround-view System: A Weakly... (环视系统的外参自…...

计算机基础面试(数据库)

1. 事务的ACID特性&#xff1f;如何通过日志保证原子性和持久性&#xff1f; 专业解答&#xff1a; ACID&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Dura…...

Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks

Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks ​#paper/GFM/GNN-BASED#​ #paper/⭐⭐⭐#​ 注意&#xff1a;这篇文章是每个图一个GCN模型&#xff0c;而不是所有图一个GCN 模型 算是最早的涉及异配图的prompt了 贡献和动机&#xff1a; 非对…...

Spring Boot 与 MyBatis 版本兼容性

初接触Spring Boot&#xff0c;本次使用Spring Boot版本为3.4.3&#xff0c;mybatis的起步依赖版本为3.0.0&#xff0c;在启动时报错&#xff0c;报错代码如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…...

WPF 如何使文本显示控件支持显示内容滚动显示

WPF中如何使文本显示控件支持显示内容滚动显示 在WPF中&#xff0c;TextBlock 控件本身并不直接支持滚动功能&#xff0c;因为它的设计初衷是用于静态文本展示。但是&#xff0c;你可以通过一些技巧和自定义控件来实现 TextBlock 的滚动效果。以下是几种常见的方法&#xff1a;…...

1208. 尽可能使字符串相等

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 2.2 代码尝试 class Solution { public:int equalSubstring(string s, string t, int maxCost) {int curcost0;//统计当前开销int left0;…...

Linux系统管理操作

一、关闭防火墙 默认端口号是22&#xff0c;其他端口用不了&#xff0c;这时候就引出关闭防火墙 1.1、systemctl 1.1.1、基本语法 systemctl start | stop | restart | status 服务名 //启动、关闭、重启、查看状态 1.1.2、查看服务的方法 查看/usr/lib/systemd/syst…...

【STM32H743IIT6】将外部SDRAM作为内部SRAM使用的方法及需要解决的问题

前言 STM32H743的片上随机存取存储器&#xff08;RAM&#xff09;容量最大约为1KB。对于简单项目而言&#xff0c;这一容量尚可满足需求。但在处理更为复杂的应用程序时&#xff0c;尤其是在随机存取存储器方面&#xff0c;“空间不足”的问题就会不可避免地出现。此时&#x…...

AMD RDNA3 GPU架构解析

本文会通过把AMD的RDNA3架构为例比喻为**“施工公司”**工作模式&#xff0c;深入理解GPU如何高效处理顶点着色、像素计算等任务。 一、施工公司的组织架构 1. 施工公司&#xff08;WGP&#xff09;与施工队&#xff08;CU&#xff09; WGP&#xff08;Work Group Processor&…...

博客系统--测试报告

博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结&#xff1a; 自动化测试自动化脚本执行界面&#xff1a; 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试&#xff0…...

打造个人知识库(Page Assist版)- 私人专属AI-本地化部署deepseek

上篇介绍了实现浏览器交互Ai Web Ui - chrome浏览器插件-Page Assist&#xff0c;安装即可使用&#xff0c;实现最简单的本地化部署AI使用。 实现浏览器交互Ai Web Ui-本地化部署的deepseek Ollama Page Assist 本编介绍使用 Page Assist 构建个人知识库&#xff0c;利用个…...

7zip安装与使用

在 Linux 上安装 7zip&#xff08;7z&#xff09; 取决于你的操作系统发行版。以下是不同系统的安装方法&#xff1a; &#x1f4cc; 1. Ubuntu / Debian 直接使用 p7zip&#xff1a; sudo apt update sudo apt install -y p7zip-full p7zip-rarp7zip-full → 支持 .7z 压缩和…...

蓝桥杯第15届真题解析

由硬件框图可以知道我们要配置LED 和按键、lcd&#xff0c;解决lcd引脚冲突 LED 先配置LED的八个引脚为GPIO_OutPut&#xff0c;锁存器PD2也是&#xff0c;然后都设置为起始高电平&#xff0c;生成代码时还要去解决引脚冲突问题 按键 按键配置&#xff0c;由原理图按键所对引…...

springboot gradle 多项目创建

1.背景2.创建父项目3.配置gradlew4.创建子项目 1.背景 1.用IDE创建一个父项目&#xff08;school_project&#xff09;&#xff0c;两个子项目&#xff08;student_project&#xff0c;teacher_project)。子项目是两个springboot工程 2.使用gradle kotlin进行管理&#xff0c;…...

Protocol Buffers在MCU上的nanopb介绍及使用详解

在嵌入式系统和资源受限的环境中&#xff0c;传统的Protocol Buffers 可能显得过于庞大。因此&#xff0c;nanopb 应运而生&#xff0c;它是一个轻量级的 Protocol Buffers 生成器&#xff0c;专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb&#xff0c;以及通…...