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

GoCodingInMyWay嘶

一、什么是 Q 饱和运算1. 核心痛点普通运算的 “数值回绕”普通算术运算如 ADD/SUB溢出时数值会按补码规则 “回绕”导致结果完全错误示例int8_t 类型最大值 127 1 → 结果变成 -128而非预期的 127示例int8_t 类型最小值 -128 - 1 → 结果变成 127。2. Q 饱和运算的本质Q 饱和运算Saturating Arithmetic是 ARM 指令集中带 Q 前缀的特殊运算核心逻辑运算结果超出目标数据类型的数值范围上限 / 下限 时结果被 “钳位” 到该类型的极值同时置位 APSR 寄存器的 Q 标志位溢出标记。二、核心基础APSR 的 Q 标志位Q 饱和运算的 “溢出标记” 依赖 APSR应用程序状态寄存器的 Q 位这是使用饱和运算的核心要点1. Q 标志位关键属性特性 说明位位置 APSR 的 Bit 27唯一标识位触发条件 仅当 Q 前缀的饱和运算指令溢出时置 1普通运算溢出不触发粘性位特性 一旦置 1不会自动清零必须通过显式指令 / 代码清除否则会持续标记溢出2. 饱和运算的 “上下限”触发阈值Q 位触发的本质是运算结果超出目标数据类型的数值范围数据类型 符号性 下限 上限8 位整数 有符号 -128 1278 位整数 无符号 0 25516 位整数 有符号 -32768 3276732 位整数 有符号 -2147483648 2147483647三、核心用法饱和运算指令 / 函数1. 汇编层面直接操作深入底层ARM 提供了一系列带 Q 前缀的饱和运算指令入门常用指令如下指令 功能 适用场景QADD/QSUB 32 位有符号数饱和加 / 减 32 位整型数据运算UQADD8 无符号 8 位按字节饱和加法 多字节无符号数据如 RGBSQXTB 32 位→8 位有符号饱和转换 数据类型降位如 32→8 位UQXTB 32 位→8 位无符号饱和转换 无符号数据降位汇编示例32 位有符号饱和加法溢出场景; 目标计算int32_t上限值1验证饱和效果MOV R0, #2147483647 ; R0 int32_t上限值MOV R1, #1 ; 加1超出上限QADD R2, R0, R1 ; 饱和加法R2被钳位到2147483647Q位置1; 检测Q标志位MRS R3, APSR ; 读取APSR到R3TST R3, #(127) ; 检测Bit27Q位BNE overflow_handle ; Q1则跳转到溢出处理overflow_handle:MSR APSR_nzcvq, #0 ; 显式清除Q位关键避免后续误判2. C 语言层面快速入门推荐ARM GCC 编译器提供内置函数无需手写汇编底层自动生成 Q 前缀指令入门必用函数如下函数名 功能__qadd(a, b) 32 位有符号饱和加法__qsub(a, b) 32 位有符号饱和减法__sqxtb(a) 32 位→8 位有符号饱和转换__uqxtb(a) 32 位→8 位无符号饱和转换__SSAT(x, sat) 有符号数饱和至 sat 位__USAT(x, sat) 无符号数饱和至 sat 位C 语言完整示例含 Q 位检测 / 清除#include#include// 读取APSR寄存器检测Q标志位static inline uint32_t get_apsr(void) {uint32_t apsr;__asm__ volatile (mrs %0, apsr : r (apsr));return apsr;}// 判断Q位是否置1溢出static inline int is_q_flag_set(void) {return (get_apsr() (1U 27)) ! 0;}// 清除Q标志位static inline void clear_q_flag(void) {__asm__ volatile (msr apsr_nzcvq, #0);}int main(void) {// 示例限幅int32_t pid_output 50000; // 计算结果超出了16位变量范围// 将结果饱和限制在 16 位有符号数范围内 (-32768 ~ 32767)int16_t motor_output (int16_t)__SSAT(pid_output, 16);// 示例32位有符号饱和加法超出上限int32_t a 2147483647; // int32_t上限int32_t b 1;int32_t res1 __qadd(a, b); // 饱和加法结果钳位到2147483647printf(32位饱和加法结果%d预期2147483647\n, res1);printf(Q位状态%s\n, is_q_flag_set() ? 溢出置1 : 未溢出置0);clear_q_flag(); // 清除Q位return 0;}手动实现饱和运算兼容非 ARM GCC 场景若编译器不支持内置函数可手动判断范围实现简易饱和逻辑// 8位有符号数饱和加法int8_t sat_add_int8(int8_t a, int8_t b) {int16_t temp (int16_t)a (int16_t)b; // 用16位避免中间溢出if (temp 127) return 127; // 上限钳位if (temp -128) return -128; // 下限钳位return (int8_t)temp;}四、总结Q 饱和运算的核心是溢出时钳位到数据类型极值 置位 Q 标志位解决普通运算的 “数值回绕” 问题优先使用 ARM GCC 内置函数如__qadd深入调试可通过汇编操作 Q 位检测溢出需读取 APSR 的 Bit27关键注意点Q 位需手动清除、指令 / 函数匹配数据类型避免误判和结果错误。丫盼靥窍

