- 2024-12-20
-
回复了主题帖:
预留了 M.2 接口和 PoE 的 Pi 500 的主板
M.2部分其实好办,直接喊个M.2 MKEY的座子焊上就行,问题是POE,这个焊盘不像是常见方案
- 2024-12-15
-
回复了主题帖:
【FRDM-MCXN947测评】基于FreeRTOS下的lwIP版MQtt测试
请问下MQTT这部分是这个例程里写好的吗?我的板子无法获得MQTT订阅
-
发表了主题帖:
【B-G431B-ESC1】后续:用G474板卡和IHM06测试电机
本帖最后由 电子烂人 于 2024-12-15 16:13 编辑
之前在做B431的评测时,由于得捷没有找到想要的无刷电机,故直接淘了个2804的电机,型号GM2804
买到的二手电机完全不转,一般都是动一下,然后马上憋停刹车,完全无法使用
正巧这次回学校找出来之前的STM32G474RE开发板和IHM06两块板卡,尝试一下驱动这个电机
上电烧录代码之前请同队的“李师傅”看了一下,明显有轴承异响,应该是运输途中或者卖家人为摔坏了
所用软件为MCSDK6.3.2,监控上位机为STM32配套生态软件 MC Motor Pilot
这个上位机用法在WIKI里有详细记录:STM32 MC Motor Pilot - Start-up guide - stm32mcu (stmicroelectronics.cn)
[localvideo]63a0108852886e7228ea5e5ce4d0cc97[/localvideo]
全局视角:
[localvideo]2f1e66cb6d7dfb176fa3034545fc12c9[/localvideo]
听运动声音也能听出来,电机轴承有问题,有较为严重的磨损,但是还不至于烧坏电调板,电调板的损坏另有原因。
- 2024-12-12
-
回复了主题帖:
【一句】来一句话证明你干过嵌入式
吾妻思萌 发表于 2024-12-12 08:14
你的看门狗呢?你的狗呢?
忘了放狗了
- 2024-12-08
-
回复了主题帖:
【读书】《RISC-V 体系结构编程与实践(第2版)》-- RISC-V 函数调用规范
这个函数调用规范是在RISC-V才新提出的吗?
- 2024-12-06
-
回复了主题帖:
【一句】来一句话证明你干过嵌入式
复位一下,程序跑飞了
- 2024-11-29
-
回复了主题帖:
[STM32H7R/S]测评 ⑦制作一个NANO EDGE AI STUDIO采集数据使用的Data Logger
您好大佬,采集的数据是这样的,您那份代码我重新看了,还是不太理解这个数据的格式
我的数据格式为:
识别到的却还是一轴的加速度计
- 2024-11-28
-
发表了主题帖:
【读书】《RISC-V开放架构设计之道》4.向量指令集RV32V
本帖最后由 电子烂人 于 2024-11-14 13:56 编辑
向量指令集RV32V,是为了给RV32I基础指令集增加“向量处理能力”而生的指令集,算是一种数据级的并行处理,能够有效提高处理器的性能。
RV32V主要引入了向量寄存器和向量操作,寄存器可以存储多个数据元素,允许同时执行多个操作;而向量指令可以对向量寄存器中的多个数据元素同时执行相同的操作,从而提高数据处理的吞吐量(RV32V向量加载和存储指令)。同时RV32V支持可变长度的向量操作,这意味着向量的大小可以灵活调整。
指令列表:
向量加载指令:
vlw:加载一个字(32位)向量。
vlh:加载一个半字(16位)向量。
vlb:加载一个字节(8位)向量。
vlwu:加载一个无符号字向量。
vlhu:加载一个无符号半字向量。
vlbu:加载一个无符号字节向量。
向量存储指令:
vsw:存储一个字向量。
vsh:存储一个半字向量。
vsb:存储一个字节向量。
向量算术和逻辑指令:
vadd:向量加法。
vsub:向量减法。
vmul:向量乘法。
vdiv:向量除法。
vmin:向量最小值。
vmax:向量最大值。
vand:向量逻辑与。
vor:向量逻辑或。
vxor:向量逻辑异或。
vnot:向量逻辑非。
向量比较指令:
vcmpeq:向量相等比较。
vcmplt:向量小于比较。
vcmple:向量小于等于比较。
vcmpgt:向量大于比较。
vcmpge:向量大于等于比较。
向量位移指令:
vsll:向量逻辑左移。
vsrl:向量逻辑右移。
vsra:向量算术右移。
向量掩码和条件操作指令:
vmerge:根据掩码合并两个向量。
vselect:根据条件选择向量元素。
向量扩展和缩减指令:
vsext:符号扩展向量元素。
vzext:零扩展向量元素。
vtruncate:缩减向量元素的大小。
向量宽度和掩码操作指令:
vsetvl:设置向量长度和掩码。
vfirst:找到第一个符合条件的向量元素。
- 2024-11-27
-
回复了主题帖:
DIY一个袖珍实验电源
给大佬点赞
- 2024-11-23
-
回复了主题帖:
对一块触摸屏的板子进行LAYOUT,打样后发现屏幕显示有问题,具体问题如下,感谢各位
有没有考虑阻抗匹配?SDRAM和MCU之间的阻抗感觉有问题
图片上的条纹是均匀分布的吗?
- 2024-11-14
-
回复了主题帖:
[STM32H7R/S]测评 ⑨nano edge ai studio 训练一个模型--下
好文章,等我回去试试这个方法。打个胶先(
- 2024-11-13
-
发表了主题帖:
【读书】《RISC-V开放架构设计之道》3.乘法和除法指令集RV32M
这一篇帖子简单说下RV中的乘除法,RV32M是RISC-V架构中的一个标准扩展指令集,它为RV32I基础整数指令集添加了乘法和除法操作。RV32M扩展包含了一系列用于执行乘法、除法和相关运算的指令,这些指令对于执行算术密集型任务非常有用。乘法和除法指令集(RV32M)作为RV32I的扩展指令集,指令相对较少,如图:
指令格式
RV32M指令通常使用R型(Register)格式,该格式包含三个寄存器操作数(rs1、rs2和rd),以及一个操作码,用于指示要执行的具体乘法或除法操作。
这个用法我推荐看老狼的帖子:https://www.cnblogs.com/mikewolf2002/p/9872287.html写的更详细,我这里不再赘述
指令列表
乘法指令
mul rd, rs1, rs2 ,用法是寄存器 [rs2]乘以寄存器 [rs1],乘积写入寄存器x[rd]中。
乘法指令有:
mul
:无符号乘法,结果为32位。
mulh
:无符号乘法,结果的高32位。
mulhsu
:一个操作数为无符号,另一个为有符号的乘法,结果的高32位。
mulhu
:两个操作数均为无符号的乘法,结果的高32位。
mulhusu
:32位有符号-无符号乘法,结果为32位。这个比较特殊: x[rs2]为无符号数,其他和mulhu相同
除法指令
div rd, rs1, rs2 ,用法是寄存器 x[rs1]除以寄存器 x[rs2],向零舍入,将这些数视为二进制补码,把商写入 x[rd]。
除法指令有:
div
:无符号除法,结果为32位。
divu
:有符号除法,结果为32位。
rem
:无符号除法的余数,结果为32位。
remu
:有符号除法的余数,结果为32位。
结语
和ARM不同的是,ARM长久以来只有乘法指令,除法指令到2005年才被添加。乘法指令用于执行快速的硬件乘法操作,这对于数字信号处理、图形处理和其他需要大量乘法的应用至关重要。况且RV32M作为一个扩展指令,可以选择性的添加到RV32I中,这意味着它可以在不需要乘除法操作的场景中省略,以节省硬件资源。
- 2024-11-10
-
回复了主题帖:
[STM32H7R/S]测评 ⑧nano edge ai studio 训练一个模型--上
大佬有检查过MAKEFILE没
- 2024-11-08
-
发表了主题帖:
【读书】《RISC-V开放架构设计之道》2.基础指令集RV32I
本帖最后由 电子烂人 于 2024-11-9 16:14 编辑
RISC-V可以根据不同的应用需求,通过模块化的方式组合不同的指令集扩展。RISC-V架构的主要类别包括以下几种:
基础指令集(Base ISA):
RV32I:32位基础整数指令集。
RV64I:64位基础整数指令集。
RV128I:128位基础整数指令集(目前还在开发中)。
标准扩展(Standard Extensions):
M:乘法和除法扩展。
A:原子操作扩展。
F:单精度浮点扩展。
D:双精度浮点扩展。
Q:四精度浮点扩展(目前还在提议阶段)。
C:压缩指令扩展,旨在减少代码大小。
V:向量扩展,用于高性能计算。
特权架构扩展(Privileged Architecture Extensions):
Machine Level(M-Mode):用于运行操作系统内核和 hypervisor。
Supervisor Level(S-Mode):用于运行操作系统。
User Level(U-Mode):用于运行用户应用程序。
定制化扩展(Custom Extensions):
用户可以根据自己的需求定义定制化的指令集扩展,通常以“X”开头。
这里我们先详细的讲一下最基础的两种指令集之一:RV32I
Rv32I 的设计哲学在于“精简”,只需要处理最核心的几个功能,设计目标是简单、高效、模块化,易于理解和实现。它提供了足够的指令来执行通用计算任务,同时保持了指令集的简洁性。
RV32I指令集支持以下几种指令格式:
R型(Register):用于寄存器到寄存器的操作。
I型(Immediate):用于立即数与寄存器之间的操作。
S型(Store):用于将寄存器的值存储到内存中。
B型(Branch):用于条件分支。
U型(Upper immediate):用于加载大立即数。
J型(Jump):用于无条件跳转。
寄存器
RV32I定义了32个通用寄存器,每个寄存器宽度为32位。其中,寄存器x0被硬编码为0,通常用于表示常量0。
指令集
以下是RV32I指令集的一些主要指令:
这个代码卡的阅读顺序是每一段英文的开头字母,合成为一段具体指令
Load和Store指令
lb
(load byte):从内存中加载一个字节到寄存器,符号扩展到32位。
lh
(load half):从内存中加载一个半字(16位)到寄存器,符号扩展到32位。
lw
(load word):从内存中加载一个字(32位)到寄存器。
lbu
(load byte unsigned):从内存中加载一个字节到寄存器,零扩展到32位。
lhu
(load half unsigned):从内存中加载一个半字到寄存器,零扩展到32位。
算术和逻辑指令
包含简单的加减和一些逻辑运算,是构成计算的最基础部分。这些指令也有对应的立即数操作的。
算数指令:
add
:加法。
sub
:减法。
逻辑指令:
xor
:异或。
or
:或。
and
:与。
sll
(shift left logical):逻辑左移。
srl
(shift right logical):逻辑右移。
sra
(shift right arithmetic):算术右移。
立即数操作:
立即数是一个固定值,通常是一个小的整数,它作为指令的一部分直接编码在指令中,比如:
addi rd, rs1, imm
这条指令代表寄存器rs1的值与立即数imm相加(运算),结果存储在寄存器rd中。
addi
:立即数加法。
xori
:立即数异或。
ori
:立即数或。
andi
:立即数与。
slli
:立即数逻辑左移。
srli
:立即数逻辑右移。
srai
:立即数算术右移。
分支指令
RV32I可以实现简单的比较操作:
beq
:相等则分支。
bne
:不等则分支。
blt
:小于则分支。
bge
:大于或等于则分支。
bltu
:无符号小于则分支。
bgeu
:无符号大于或等于则分支。
跳转和链接指令
RV32I不支持复杂的过程调用,故有跳转链接
jal
(jump and link):无条件跳转,并将返回地址存储在寄存器x1(ra)中。
jalr
(jump and link register):跳转指令的寄存器版本,通过寄存器加立即数偏移进行跳转,并将返回地址存储在寄存器x1(ra)中。
系统指令
包含ecall 、ebreak和 fence、fence.i四个指令
ecall
:环境调用,用于触发操作系统服务。
ebreak
:环境断点,用于触发调试器。
fence
对外部可见的设备I/O和访问存储请求进行定序。
fence.i
用于同步指令和数据流
- 2024-11-07
-
回复了主题帖:
[STM32H7R/S]测评 ⑦制作一个NANO EDGE AI STUDIO采集数据使用的Data Logger
不爱胡萝卜的仓鼠 发表于 2024-11-7 14:04
这个解析结果肯定有问题,他这里都打感叹号了。
首先得确定一下你一共采样了几轮,还有每轮采样几次? ...
这边我是用的datalogger的源代码修改的,因为涉及到多个传感器,所以把其他的部分全都删掉;只留下了加速度计的一轴数据。
我猜测也是修改的时候改的数据格式有问题,采样的图窗只有前几段的数据,后面的数据就看不见了。等我回去看一下当时具体的采样速度。
-
回复了主题帖:
[STM32H7R/S]测评 ⑦制作一个NANO EDGE AI STUDIO采集数据使用的Data Logger
第一步配置的是一轴,我做的电机监测,当震动传感器用,故也不需要太多
当时的截图:
感觉像是数据收发不正常,只收到了一点点,然后就扔进数据处理了
-
回复了主题帖:
[STM32H7R/S]测评 ⑦制作一个NANO EDGE AI STUDIO采集数据使用的Data Logger
请问下,这个用的是三轴的数据吗,我用的一轴加速度但是软件采集数据不正确
- 2024-11-03
-
回复了主题帖:
【读书】《RISC-V开放架构设计之道》1.新生儿RISC-V
秦天qintian0303 发表于 2024-11-2 23:18
不算新生儿了,实物都出来了,应该属于幼年时代
倒也是,不过这本书是从他怎么出生来描述的
- 2024-11-02
-
发表了主题帖:
【读书】《RISC-V开放架构设计之道》1.新生儿RISC-V
本帖最后由 电子烂人 于 2024-11-2 11:45 编辑
每当有一个新概念产生时,我们会习惯性的问:催生他的目的是什么?
对于RISC-V来说,他的主要目的在于:替代现有的ARM架构和X86架构
当然,X86架构是CISC(复杂指令集),我们首先和同为RISC(精简指令集)的ARM架构做对比
ARM好用吗?答案是肯定的。现如今一个房间里的ARM设备极大可能要比X86、8051等架构的设备要多许多,况且ARM的多样化也是其他几种类型的几倍。
但是,还不够好。
(图源:网络)
ARM架构由ARM公司收取专利费,RISC-V架构免费使用,这是这个新架构最大的一个特点。
不过只有免费还不够,工程师们的初衷在于重新设计一种更好用一些的架构,故RISC-V开源了所有架构底层的代码,支持扩展修改,并如同LINUX一样由基金会管理
(图源:网络)
本书的作者将RISC-V的设计逻辑分为了五种性质,所有添加的功能和优化全部围绕这五种性质中的一个或者几个来做
简介性:ISC-V强调简单、高效的指令集设计。这种简洁性不仅加快了处理速度,并节省了功耗,还简化了架构,消除了任何不必要的复杂性。
例如,RISC-V的基础指令集包括基本的加载、存储、算术和逻辑运算指令这些处理器执行的最基本操作。
具体可以看RISC-V指令参考卡:RISCVGreenCardv1.xlsx (cam.ac.uk)
模块化:不同于传统的增量型ISA,RISC-V采用模块化的指令集架构(ISA), RISC-V架构采用模块化设计,包括一个强制的基本ISA(指令集架构)和许多可选的ISA扩展,可以随着用处来删减和添加指令集。这种设计允许开发者根据需要自定义指令集,以满足不同应用场景的需求。例如,可以根据具体的应用需求添加浮点运算、向量运算或加密运算等扩展指令集。编者以ARM中的指令 举例,所有指令要兼容之前的版本,产生了很多冗余,在RISC-V中可以删减不用的指令,更加简单
高效性能: RISC-V架构采用简单而高效的指令集,使得处理器在执行指令时具有更快的速度和更低的功耗。同时,RISC-V还支持多种优化技术,如流水线、超线程等,进一步提高了处理器的性能
安全性:RISC-V支持多种安全特性,包括但不限于MultiZone和,这部分可以和ARM的TrustZone做对比
图:Arm TrustZone与RISC-V MultiZone都基于隔离安全机制(来源:Hex Five)
可拓展性:RISC-V的可扩展性体现在其支持多种位宽的指令集,包括32位、64位和128位。这种设计允许用户根据不同的寄存器位宽和地址需求选择合适的指令集。这种灵活性使得RISC-V能够广泛应用于各种应用场景,从资源受限的嵌入式系统到需要高性能计算能力的复杂系统。
这本书与其说是修习武功的全集,不如说是修习目录。指令集 看上去没有太多难处,但是还需要上手才能了解具体的部分
-
回复了主题帖:
《RISC-V开放架构设计之道》启程:理念、指令与实践初探【学习笔记1】
写的好全面,点个赞