- 博客(60)
- 收藏
- 关注
原创 深度学习中张量的理解
train=False, # 是否作为训练集。download=True, # 是否需要下载。[64, 3, 28, 28]表示有64张图片,每张图片有RGB,3个通道;图像的宽和高分别是28*28;labels[2]是一个张量,item()之后才能获取到张量中的值。6万张图片,每64张为一捆数据。共计938捆,最后一捆不足64张。图片的格式:torch.Size([3, 28, 28])来加载数据集,并设置了。获取第3张图像的标签。
2025-03-17 23:23:23
394
原创 深度学习笔记
想象一下你有一条生产线,这条生产线由多个工作站组成,每个工作站负责对产品进行某种特定的加工。原材料从生产线的一端进入,经过每个工作站的处理后,成品从另一端出来。在这个过程中,每个工作站都对原材料进行了某些操作,使得它逐渐变成了最终的产品。在深度学习中,神经网络就像这条生产线,输入数据就是原材料,而每一层就是一个工作站。前向传播就是指原材料(输入数据)经过各个工作站(神经网络的各层)的处理,最终变成成品(输出结果)的过程。相当于重写父类的方法并且将车间顺序组合起来。处理原材料model(x)
2025-03-15 16:01:10
624
原创 基于STM32F103C8T6的ModbusRTU通讯协议
预分频器输出的这个脉冲周期是 T = 1/10000 秒 = 0.0001秒 = 0.1毫秒;4毫秒的时间内都没接收到串口数据,说明已经接收到一帧上位机数据了。3.5T = 3.5个字符时间 = 3.5 * 10 * (1/9600) 秒 = 3.645835毫秒。串口数据位个数 = 1个起始位 + 8个数据位 + 1个停止位 = 10 bits;定时器中断事件发错的时间间隔为 = 0.1 * 40 毫秒 = 4毫秒;每个字符传输时间 = 10 * (1/9600) 秒。波特率 = 9600 位/秒;
2025-03-09 12:35:01
253
原创 串口通讯基础
当上位机给串口发送(0x55)数据时,MCU的RX引脚接受到(0x55)数据,数据(0x55)首先进入移位寄存器。数据全部进入移位寄存器后,一次将(0x55)全部搬运到接收数据寄存器(RDR),并且触发串口接收非空中断(RXNE)标志位【前提是使能了RXNE中断】,该标志位置位表示可以向串口输入移位寄存器写数据了。当串口给上位机发送(0xAA)数据时,MCU的发送数据寄存器(TDR)先存储数据,硬件检测发送移位寄存器是否为空。
2025-03-04 23:26:43
1403
原创 IMX6Ull学习笔记1:汇编点亮LED灯
0X87800000,并且该地址是DDR的地址。由此可知需要使用DDR,所以在使用之前需要初始化DDR。配置GPIO的电气属性(包括摆率,速度,驱动能力,开漏,上下拉等等);使用正点原子的软件,添加头信息。GPIO1_I003 PIN的复用为GPIO。0X87800000地址作为代码段的起始地址。配置GPIO功能,设置输入输出模式;格式转换,将.elf转换成bin文件。-start 是汇编代码的入口函数。设置GPIO的数据寄存器;start 真正的函数区。对elf 文件进行反汇编。# 汇编代码的入口都是。
2025-03-02 19:21:58
480
原创 C/C++中的字符串
字符串表示方式:防止未定义行为:假设你有一个长度为5的字符串 ,你需要至少6个字节的空间来存储它(包括 终止符)。如果只分配了5个字节:在这种情况下, 不会被正确地视为一个C字符串,因为缺少终止符 。2.2 错误示例22.3 正确示例3. char *str和char str2[]的用法3.1 char *str的使用场景函数参数传递:当需要将字符串传递给函数时,通常使用指针,因为指针只需要传递地址,效率较高。结构体中使用字符串:3.2 char
2025-02-23 23:54:11
512
原创 Modbus通讯协议
注:AO:通常使用 DAC(数字到模拟转换器)将数字信号转换为模拟信号输出。AI:模拟信号通过 ADC(模拟到数字转换器)转换为数字信号,以便在计算机或控制系统中进行处理。
2025-02-15 17:13:16
895
原创 SCPI命令笔记
5. 读取设备电压(功能和第4条命令达到一样的效果)6. 读取设备电流 (功能和第4条命令达到一样的效果)3. 清除设备的状态寄存器和事件队列。7. 查询设备当前电压测量范围。8. 查询设备当前电流测量范围。10. 设置电流的测量范围。9. 设置电压的测量范围。
2025-01-21 16:57:42
596
原创 C语言中求余的作用
通过取模运算可以将一个数限制在一个特定范围内,常用于循环索引或数组处理。在哈希表或哈希算法中,取模运算常用来将哈希值压缩到数组的合法索引范围内。通过取模将数据分配到不同的组或块中。在某些低级编程中,取模可以用于对齐内存地址或判断是否为某种倍数。:均匀分配数组中的元素,例如任务分配、循环排班等。:将数据分类到不同的组,例如分桶、散列存储等。为组数),可以将数组中索引为。求余,可以将值分到特定的组。组 1: 44 67 85。组 2: 23 71 91。组 1: 20 60。组 2: 30 70。
2025-01-15 10:36:05
421
原创 C/C++中的指针函数
头文件中定义的一个结构体,用于存储分解后的时间数据。它将时间划分为年、月、日、小时、分钟、秒等字段,便于操作和格式化。return 堆空间地址;
2024-12-12 22:21:18
586
原创 MCU中的RTC
通俗点讲就是,从1970 年 1 月 1 日0时0分0秒开始按下一个秒表,秒表开始计数。计数的数值就是时间戳。时间戳的定义:是指从 1970 年 1 月 1 日0时0分0秒开始,所经过的秒数(不考虑闰秒);伦敦的时区是零时区(UTC+0),但在夏令时期间会调整为。stm32F4的RTC可以由LSE和LSI供给时钟频率。配置好RTC后,MUC就会产生一个日期时间。北京的时区是东八区(UTC+8),属于。,称为英国夏令时(BST)。
2024-12-12 21:58:25
692
原创 RK3568笔记3:开发板启动流程
并不是 U-Boot 的一部分,而是一个精简的引导加载程序,通常由 U-Boot 提供支持和构建。如果 U-Boot 配置了 SPL(如 U-Boot SPL),那么它们就可以协同工作:SPL 进行初步引导,U-Boot 负责后续完整的引导和系统启动。是第二阶段的 Bootloader,通常运行在 DDR 中,负责完成启动过程的剩余部分。的启动,初始化一些基本硬件,并从存储设备加载第二阶段 Bootloader(U-Boot)。的启动,完成硬件的完整初始化,加载操作系统内核,最终启动操作系统。
2024-12-07 17:27:17
1201
原创 MCU利用单总线协议(1-wire)读取DHT11温湿度
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据”所得结果的末8位。一次完整的数据传输,数据为40bit,高位先出。
2024-12-04 21:31:51
443
原创 MCU定时器应用——输入捕获功能(红外NEC通讯协议)
本文采用的红外接收装置是HS0038,通信协议是NEC当接收到的输入红外光是一个频率为38khz,占空比为50%,持续时间为500us-700us的PWM波形时,HS0038的输出端就会产生一个低电平,而当输入的红外光不是此规格的信号时,HS0038就会输出一个高电平。
2024-11-24 22:21:43
367
原创 MCU的时钟体系
3. APB2总线上的时钟频率为84MHz;2. APB1总线上的时钟频率为42MHz;1. 上图是stm32F4的时钟体系图;
2024-11-17 14:21:55
552
原创 Linux中的挂载
假设我们有一个 U 盘设备,当我们将 U 盘挂载到/mnt/usb目录时,系统会把这个 U 盘文件系统中的内容与/mnt/usb关联起来,之后我们只需进入/mnt/usb,就能看到 U 盘中的所有文件。/mnt/usb目录是空的。/mnt/usb目录中显示的是 U 盘的文件内容。
2024-11-12 23:24:06
1188
原创 RK3568笔记1:BootRom
BootRom是瑞芯微公司在生产的CPU时,存储在内部flash中的一段固件代码,用于初始化硬件和启动系统。RK3568 处理器也具备 BootROM。这是存储在处理器内部的只读存储器 (ROM) 中的一段代码,通常是不可修改的,其主要功能是在设备加电或复位时执行系统启动的第一阶段操作。
2024-11-09 22:15:58
450
原创 Boost服务器端的acceptor、io_context和socket的理解
服务器(餐厅)和 (前台服务员):(调度员/任务分配员):(电话机):
2024-11-03 15:51:50
435
原创 Boost学习笔记5:异步操作中的共享指针
客户端和服务器端都启动完成的情况下,当客户端发起一个请求给服务器,服务器接受到请求;在这个场景下,服务器端(比如你的Session:服务器端已经通过或类似方法开始接收客户端的数据。当客户端发送完数据并主动关闭连接,服务器端可能还在接收数据,但下一次读取或写入操作时会发现连接已被关闭,此时error_code会指示出现了eof或其他网络错误。:此时服务器正在处理数据,但客户端已经关闭连接。服务器在处理完数据后尝试写回响应时,发现连接已经不可用。这时会出现写入失败的错误。: 在和方法中,你会处理这些错误。
2024-11-03 11:50:14
593
原创 C++11中的std::bind()
std::bind是 C++11 中引入的一个标准库函数,位于头文件中。它用于创建一个可调用对象,将特定的参数绑定到一个函数、函数对象或可调用对象上,从而生成一个新的可调用对象(如函数指针、lambda 表达式或其他可调用对象)。这对于传递函数参数、简化回调或将成员函数绑定到对象非常有用。
2024-10-29 14:00:47
337
原创 Windows下的网络抓包库Npcap
libpcap是一个开源的、跨平台的 C 库,用于在操作系统内捕获网络数据包。它提供了一个标准的 API,允许程序员编写可以捕获和过滤网络数据包的程序。libpcap是 Unix 和 Linux 系统上非常重要的网络工具基础库,许多知名的网络分析工具如Wiresharktcpdump等都依赖它进行底层数据包捕获。
2024-10-07 21:20:26
2806
原创 C++中的拷贝构造,拷贝赋值,移动构造的区别
B房子中原来没有家具,经过拷贝构造将A房子中的家具拷贝一份给B房子。现在两个房子中的家具一模一样;结果是两个房子都有一模一样的家具(家具的副本)。A 房子和 B 房子里的家具相互独立,修改 B 房子的家具不会影响 A 房子,反之亦然。
2024-10-02 22:39:33
277
原创 C++中的boost::asio::io_context
想象一下,你在一个繁忙的餐厅工作,作为服务员,你需要管理顾客的订单、上菜、收钱等等。这个繁忙的餐厅就像是网络服务器,而你就是io_context。你在这里处理所有的请求,确保每个顾客都能顺利得到他们想要的服务。io_context。
2024-10-01 13:08:53
478
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人