相关文章:

GoCodingInMyWay嘶

一、什么是 Q 饱和运算? 1. 核心痛点:普通运算的 “数值回绕” 普通算术运算(如 ADD/SUB)溢出时,数值会按补码规则 “回绕”,导致结果完全错误: 示例:int8_t 类型最大值 127 1 → 结…...

YOLO-Master 与 YOLO 开始嫡

AI Agent 时代的沙箱需求 从 Copilot 到 Agent:执行能力的质变 在生成式 AI 的早期阶段,应用主要以“Copilot”形式存在,AI 仅作为辅助生成建议。然而,随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter(现为 Advan…...

2026.04.07随记

1、PyTorch1、dir(模块):查看任意模块的方法2、X.sum(0, keepdimTrue):keepdimTrue保留维度X torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) # (2,3) X.sum(0, keepdimTrue), X.sum(1, keepdimTrue)…...

从零构建大模型--实操--搭建python环境

区分pip conda pip pip Python 官方自带的安装工具 你只要装了 Python,就自动自带 pip,不需要额外装。 作用: 安装各种 Python 库:pip install 库名卸载、更新、查看已安装的库 它是纯 Python 官方工具,只管 Python 相…...

MBR扩展分区的结构分析

由于MBR仅仅为分区表保留了64字节的存储空间,而每个分区的参数占据16字节,所以MBR扇区中总计可以存储4个分区表表项的数据。对于实际情况,4个分区不能满足需求,当超过四个分区时,系统会自动将第四个分区变成扩展分区&a…...

跨境电商Shopify 的对接开发

在 2026 年的跨境电商环境中,Shopify 的对接开发已不再仅仅是“铺货”和“改模板”,而是向高度自动化(AI-Driven)、无头电商(Headless)以及全球本地化(Hyper-Localization)深度演进。…...

测试实录Android 16 平板首板测试实录:857条用例,101个FAIL,这些坑你踩过吗?

...

反向跟单为什么总以失败告终?这正是大多数人转向复制跟单的真相

你知道什么是反向跟单吗?简单说,就是找到一批持续亏损的交易者,用专业跟单软件跟踪他们的操作,然后与他们做完全相反的交易——他们做多,你就做空;他们做空,你就做多。只要他们亏损多少&#xf…...

高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案

高效备份QQ空间历史数据:GetQzonehistory的本地化解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心多年积累的QQ空间说说会因账号异常或平台政策调整而永…...

BetterGenshinImpact多开功能终极指南:同时管理多个原神账号的完整方案

BetterGenshinImpact多开功能终极指南:同时管理多个原神账号的完整方案 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙…...

2025届必备的AI学术网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作里,要是过度去依赖AIGC,那么便兴许会致使文本欠缺人性化的…...

3个技术维度重构教育评价:OCRAutoScore的智能阅卷革新

3个技术维度重构教育评价:OCRAutoScore的智能阅卷革新 【免费下载链接】OCRAutoScore OCR自动化阅卷项目 项目地址: https://gitcode.com/gh_mirrors/oc/OCRAutoScore 教育评价领域正面临数字化转型的关键期,传统阅卷模式在大规模考试场景下逐渐暴…...

看懂 Dependency Analyzer:从 SQL 依赖到性能复杂度,系统拆解 ABAP CDS 视图的隐藏结构

在做 ABAP CDS 建模时,很多开发者都会遇到一种很典型的困惑:表面上看,当前这个 CDS 视图只是从几个字段里做了投影,代码也不算长;可一到激活、预览数据、做 OData 暴露,甚至进入 RAP 场景以后,系统表现却突然变得复杂,查询变慢,层级难以理解,出了问题也很难定位。造成…...

2026届最火的五大降重复率神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 旨在降低文本机器生成特征的降AI工具,是为了规避自动化检测模型的识别&#xff0…...

第8章 流程控制-8.3 循环结构

循环结构就是让程序不断地重复执行同一段代码。Python中的循环结构有3种,分别是while循环、for循环和循环嵌套。8.3.1 while循环while循环可以通过while语句和while…else语句实现。1.while语句while语句首先会判断其条件表达式是否成立,如果条件表达式成…...

BiliTools:重构B站资源管理的跨平台工具箱

BiliTools:重构B站资源管理的跨平台工具箱 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 价值定位&…...

6步构建企业级远程桌面系统:基于UltraVNC的完整部署指南

