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

STM32学习【4】ARM汇编(够用)

目录

  • ARM汇编语言基础
    • 写在前面
  • 1. ARM汇编的分类
  • 2. 关于指令集
      • 指令集切换
      • Thumb2指令集
      • 统一汇编语言(UAL)
      • 常用汇编指令
  • 3. 汇编格式
      • 立即数与伪指令
  • 4. 操作内存的汇编指令
    • LDR:从内存加载数据到CPU寄存器
    • STR:将数据从寄存器存储到内存
    • LDM:从存储器中加载多个数据到寄存器组
      • 满增、满减, 空增,空减
  • 5. 数据处理汇编指令
    • 加法指令ADD:
    • 减法指令SUB:
    • 位操作:
    • 比较:
  • 6.跳转指令

ARM汇编语言基础

对于学习汇编,我有话说,哈,我们实际工作中用到的并不多,我们学会常用的,遇见不会的直接大模型问就可以了,通过汇编,我们可以体会到数据底层的流动规律,写代码自然就会通透,更近一步,我们要彻底学会RTOS,底层的知识也是必不可少的。

写在前面

在CPU的世界里,一切外设都被抽象为寄存器或带有地址的内存数据。CPU只关心其内部的16个寄存器以及内存数据,外设寄存器虽然物理上与内存不同,但在CPU眼中并无区别,唯一的差异在于地址空间。


1. ARM汇编的分类

ARM汇编语言大致可以分为以下几类:

  1. 内存读写:用于访问内存数据。
  2. 运算类:执行加法、减法、逻辑运算等。
  3. 跳转/分支:实现程序流程控制。
  4. 比较:类似于高级语言中的if语句。

这些指令组合成指令集,构成了ARM汇编语言的核心。


2. 关于指令集

ARM公司发布了两类主要的指令集:

  1. ARM指令集:32位指令,每条指令占用32位。优点是执行效率高,但占用空间较大。
  2. Thumb指令集:16位指令,每条指令占用16位。优点是节省空间,但执行效率稍低。

在实际应用中:

  • 如果需要节省空间,优先使用Thumb指令集。
  • 如果需要高效执行,优先使用ARM指令集。

一个CPU既可以运行Thumb指令,也可以运行ARM指令。如何区分当前指令是Thumb还是ARM指令呢?程序状态寄存器(CPSR)中有一位名为“T”,当T=1时,表示当前运行的是Thumb指令。

指令集切换

指令集的切换通过设置PC寄存器的最低位(BIT0)来实现:

  • 调用函数A(Thumb指令)时,将PC寄存器的最低位设置为1,即PC = 函数A地址 + (1<<0)
  • 调用函数B(ARM指令)时,将PC寄存器的最低位设置为0,即PC = 函数B地址

这种切换方式是通过跳转指令(如BBL)实现的,目标地址的最低位决定了目标函数的指令集模式。在实际开发中,通常使用链接器或编译器工具来管理指令集切换,而不是手动设置PC寄存器的最低位。

Thumb2指令集

为了简化指令集切换,ARM公司引入了Thumb2指令集。Thumb2指令集支持16位和32位指令混合使用,允许在同一个指令集中无缝切换指令长度,而无需显式切换指令集。编译器通常会自动选择最优的指令长度,以平衡代码大小和执行效率。

统一汇编语言(UAL)

为了简化开发,ARM公司推出了统一汇编语言(UAL)。开发者无需区分ARM、Thumb或Thumb2指令集,只需在程序中使用CODE32CODE16THUMB指令来指定代码段的指令集类型。

常用汇编指令

在日常工作中,常用的ARM汇编指令包括:

  • 数据传输:MOVLDRSTRLDMSTM
  • 逻辑运算:ANDOR
  • 算术运算:ADDSUB
  • 跳转:BBL
  • 数据定义:DCD
  • 地址操作:ADRLDR
  • 比较:CMP

3. 汇编格式

以“数据处理”指令为例,UAL汇编格式为:

Operation{cond}{S} Rd, Rn, Operand2
  • Operation:表示各类汇编指令,如ADDMOV
  • cond:条件码,指定指令执行的条件。例如,EQ(相等)、NE(不相等)、CS(无符号大于等于)、CC(无符号小于)等。条件码可以应用于大多数指令,但某些指令(如LDMSTM)不支持条件码。
  • S:是否修改程序状态寄存器(CPSR)。如果指令带有S后缀,执行结果会影响CPSR中的条件标志。
  • Rd:目标寄存器,用于存储运算结果。
  • Rn:第一个源操作数。
  • Operand2:第二个操作数。

立即数与伪指令

在16位指令中,由于指令长度限制,立即数(直接给出的数值)的范围有限。例如,MOV R0, #VAL指令中,VAL不可能占用全部16位,毕竟MOV ,R0也需要一些位来表示其含义。为此,ARM提供了伪指令,让编译器自动处理复杂的立即数转换。

例如:

MOV R0, #0x12345678  ; 伪指令,编译器会自动将其拆分为多条指令实现

在ARM指令集中,32位指令可以支持更大的立即数范围,但仍有限制。伪指令由编译器自动转换为多条指令,以实现复杂的立即数加载。


4. 操作内存的汇编指令

LDR:从内存加载数据到CPU寄存器

LDR指令用于从内存中加载数据到CPU寄存器。如果不指定数据类型,默认为32位数据。LDR支持多种寻址方式,包括偏移寻址、基址寻址和后索引寻址等,但是实际我们工作中用的的都是相对比较简单的。

例如:

LDR R0, [R1]        ; 将R1指向的内存地址中的数据加载到R0
LDR R0, [R1, #4]    ; 将R1+4地址中的数据加载到R0
LDRB R0, [R1]       ; 加载8位数据到R0
LDRH R0, [R1]       ; 加载16位数据到R0

STR:将数据从寄存器存储到内存

STR指令用于将数据从寄存器存储到内存。STR也支持多种寻址方式。

例如:

MOV R0, #0x20000
MOV R1, #0x10
MOV R2, #0x12
STR R2, [R0]        ; 将R2的值存储到R0指向的地址
STR R2, [R0, #4]    ; 将R2的值存储到R0+4地址
STR R2, [R0, #8]!   ; 将R2的值存储到R0+8地址,并将R0更新为R0+8
STR R2, [R0, R1]    ; 将R2的值存储到R0+R1地址
STR R2, [R0, R1, LSL #4]  ; 将R2的值存储到R0+(R1<<4)地址
STR R2, [R0], #0x20 ; 将R2的值存储到R0地址,并将R0更新为R0+0x20
STRB R2, [R0]       ; 存储8位数据到R0指向的地址

LDM:从存储器中加载多个数据到寄存器组

LDM指令用于批量加载多个寄存器,格式为:

LDM{addr_mode}{cond} Rn{!}, reglist{^}
  • addr_mode
    • IA:Increment After,每次传输后增加基地址(默认,可省略)。
    • IB:Increment Before,每次传输前增加基地址(仅ARM指令可用)。
    • DA:Decrement After,每次传输后减少基地址(仅ARM指令可用)。
    • DB:Decrement Before,每次传输前减少基地址。
  • !:表示修改后的基地址会写回Rn寄存器。如果没有!,则Rn保持原值。
  • ^:表示会影响程序状态寄存器(CPSR),通常在异常处理中使用。
    要注意:低位置寄存机对应低地址,比如R0寄存器属于最低的位置寄存器,R15是最高的寄存器。
    有个问题,为什么需要这么多的addr_mode?
    比如我们往栈中写数据的时候,有两种情况
    1.SP寄存器所指的地址有数据(满栈),这个时候我们需要先调整地址再写数据。
    2.SP寄存器所指的地址没有数据(空栈),这种情况是先写数据再调整地址。
    很明显我们需要不同的行为的需求,自然也就要有了多种addr_mode.

满增、满减, 空增,空减

根据栈指针指向,可分为满(Full)/空(Empty):
满SP指向最后一个入栈的数据,需要先修改SP再入栈
空SP指向下一个空位置,先入栈再修改SP

根据压栈时SP的增长方向,可分为增/减:
增(Ascending):SP变大
减(Descending):SP变小

组合后,就有4种方式: 满增、满减, 空增,空减。

常用的“满减”: 入栈时用STMDB,也可以用STMFD,作用一样;注意是先减地址后存内容
出栈时用LDMIA,也可以用LDMFD,作用一样。先读内容后加地址
在这里插入图片描述

下面是几个例子,加黑的内容是汇编指令,方框内为内存结果,

在这里插入图片描述

5. 数据处理汇编指令

数据处理汇编指令有很多,我们并不需要全部掌握,只需要注意关键的几条即可。

加法指令ADD:

  ADD  R1, R2, R3         ; R1 = R2 + R3ADD  R1, R2, #0x12   ; R1 = R2 + 0x12

减法指令SUB:

  SUB  R1, R2, R3         ; R1 = R2 - R3SUB  R1, R2, #0x12   ; R1 = R2 - 0x12

位操作:

 ;  VisUAL里不支持(1<<4)这样的写法,写成:0x10AND R1, R2, #(1<<4)   ;  位与,R1 = R2 & (1<<4)AND  R1, R2, R3           ; 位与,R1 = R2 & R3BIC  R1, R2, #(1<<4)    ; 清除某位,R1 = R2 & ~(1<<4)BIC  R1, R2, R3             ; 清除某位,R1 = R2 & ~R3ORR   R1, R2, R3

比较:

关于比较要说明一下,CMP的对比结果会储存在状态寄存器里面,下面的语句会根据状态寄存器里面的值决定是否执行,比如MOVEQ,相等时才执行
CMP R0, R1 ; 比较R0-R1的结果
CMP R0, #0x12 ; 比较R0-0x12的结果
TST R0, R1 ; 测试 R0 & R1的结果
TST R0, #(1<<4) ; 测试 R0 & (1<<4)的结果

6.跳转指令

C程序中,函数A调用函数B的实质是什么?
void A()
{
int a = 10;
B(a);
printf(“ok”);
}
实质是:跳转去执行函数B的代码,函数B执行完后,还要回到函数A继续执行后面的代码。
对应的汇编指令就是跳转指令,要主要,凡事有正反,跳走了也要知道怎么跳回来,所以要保存返回地址

在这里插入图片描述

相关文章:

STM32学习【4】ARM汇编(够用)

目录 ARM汇编语言基础写在前面 1. ARM汇编的分类2. 关于指令集指令集切换Thumb2指令集统一汇编语言&#xff08;UAL&#xff09;常用汇编指令 3. 汇编格式立即数与伪指令 4. 操作内存的汇编指令LDR&#xff1a;从内存加载数据到CPU寄存器STR&#xff1a;将数据从寄存器存储到内…...

傅里叶分析

傅里叶分析之掐死教程&#xff08;完整版&#xff09;更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具&#xff0c;更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是&#xff0c;傅里叶分析的公式看起来太复…...

Jmeter插件下载及安装

1、在Jmeter官网&#xff08;Install :: JMeter-Plugins.org&#xff09;下载所需插件 2、将下载的插件复制到jmeter文件下的lib/ext文件里&#xff08;PS&#xff1a;D:\Jmeter\apache-jmeter-5.6.2\lib\ext&#xff09; 3、打开Jmeter&#xff0c;选择 选项----Plugins Manag…...

Docker迁移/var/lib/docker之后镜像容器丢失问题

迁移/var/lib/docker时&#xff0c;如果目标目录少写一个/&#xff0c;/etc/docker/daemon.json中的data-root后面需要多加一级目录docker。 若迁移命令如下 rsync -avz /var/lib/docker /home/docker/ 在/etc/docker/daemon.json中添加如下内容 "data-root": &q…...

【C++】深入理解List:双向链表的应用

凭时间赢来的东西&#xff0c;时间肯定会为之作证。 前言 这是我自己学习C的第七篇博客总结。后期我会继续把C学习笔记开源至博客上。 上一期笔记是关于C的vector类知识&#xff0c;没看的同学可以过去看看&#xff1a;【C】探索Vector&#xff1a;灵活的数据存储解决方案-CS…...

如何使用 Ollama 的 API 来生成文本

如何使用 Ollama 的 API 来生成文本 简介 生成文本 生成文本的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API&#xff0c;允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能&#xff0c;包括模型管理、运行和监控。本…...

Redis除了做缓存还有哪些应用场景

我用「现实场景代码简例」帮你彻底掌握Redis的18般武艺。先记住这句话&#xff1a;Redis是数据结构的瑞士军刀。以下分7大核心应用方向讲解&#xff1a; 一、高频面试答案速记版 1. 分布式锁 → 超市储物柜机制 2. 计数器 → 直播间点赞统计 3. 排行榜 → 游戏战力榜 4. 消息队…...

软件工程复试专业课-测试

测试 1 软件质量2 黑盒测试2.1 概念2.2 等价划分类 2.3 边值分析2.4 错误推测2.5 因果图 3 白盒测试3.1概念3.2 覆盖标准3.2.1 语句覆盖3.2.2 判断覆盖3.2.3 条件覆盖3.2.4 判定/条件覆盖3.2.5 条件组合覆盖3.2.6 路径覆盖 4 软件测试的四个阶段5 测试工具 1 软件质量 定义&…...

html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Maven的传递性、排除依赖、生命周期、插件

一、Maven的传递性 蓝色背景中的两个jar包是projectA的直接依赖&#xff0c;其余的Jar包是projectA的间接依赖。 projectA可以使用直接依赖&#xff0c;也可以使用间接依赖。 maven-projectB项目引入了maven-projectC(整个项目打成了jar包&#xff09;和junit两个jar包。 ma…...

Java 调试模式下 Redisson 看门狗失效

一、场景分析 前几天在做分布式锁测试&#xff1a; 在调试模式下&#xff0c;lock.lock() 之后打上断点&#xff0c;想测试一下在当前线程放弃锁之前&#xff0c;别的线程能否获取得到锁。 发现调试模式下&#xff0c;看门狗机制失效了&#xff0c;Redis 上 30 秒后&#xff0…...

PHP下载安装以及基本配置

目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP&#xff08;“PHP: Hypertext Preprocessor”&#…...

Vue nextTick原理回顾

nextTick就是将异步函数放在下一次实践循环的微任务队列中执行 实现原理比较简单&#xff0c;极简版本&#xff1a; function myNextTick(cb){let p;pPromise.resolve().then(cb)return cb?p:Promise.resolve() }复杂版本&#xff0c;考虑异步函数入队、执行锁、兼容处理 l…...

【Javascript】js精度丢失

当JS处理大整数或者浮点数的时候会出现精度丢失的情况。 Javascript的数字都使用双精度浮点数表示&#xff0c;遵循IEEE754标准 比如我遇到的问题&#xff0c;对一个小数的四舍五入&#xff0c;保留2位小数&#xff1a; 235.985≈235.98 235.9851≈235.99 原理请大家参考百度&…...

Go在1.22版本修复for循环陷阱

记录 前段时间升级Go版本碰到一个大坑&#xff0c;先记录。 先上代码案例&#xff1a; func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下&#xff08;不包括1.22&#xff09;版本&#xff1a; 输出的…...

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...

PhotoDoodle: Learning Artistic Image Editing from Few-Shot Examples 论文解读

目录 一、概述 二、PhotoDoodle 1、OmniEditor的预训练 2、DiT重点 3、无噪声条件范式与CFM 4、EditLoRA 4.1关于LoRA 4.2关于EditLoRA 三、相关工作 一、概述 风格化图像编辑的论文&#xff01; 介绍了PhotoDoodle&#xff0c;一个基于扩散模型的图像编辑框架&#x…...

的pythonAPI文档含义

Open3D的pythonAPI文档含义 Open3D的pythonAPI文档含义1、相关文档1.[Open3D的python文档]2 [Open3D的cpp文档] 2、结论 >> 看了好久的文档&#xff0c;奶奶的什么个意思。1. class Type是一个枚举类&#xff0c;PointCloud等是枚举成员&#xff0c;每个成员在python有 n…...

跟着AI学vue第十三章

第十三章&#xff1a;技术传承与行业影响力塑造 到了这个阶段&#xff0c;你已经在Vue技术领域积累了深厚的经验&#xff0c;拥有了较强的技术实力。此时&#xff0c;你的重点将是把自己的知识和经验传递给更多人&#xff0c;在行业内树立起影响力&#xff0c;推动整个Vue技术…...

实现实时数据仓库开源项目

根据你的需求&#xff0c;以下是一些可以实现类似 ClickHouse 的实时数仓功能的项目&#xff0c;这些项目提供了高性能的数据处理和分析能力&#xff0c;适合实时数据仓库的场景&#xff1a; 1. Apache Doris Apache Doris 是一个开源的实时数据仓库&#xff0c;支持高吞吐量…...

实现了一个自适应的NOC路由机制,包括构建流量图、设计拥塞预测模型、优化路由策略和评估性能

以下是针对设计和实现自适应的网络 - on - chip (NOC) 路由机制的详细步骤及代码示例&#xff1a; 1. 分析NOC路由路径拥塞的原因及传统方法的不足之处 拥塞原因&#xff1a; 动态流量变化&#xff1a;芯片内不同模块的工作负载随时间变化&#xff0c;导致局部流量突然增加。…...

光速解决phpstudy无法启动MySQL服务

问题描述 在初步安装使用phpstudy时&#xff0c;会出现mysql服务启动失败的情况&#xff0c;具体表现为点击一键启动后&#xff0c;mysql启动又立即停止 原因及解决方法&#xff1a; phpstudy数据库无法启动有以下几个原因&#xff0c;可以看看自己是第几种&#xff1a; 服务名…...

2022 年 9 月青少年软编等考 C 语言五级真题解析

目录 T1. 城堡问题思路分析T2. 斗地主大师思路分析T3. 玩具摆放思路分析T4. 哥斯拉大战金刚思路分析T1. 城堡问题 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ######---#####---#---#####---# 2 # # | # # # # ##…...

【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器

安装Ubuntu 服务器 通过ubuntu官网下载ubuntu 24服务器版本 刻录光盘&#xff08;也可以使用U盘&#xff09; 用光盘启动PC机器&#xff08;必须是带显卡的PC机&#xff0c;包括集成Intel显卡的也行&#xff0c;纯CPU计算的服务器基本上不能使用&#xff09; 最小化安装Ubuntu…...

阿里云ack的创建与实战应用案例

阿里云ack的创建与应用案例 创建前开通ack相关服务&#xff1a;开始创建简单的魔方游戏&#xff0c;熟悉sv与clb自动注册创建部署一个nginx 服务示例&#xff1a;走不同域名访问不同svc资源&#xff1a;为什么需要 Ingress &#xff1f;创建第一个域名的 Deployment和Service。…...

制造业数字化实践案例丨国内某大型物联网企业数字化项目管理系统,赋能品牌和生态战略落地

30秒快读 该大型物联网企业在规模化和业务扩展过程中&#xff0c;面临项目管理模式单一、供应链与客户端协同不足、项目过程数据透明度低、软硬件项目管理分离等痛点&#xff0c;数字化项目管理系统建设旨在构建以项目制为核心的流程型组织&#xff0c;建立内外部高效协同的项…...

当AI重构认知:技术狂潮下的教育沉思录

备注&#xff1a;文章未Deepseek R1模型辅助生成&#xff0c;如有不妥请谅解。 以下使原文&#xff1a; 我有三个娃&#xff0c;各间隔4到5岁&#xff0c;经历过搜索引擎&#xff0c;短视频&#xff0c;短剧&#xff0c;本身曾经也是教育专业出生&#xff0c;任何事务都有两面性…...

Game Maker 0.11更新:构建社交竞速游戏并增强玩家互动

在这三部分系列中&#xff0c;我们将介绍如何实现Game Maker 0.11中一些最激动人心的新功能。 欢迎来到我们系列文章的第一篇&#xff0c;重点介绍了The Sandbox Game Maker 0.11更新中的新特性。 The Sandbox Game Maker 0.11是一个多功能工具&#xff0c;帮助创作者通过游戏…...

ubuntu配置jmeter

1.前提准备 系统 ubuntu server 22.04 前提条件&#xff1a;服务器更新apt与安装lrzsz&#xff1a;更新apt&#xff1a; sudo apt update安装lrzsz: 命令行下的上传下载文件工具 sudo apt install lrzszsudo apt install zip2.安装jemeter 2.1.下载jdk17 输入命令&#xf…...

计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

字段对比清洗

import pandas as pd import psycopg2 from psycopg2 import sql# 数据库连接配置 DB_CONFIG {"host": "","user": "","password": "","dbname": "","port": , }def get_excel_fi…...

过滤器 二、过滤器详解

过滤器生命周期&#xff1a; init(FilterConfig)&#xff1a;在服务器启动时会创建Filter实例&#xff0c;并且每个类型的Filter只创建一个实例&#xff0c;从此不再创建&#xff01;在创建完Filter实例后&#xff0c;会马上调用init()方法完成初始化工作&#xff0c;这个方法…...

七、Three.jsPBR材质与纹理贴图

1、PBR材质金属度和粗糙度 1、金属度metalness 金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。 threejs的PBR材质&#xff0c;.metalness默认是0.5,0.0到1.0之间的值可用于生锈的金属外观 new THREE.MeshStandardMaterial({met…...

分布式主键生成服务

目录 一、使用线程安全的类——AtomicInteger或者AtomicLong 二、主键生成最简单写法(不推荐) 三、主键生成方法一&#xff1a;Long型id生成——雪花算法 四、主键生成方法二&#xff1a;流水号 (一)流水号概述 (二)添加配置 1.pom.xml 2.application.properties 3.创…...

【Day50 LeetCode】图论问题 Ⅷ

一、图论问题 Ⅷ 1、dijkstra算法 堆优化 采用堆来优化&#xff0c;适合节点多的稀疏图。代码如下&#xff1a; # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…...

人大金仓KCA | 用户与角色

人大金仓KCA | 用户与角色 一、知识预备1. 用户和角色 二、具体实施1. 用户管理-命令行1.1 创建和修改用户1.2 修改用户密码1.3 修改用户的并发连接数1.4 修改用户的密码有效期 2.用户管理-EasyKStudio2.1 创建和修改用户2.2 修改用户密码2.3 修改用户的并发连接数2.4 修改用户…...

嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)

目录 步骤 1&#xff1a;准备工作 步骤 2&#xff1a;创建 Keil 项目&#xff0c;并配置工程 步骤 3&#xff1a;在MDK工程上添加 CMSIS-DSP 库 步骤 5&#xff1a;编写代码 步骤 6&#xff1a;配置时钟和优化 步骤 7&#xff1a;调试与验证 步骤 8&#xff1a;优化和调…...

【AI学习从零至壹】Numpy基础知识

PyTorch基础知识 Numpy基础NumPy 基本数据类型Numpy数组 NumPy 基础数组创建Numpy特殊数组创建Numpy数组的访问NumPy数组的遍历Numpy数组的常用属性比较常用的属性有&#xff1a; Numpy数组的基本操作Numpy数组的数学操作加减乘除 Numpy线性代数Numpy广播机制 Numpy基础 NumPy…...

Day11,Hot100(贪心算法)

贪心 &#xff08;1&#xff09;121. 买卖股票的最佳时机 第 i 天卖出的最大利润&#xff0c;即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…...

Transformer 代码剖析1 - 数据处理 (pytorch实现)

引言 Transformer 架构自《Attention Is All You Need》论文发表以来&#xff0c;在自然语言处理领域引起了巨大的变革。它摒弃了传统的循环结构&#xff0c;完全基于注意力机制&#xff0c;显著提高了处理序列数据的效率和性能。本文将通过对一个具体的项目代码结构进行详细分…...

Python--模块(下)

3. 内置模块 3.1 os模块 常用功能&#xff1a; os.mkdir("new_dir") # 创建目录 os.listdir(".") # 列出当前目录文件 os.path.join("dir", "file.txt") # 路径拼接 os.path.abspath(__file…...

Android Studio超级详细讲解下载、安装配置教程(建议收藏)

博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战&#xff0c;深受全网粉丝喜爱与支持✌有…...

PS画笔工具

画笔工具&#xff1a; 画笔工具&#xff08;B&#xff09;&#xff08;原理&#xff1a;单位笔刷的连续填充&#xff0c;文件格式.abr&#xff09;&#xff1a;圆形矢量笔刷、动态矢量画笔&#xff08;旧版画笔里有 与压感笔有关&#xff09;、图案填充画笔 shift画笔&#xff…...

[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)

文章目录 1. JVM内存模型2. 常量池中有什么类型&#xff1f;3. 常量池中真正存储的内容是什么4. 判断一个字符串(引用)是否在常量池中5. BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗&#xff1f;6. 获取堆内存使用情况、非堆内存使用情况 1. JVM内…...

1.68M 免安装多格式图片批量转 webp 无广告软件推荐

软件介绍 今天要给大家分享一款超实用的图片处理工具&#xff0c;它能实现多格式图片向 webp 格式的转换&#xff0c;无论是 jpg、png、tif、gif 还是 webp 格式自身的图片&#xff0c;都能批量且借助多线程技术进行转换。 直接打开就能用&#xff0c;体积小巧&#xff0c;仅 …...

LeetCode 1472.设计浏览器历史记录:一个数组完成模拟,单次操作均O(1)

【LetMeFly】1472.设计浏览器历史记录&#xff1a;一个数组完成模拟&#xff0c;单次操作均O(1) 力扣题目链接&#xff1a;https://leetcode.cn/problems/design-browser-history/ 你有一个只支持单个标签页的 浏览器 &#xff0c;最开始你浏览的网页是 homepage &#xff0c…...

[笔记.AI]AI知识科普提纲

仅供参考 1.AI基础认知 1.1什么是什么AI 1.2核心概念 1.2.1机器学习、深度学习、神经网络 1.2.2模型&#xff1a;模型、大模型、模型参数 1.2.3多模态 1.2.4生成式AI & 判别式AI 1.3发展与现状 2.大模型 2.1主流大模型 2.1.1分类 2.1.2各…...

学习知识的心理和方法杂记-01

前言&#xff1a; 1 学习新知识要讲究方法&#xff0c;“知识未学 方法先行”&#xff0c;写本系列文章是为了给自己加深大脑“条件反射”的&#xff0c;因为我自己学习新知识的过程中老会被不科学的“杂念”干扰&#xff0c;导致学习效率低下。 2 关于天才和普通人&#xff…...

网页制作10-html,css,javascript初认识の适用XHTML

一、简介&#xff1a; Xhtml是extensible hypertext markup language的缩写。它是由国际W3C组织制定并公布发行的。是一个过渡技术&#xff0c;结合了部分xml的强大功能及大多数html的简单特性。 Advantage. Xhtml提倡更简洁规范的代码。 Xhtml.文档在旧的基于的浏览器中&…...

C++ 中 cin 和 cout 教程

一、概述 在 C 里&#xff0c;cin 和 cout 是标准库 <iostream> 中用于输入输出操作的重要对象&#xff0c;它们基于流的概念&#xff0c;为开发者提供了方便且类型安全的输入输出方式。cin 是标准输入流对象&#xff0c;主要用于从标准输入设备&#xff08;一般是键盘&…...