- 博客(455)
- 资源 (12)
- 收藏
- 关注
原创 MMC、EMMC、SD卡、TF卡、SDIO之间的关系
MMC(MultiMediaCard)是一种多媒体存储卡标准,它规定了存储卡的设计规范以及卡之间的通信方式。eMMC(embedded MultiMediaCard)是嵌入式MMC存储卡的规格,主要用于固定在设备上的内置存储解决方案,可以理解为用于移动设备(如智能手机)上的内嵌存储器。SD卡(Secure Digital Card)是MMC标准的一种实现形式,而eMMC则是通过嵌入设备主板的方式来实现数据存储和读取的规范和技术。可以简单理解为MMC是一种移动载体的实现标准而EMMC则是固定载体。
2024-07-28 12:12:08
352
原创 linux syscall和int 80的区别
syscall和int 80是中断指令,Linux通过对这两个指令的封装为开发者们提供的一种用户态切换至内核态的方法,因为在处理器中用户态是没有权限向更高的权限空间切换的,以x86为例,它只允许,不允许低权限向高权限切换。但是处理器保留了一个机制,就是当产生中断时(无论是任何中断)都会让处理器切换权限并跳转至中断处理函数里,而中断处理函数又由内核注册所以就完成了用户态到内核态的切换。本文以X86架构为例。
2024-07-24 13:41:45
971
1
原创 RV1126过温保护以及驱动分析
它为SOC以及其它模块提供电源,它的重启方式是通过对每个连接在PMIC里的设备对复位引脚发送电平让其复位,它不集成在SOC内部,相较于CRU来说,CRU还支持频率控制,当温度达到一定要求时还可以。这个中断是报警中断和TSHUT不一样,一旦产生TSHUT信号就会触发保护重启,报警中断则是进入中断处理函数里,目的是为了让系统采取措施,例如降频或开启风扇等等,在rk的函数里它是通过调用。不会,这个是关键的类型,这个值一般是给驱动用的,当到达这个值的时候应该进入紧急关机的状态,它与。
2024-07-17 19:45:54
894
1
原创 char、unsigned char、signed char之间的区别
但通常情况下我们也会使用unsigned char、signed char来明确表明我们的变量类型,在某些场景下例如我们的代码会跑在不同的平台上,为了确保结果与我们预期的一致而使用限定符来表明类型,这是一种保证预期结果的好方法。,我的个人理解是应该是为了可移植性,char的类型由编译器决定,这样可以统一在不同的平台上表现一致,但这仅限于你的数据是在额定范围之内。,语言相当于标准,而编译器是实现这些标准的实体,这样的类型一般是需要编译器来决定它是什么类型,此外像int与char也是一样,在。
2024-07-17 13:50:01
273
1
原创 C语言赋值浮点数时候立即数后面加上f的意义和注意事项
很明显结果是错误的,可以看到精度从第8位开始就错了,这是因为float的精度根据IEEE 754的标准,它只占7位有效位,为什么只占7位这里给大家补充一下这个知识,在IEE 754的标准里float占4字节,其中23位表示小数点,而23bit位(23^2)最大能表示的数为7位,所以它小数点后最大能表示7位。f在c语言里是为了区分单精度和双精度的浮点数数据,这一点大家在开发时应注意,不要因为书写习惯在一些双精度的浮点数里加上了f导致精度丢失了。
2024-07-15 10:55:59
336
2
原创 C++ override关键字
Override是C++里的一个关键字,意思是覆盖,用途是让编译器在编译期间检查并放置子类对父类虚函数产生重载。
2024-07-11 10:43:48
235
1
原创 git:Failed to connect to xxx.xxx.x.xxx port 80
一般这个情况是你远程服务器的端口与本地git不一样,使用remote命令更新一下就可以了:
2024-07-02 11:37:41
132
1
原创 行业术语BLOCKING、DROPFRONT、DROPCURRENT
这三个术语一般用于SLOT,缓存时作为input模式使用,分别在缓冲区满时起作用。DROPCURRENT: 当缓冲区满时什么都不做,丢弃数据,不压入。DROPFRONT: 当缓冲区满时从头开始覆盖。BLOCKING: 当缓冲区满时阻塞等待。
2024-06-14 09:28:42
174
1
原创 ubuntu安装CUDA之后使用nvdia-smi仍然提示找不到cuda
这是因为BISO安全引导的问题,CUDA的驱动是没有经过签名的,如果你开启了安全引导那么在启动阶段Linux只会加载被签名的驱动,就会导致cuda没有被正确安装。解决方法也非常简单,只需要在开机时进入bios把安全引导关闭即可。
2024-05-31 16:19:16
284
1
原创 rv1126 ov5640调试文档
启动后驱动偶然性能够通过I2C/SCCB读取到OV5640的芯片ID,经过多次开机验证10次里只有大约1-2次能够读取到,当多次读取之后需要将设备关机大约5分钟左右才能够读取到芯片ID。
2024-04-30 15:13:32
578
2
原创 c++缓冲区同步原理与std::ios::sync_with_stdio作用
c++是基于c语言的扩展语言,本质上它继承了c语言许多特性,同时也继承了C语言特性,在c语言中stdio为输入输出缓冲区,stdin是输入缓冲区,stdout是输出缓冲区,C++不与C语言使用同一个缓冲区,这就出现了一个问题,当使用printfcouttest2test1可以看到test2早于test1输出了,这是因为c语言的机制,c语言缓冲区只有在遇到\n程序结束缓冲区满时才会刷新缓冲区。
2024-04-28 10:01:24
516
3
原创 掌握ROS:完整的认识ROS
元操作系统(Meta-Operating System)是一个高级概念,它不是传统意义上的操作系统,而是一个在现有操作系统之上运行的软件框架或系统,提供了额外的、更抽象的功能和服务。这种系统通常用于管理和协调底层操作系统的资源和应用程序,使得应用程序的开发和部署更加高效和灵活。ROS全称Robot Operating System(机器人元操作系统,ROS的目的旨在为开发者提供一个直观、通用的软件框架和工具集,旨在简化和加速机器人应用的开发和研究过程。
2024-01-02 15:36:40
1805
3
原创 串口硬控制流中CTS、RTS、DTR、DSR、DCD的作用与意义
硬件控制流信号在串口通信中没有固定的发送者或接收者,因为串口通信本身是一种双向协议。发送者和接收者的身份可以随时间动态切换,硬件控制流信号也可以在这个过程中互换发起者身份。这种灵活性使得通信双方能够根据需要动态地进行数据传输的控制。
2023-12-31 14:21:27
4141
原创 什么是AHB、APB、AXI总线?
AHB(Advanced High-performance Bus)是一种高性能的总线协议,由英国ARM公司设计,被广泛应用于许多嵌入式系统中。它是一种基于Mater-Slave的总线架构,广泛应用于SoC、MCF当中,并且支持多个内存和外设连接。AHB一般应用于高性能、高时钟频率的系统结构,例如CPU与高速RAM、NAND FLASH、DMA等。
2023-10-16 13:58:32
1327
原创 RISC-V 整型通用寄存器介绍
x0/zerox0寄存器又被称为zero寄存器,它的读写是无效的,它的值只能为0,这是为了让编译器进行优化上面这段汇编的作用是进行相加运算,将x2和x3寄存器的值相加的结果并放入x1寄存器,但是如果x3寄存器的值为0当RISC-V处理器执行这条指令的时不会去读取x0寄存器的值,会直接按0来运算,这样就可以省去与0做运算时读取的步骤。RISC-V处理器在设计时只要涉及到x0寄存器的读取一律按0来处理不会去读取x0的寄存器,这么做的目的是为了方便编译器优化某些运算。
2023-08-17 13:56:50
2769
原创 RISC-V体系结构
它规定了如何加载和执行RISC-V二进制代码,以及如何访问控制和系统资源。的操作,这样做的目的可以有效将不同特权完全分隔开,可以保证。,定义了一组特权指令和异常处理机制。,定义了一组用户态指令和系统调用指令。,那么两个语言编译出来的程序是。SBI限定了不同特权模式下对。二进制接口的,因为它们的。那么相互之间就可以调用。
2023-07-27 13:35:05
938
原创 RISC-V特权级别
所以内核分两部分,运行在M模式下的代码为内核提供访问硬件资源的能力,而S模式下的代码则更加灵活。里的最高权限模式,它具有访问所有资源的权限,它的代码是百分百可信的,通常运行在这个模式下的为。下,通常内核里有一段代码是运行在M模式下和S模式下,M模式下的代码为S模式下的代码提供。而S模式下的内核主要是为应用程序提供。里不同的模式下指令集是不同的,不能互相调用,运行在这个模式下的程序为最高权限,它属于。下的,在这个模式下内核需要初始化所有的。,在最初系统启动阶段内核是运行在。,在这个模式下具有和。
2023-07-27 13:34:36
1843
原创 什么是RISC-V?以及RISC-V和ARM、X86的区别
RISC-V是基于RISC精简指令集架构开发的一个开放式指令集架构,它是由加州大学伯克利分校的计算机科学教授(克里斯蒂安·阿萨诺维奇)领导的团队开发,RISC-V是开放的,任何人都可以使用它来开发处理器芯片和其他硬件,而无需支付任何许可或使用费用。RISC-V的设计简单,易于扩展和自定义,可以在各种应用场景和市场中使用。指令集架构(,简称ISA)是计算机系统中的一个重要概念,指的是计算机中处理器的指令集和处理器的内部结构,即处理器是如何执行指令的。ISA规定了一套指令集,包括指令的种类、指令的格式。
2023-07-27 13:31:54
6775
原创 电容的基本工作原理
电容会阻碍直流信号通过的原因是因为电容负极一端在逐步充电,有源源不断的电子进入,当极板上充满电子时即代表电容的电量充满了,极板上没有多余的空间让电子进入同时也由于同性相斥的原因电容里的电子会排斥后续电子的进入,这样就导致电容的一端形成了电子无法流动的情况从而导致直流信号无法通过,而金属极板内的电子无法通过两个金属极板中间的电介质。位移极化只是将无极分子施加电场力让它内部电子不重叠,负电子仍然没有拜托共价键的束缚,这种力比较中性所以对导电率的影响并不高,这也是为什么极性电容可以做到相同体积下容量更大的原因。
2023-06-19 23:23:57
2453
原创 I3C仿真:PGY I3C-EX-PD使用
指示灯状态LED1电源LEDLED2保留LED3配置为MASTER时,LED亮起LED4当设备引导时,该LED将每1秒闪烁一次。连接完成后使用软件建立并启动捕获时LED将闪烁得更快,表明其已做好获取准备LED5完成LED,启动完成时亮起。LED6配置为SALVE时,LED亮起。
2023-05-15 13:23:09
927
1
原创 什么是OpenVino?以及如何使用OpenVino运行yolo
Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。Openvino内部集成了OpencvTensorFlow模块,除此之外它还具有强大的Plugin开发框架,允许开发者在Openvino之上对推理过程做优化。Openvino前端→ Plugin中间层→ Backend后端Openvino的优点在于它屏蔽了后端接口,提供了统一操作的前端API,开发者可以无需关心后端的实现,例如后端可以是。
2023-04-23 12:34:00
10750
3
原创 Linux Dbus
Linux Dbus是由项目开发的一款IPC进程间通讯技术,它是基于在Unix 域套接字实现的,它在sockets上面进行了封装并提供了一套更加规范、方便、安全的通讯机制,同时定义了一套标准接口,目前已经被大量Linux发行版所采用,比如Ubuntu、Centos...Dbus最初的目的就是为桌面应用程序之间提供IPC通讯技术它不属于Linux内核的一部分,它目前没有被Linux内核所采纳。
2023-03-27 16:28:19
3358
1
原创 Zephyr驱动程序框架简介
Zephyr为驱动提供一套具体的驱动框架模型,开发者可根据这一套驱动框架模型来实现自己的驱动,这一套模型非常类似Linux内核的驱动实现,如果你对Linux内核驱动模型或有Linux内核驱动开发相关经验那么学习起来会非常轻松与简单。驱动模型框架是使用了结构化的方式描述驱动,每个驱动都有等级,等级在Zephyr内部已经规定好了,每个等级对应不同的阶段,Zephyr在启动过程中会根据等级来依次初始化这些驱动,同时在不同的阶段下某些内核服务的可用性也是不同的。一些通用类型的驱动 (常见驱动) Zephyr给出了具
2023-03-05 08:27:55
1758
原创 通过Buildroot自制根文件系统
根文件系统是Linux内核启动之后读取的一个文件系统,并从这个文件系统中加载第一个init应用程序并启动,就是Linux上俗称的root进程、根进程。
2023-02-23 14:12:20
1166
原创 在OpenstLinux根文件系统里增加自己的应用程序
这些文件夹都是按照Linux内核所需要的格式提供的,Linux内核启动时会需要文件系统下存在这些文件夹,用于Linux内核做初始化,这些目录结构非常眼熟和我们平时装好发行版时提供的文件夹结构是一样的。不同的系统内核所需要的文件夹也是不同的,这里我们重点关注bin这个文件夹,这里的bin就相当于我们/usr/bin目录,这个文件夹里存放了bin文件,我们可以将我们编译好的二进制文件放入到这个文件夹里去就可以了。可以看到存放了一些常用命令,例如rm、ls、cp等,一般这些工具都是基于busybox制作的。
2023-02-22 16:17:38
335
原创 烧录OpenStLinux到Stm32mp157上
这几个都是flashlayout文件存放目录,每个目录里flashlayout布局使用的固件都不同,这些是ST根据不同的信息生成的不同固件的配置方法,其中optee和trusted是我们常用的,flashlayout以tsv文件格式作为存储,可以看到trusted目录下的内容。我的flash是emmc的,所以我使用的是flash_emmc*的配置文件,这里打开配置文件看一下,如果你的是定制板那么可以向厂商索要这个文件。在刷写之前根据你的板子拨码开关拨码到指定位置,这里我使用的是usb下载模式。
2023-02-22 10:09:43
1033
2
原创 移植OpenStLinux到Stm32Mp157上
OpenstLinux是st官方提供的基于Yocto和Debian构建的发行版Linux操作系统,专门为Stm32Mp1系列研发的操作系统,这里解释一下为什么OpenstLinux使用了两种构建方式,OpenstLinux使用了Yocto的Bitbake工具来进行编译方面的构建,在运行阶段使用了Debian项目下的开源应用例如apt-getGithub地址:https://github.com/STMicroelectronics/oe-manifest官方Wiki地址:https://wiki.st.co
2023-02-22 10:03:03
1015
原创 构建Yocto项目
简称YP, 是一个致力于帮助开发者构建自己的Linux嵌入式的项目,除了Yocto还有其它的开源项目例如:Debian,著名的Ubuntu就是基于Debian来构建的发行版。(YP)是一个开源协作项目, 可帮助开发人员创建基于Linux内核的自定义系统, 而无需考虑其硬件体系结构。该项目提供了一套灵活的Build工具, 开发者可以更快的上手去构建自己的Linux操作系统, 经过许多年的发展Yocto已经支持了许多架构, 例如:IntelARMMIPSAMDPPC。
2023-02-21 12:22:17
1188
原创 Kibana创建图表
创建时,在index pattern字段下输入你要绑定的Index数据,Timestamp field字段是用于绑定时间戳的,主要做时间分类用的,你可以绑定自定义字段,也可以绑定Filebeat自动生成的字段:@timestamp。Kibana作为ELK里的VIEW层,它主要工作是将ELK里的数据可视化,下图为使用Kibana创建的图表数据,用于实时监控CPU信息。如果你想查看数据,可以选择Analytics->Discover,在这里可以清楚的看到Index下的数据。我们还可以利用Pie。
2023-02-14 14:40:22
1106
原创 Elastic Stack Logstash基础用法
在Logstash里为我们提供了一个非常强大的Grok日志分析工具,它可以将杂乱无序的日志变的井然有序。Mutate是过滤器,用于将字段进行二次过滤,它位于grok后一层。
2023-02-14 11:52:09
225
原创 Makefile depend规则
dummy规则是首要规则,即执行make不加任何目标的情况下默认执行的规则,它会去检查.depend文件是否存在,也就是你是否执行过dep去生成依赖文件,如果没有则执行dep规则,如果存在那么dummy规则什么都不会去做,因为在开头的include里已经包含了要编译的依赖文件选项。而linux内核里将-M的输出到.depend文件里去了,然后在利用Make的include命令包含进来,这样就实现了dep的功能,可以理解为增量编译功能。-M和-MM的区别是-MM不会将系统依赖文件包含进来。
2023-01-04 10:55:16
1308
原创 卷积神经网络中卷积的作用与原理
在神经网络中卷积是最常见的操作,通常情况下它应用在神经网络的Input层后面,所以我们多数情况下称这一层为卷积层或隐藏层,这里提一句什么是隐藏层,在神经网络中有输入层和输出层,这两层对于外界是可见的,并且它接收来自外界的输入或输出到外界里去,当然一个完整的神经网络不可能只有输入层和输出层,就以CNN卷积神经网络来说当图像输入到输入层之后会被传递给下一层做特征提取下一层一般是卷积层,随后卷积层会传递给池化层,在由池化层传递给全连接层,这三层对于外界来说是不可见的,它不能直接接收外界的输入或直接输出到外界,所以
2022-12-13 11:13:37
8425
6
原创 Stm32 HAL_UART_Receive读取不到数据的问题
最近在做Stm32方面的工作时发现使用HAL_UART_Receive函数去读取数据时出现了问题,代码如下: 这段代码非常简单,就是在一定时间内读取满128个字符,但是会有一个问题,如果超时时buffer没有被读取到128个字节那么下次还可以读取,但是一旦超出或到达128个字节下次在读取就会没有数据,但是在中断情况下是可以正常读取的,随后我去查了一下USART寄存器,发现它有一个OVRDIS的功能,简单来说就是当数据达到buff设定大小时会将ORE标志置1,那么下次来新数据时如果ORE为1则不会填充到
2022-12-05 13:31:20
4529
5
原创 Elastic Stack 环境配置与框架简介
Logstash、Kibana,因此缩写为elk,随着版本的变化,添加了一个新软件Beats,因此其全名现在为ELKB。
2022-11-28 11:05:43
1077
原创 数码管共阳极与共阴极的区别
无论是共阴还是共阳都是利用了最基础的回路电路,数码管需要回路才能让电子流动并产生能量点亮数码管,这里以共阳为例,共阳正极一直处于高电平,负极一定是用于产生回路的,所以负极不能是高电平,换句话说负极不能有任何电流,但是我们可以给负极接一根PIN脚,给它发送高电平将回路堵死,这样就可以让其不点亮,如果想要数码管点亮则不给电平(低电平)即可,所以这也是为什么共阳是低电平驱动,共阴是高电平驱动。将负极并联在一起,正极作为输入,这个会比较常用,因为正极使用单独的供电可以适配不同电压。
2022-11-07 15:38:55
5790
原创 Ubnutu上面配置Windows remote连接
Windows提供的远程桌面连接可以连接任何支持RDP协议的PC。它通常用于连接Windows和Windows。但是我们可以为Ubnutu系统安装或配置支持RDP协议的功能,以便实现Windows和Ubnutu之间的连接XRDP是Linux上的开源免费工具。它可以实现RDP协议并支持Microsoft RDP协议。在Linux上安装后,Windows可以通过远程GUI软件远程连接到Linux桌面系统。
2022-09-21 14:07:12
701
原创 C语言printf中%s、%*s、%*.*s的作用以及实现一个进度条
这个比较特殊,首先前面的*代表至少输出多少个字符,如果少于这几个字符则在左边空格补齐。”符号,则认为是一个格式化标识符,它会自动读取下一个字符作为占位符,如果“”上下文中,那么后面一个字符就要求为宽度占位数。在c语言printf的解析格式里,如果遇到“个字符,所以又在左边用空格进行了补齐。”则取参数对应位作为宽度,如果是“第二个*代表最多输出多少个字符。所以这段参数的含义是至少输出。的原因,所以我们只能输出。个则在左边用空格来补齐。个字符,但最多只能输出。,意味着最多只能输出。
2022-09-10 20:53:21
8611
原创 I3C协议通讯详解
详细介绍GPIO、I2C、SPI通讯原理以及物理层原理I3C CCC(Common Command Codes)是I3C下CMD命令代码,用于通讯方面,设备收到指定命令应做出对应的响应,类似于Linux上的ShellI3C CCC有255个指令有部分是保留的指令,其中有15个标记为必须的是要求I3C设备必须支持的,I3C设备在支持这些命令时需按照I3C CCC定制的规范来实现,并且广播和直接命令都有一个固定范围,从机可以根据命令码的范围来判断是属于广播还是直接命令。...
2022-08-18 11:51:20
22844
8
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人