6步构建企业级远程桌面系统:基于UltraVNC的完整部署指南 【免费下载链接】UltraVNC 👁️ UltraVNC Server, UltraVNC Viewer, UltraVNC Repeater and UltraVNC SC | Official repository: https://github.com/ultravnc/UltraVNC 项目地址: https://git…...

5分钟解锁你的首个Gemini AI智能体:全栈开发终极指南

5分钟解锁你的首个Gemini AI智能体:全栈开发终极指南 【免费下载链接】gemini-fullstack-langgraph-quickstart Get started with building Fullstack Agents using Gemini 2.5 and LangGraph 项目地址: https://gitcode.com/gh_mirrors/ge/gemini-fullstack-lang…...

Element Plus访问提速实战:突破跨境网络限制的三大解决方案

Element Plus访问提速实战:突破跨境网络限制的三大解决方案 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为Vue 3生态中最受欢迎…...

GTE-Base-ZH赋能Java应用:SpringBoot集成与语义搜索实战

GTE-Base-ZH赋能Java应用:SpringBoot集成与语义搜索实战 最近在做一个电商后台的搜索功能升级,用户反馈说,用关键词搜商品经常找不到想要的东西。比如用户搜“适合夏天穿的轻薄外套”,传统的搜索可能只匹配到“外套”&#xff0c…...

收藏!Java后端裁员潮下,程序员(小白必看)靠大模型破局翻身

凌晨一点半,手机屏幕突然亮起,是做Java后端开发的发小发来的消息,字里行间全是慌乱与不甘:“刚收到公司裁员通知,名单已经定死了,我真的懵了——部门里干了五年的资深老程都没保住,我这三年经验…...

如何用DoubleQoLMod在30分钟内让你的工业帝国效率翻倍?

如何用DoubleQoLMod在30分钟内让你的工业帝国效率翻倍? 【免费下载链接】DoubleQoLMod-zh 项目地址: https://gitcode.com/gh_mirrors/do/DoubleQoLMod-zh 想象一下,你的工厂正在全速运转,但资源采集却像蜗牛一样缓慢;你的…...

多屏时代的窗口效率引擎:Rectangle智能布局解决方案

多屏时代的窗口效率引擎:Rectangle智能布局解决方案 【免费下载链接】Rectangle Move and resize windows on macOS with keyboard shortcuts and snap areas 项目地址: https://gitcode.com/gh_mirrors/re/Rectangle 场景痛点:当混乱成为工作流的…...

如何高效获取阿里云盘Refresh Token:开源工具实战指南

如何高效获取阿里云盘Refresh Token:开源工具实战指南 【免费下载链接】aliyundriver-refresh-token QR Code扫码获取阿里云盘refresh token For Web 项目地址: https://gitcode.com/gh_mirrors/al/aliyundriver-refresh-token 在云存储自动化操作中&#xf…...

EF Core 10向量搜索不是“加个NuGet包”那么简单:一位资深架构师用12小时重构遗留系统的真实复盘

第一章:EF Core 10向量搜索扩展的架构定位与演进本质EF Core 10 向量搜索扩展并非孤立的功能补丁,而是微软在数据访问层深度整合 AI 原生能力的战略锚点。它标志着 ORM 从“关系映射”范式向“语义感知查询”范式的结构性跃迁——将向量计算能力下沉至查…...

013.定时器之系统Tick实现|千篇笔记实现嵌入式全栈/裸机篇

⚠️裸机仓库:https://gitee.com/simonchina_carel_li/mini2440-bare-metal.git ⚠️Tag: 13-sys-tick 1. 为什么要系统Tick? 在前面的SDRAM测试程序中(), 我们有这样的部分, // -- TODO: 如果你有定时器…...

Java虚拟线程落地避坑指南(生产环境血泪总结:从Spring Boot 3.3集成到Project Loom异常传播链断裂修复)

第一章:Java 25虚拟线程核心原理与高并发演进全景Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM并发模型进入轻量级线程时代。虚拟线程由JVM在用户态调度,底层复用有限的平台线程&#xff…...

012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇

⚠️裸机仓库:https://gitee.com/simonchina_carel_li/mini2440-bare-metal.git ⚠️Tag: 11-sdram-apply 1. 这次要做什么? 我们已经完成了sdram的初始化,现在sdram已经可以使用了 我们之前的固件,栈空间是跑在SOC内置的4KB的S…...

粉紫系超人气月兔铃仙救

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

零代码实现企业级打印模板设计:vue-plugin-hiprint全攻略

零代码实现企业级打印模板设计:vue-plugin-hiprint全攻略 【免费下载链接】vue-plugin-hiprint hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 项目地址: https://gitcode.com/gh_mirrors/vu/vue-plugin-hiprint …...