- 博客(61)
- 收藏
- 关注
原创 C++数据结构算法学习
跳跃表是怎么构建元素,对元素进行查询的,为什么不选择红黑树呢,我们需要对整个数据结构算法进行全面了解,提高代码能力,9千行代码,长足长进。对实践性项目有帮助,对笔试面试,简答题有作用,工作中解决问题的思路更多,数据算法对软件代码细节很多,解决实际问题有帮助,好处说不完,myspl的索引 加速查询,是基于B+树实现 ,B+树是个多路的平衡树,B+树怎么构建怎么查询,系统编程,linuxC++,后台开发,写服务,高性能,高并发,高复用,操作系统,进程线程调度,虚拟内存,内存管理,文件管理,常见命令。
2024-11-11 18:35:55
397
原创 SH3001姿态解算
万向节死锁:当使用欧拉角表示旋转时,如果俯仰角 θθ 接近 ±90∘±90∘,系统会失去一个自由度,导致无法唯一确定某些姿态。解决方法:使用四元数或旋转矩阵可以避免万向节死锁问题,确保姿态的唯一性和准确性。
2024-11-10 20:03:54
883
原创 SH3001六轴 学习1
1.SH3001六轴加速度传感器2.气压计测量高度;磁力计: 无人机通常使用磁力计来确定航向,结合加速度计和陀螺仪的数据,实现精确的飞行控制和导航六轴电信号经过:放大 解调 滤波 得到ADC值输出到寄存器里面SH3001扩展有从I2C接口,可以通过从I2C接口控制磁力计ST480MC3.SH3001引脚4.电源模式设置,厂家只给我们提供了函数接口,没有提供寄存器说明,所以我们只要操作接口就行SH3001寄存器。
2024-11-10 01:39:42
853
2
原创 CAN通信协议 HAL库学习
数据帧分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段数据帧由7段组成,数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段显性信号为0,隐形信号为12.CAN位时序介绍CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS),一个Tq传播时间段(PTS),两个Tq相位缓冲段1(PBS1)三个Tq相位缓冲段2(PBS2),三个Tq每段又由多个时序Tq组成,(Tq可以理解为单位长度)
2024-11-07 22:37:48
1215
原创 Linux网络编程之UDP编程
UDP编程效率高,不需要差错校验,在视频点播场景应用高基于UDP协议客户端和服务端的编程模型,和TCP模型有点类似,有些发送接收函数不同,TCP是之间调用I/O函数read0或write()进行读写操作,而UDP是用sendto()和readfrom()等封装好了的函数进行数据接收发送。
2024-11-07 00:13:54
803
原创 Cadence PCB学习
而其他的布局,布线以及铺铜这些操作它是固定的,对应的菜单选项也就哪一些。2.约束管理器 这两个比较难,和PCBlayout 有些关联。先模仿,再模仿,后孰能生巧,从而提高设计速率,然后完成板子。Cadence Allege难点。
2024-11-06 19:47:24
140
原创 嵌入式软件八股文
交叉编译指的是在一个平台上编译出另外一个平台的可执行程序ARM开发板.c .h不能拷贝ARM开发板,ubuntu使用交叉编译链,.c->可执行程序。
2024-11-06 19:13:48
979
原创 2024,11,5硬件学习mos管
PMOS和PNP型三极管类似, PMOS是箭头向外,PMOS和PNP导通电压都是负压,就是PMOS的Vgs < 0,PNP的Vbe < 0,PMOS和PNP分别导通。这个管子先是高压启动让IC先工作起来,工作起来后就有波形去控制管子的导通或者截至下面这个增强型NMOS,s极和d极方向错了,上面是电源输入端,下面是输出端,驱动IC。2,mos存在体内二极管的,体内二极管串接在DS之间的,方向和栅极箭头指向一样,PMOS都是D极到S极,NMOS都是S极到N极。1,mos管g极,s极和d极辨认,g(栅)极,
2024-11-05 14:12:41
230
原创 linux网络编程自定义协议和多进程多线程并发-TCP编程
/协议头部//头部//校验码,验证发送方和接收方是否一样//协议体部//数据}Msg;/**发送一个基于自定义协议的message*发送的数据存放在buff中*//**读取一个基于自定义协议的message*读取的数据存放在buff中*/#endif。
2024-11-03 18:30:45
1146
原创 TCP编程-socket(套接字)编程实战1
是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段。Linux中的网络编程通过Socket接口实现,,(一个{协议,本地地址,本地端口,远程地址,远程端口};(五元组)采用的协议类型,是UDP还是TCP本机地址和端口远程地址和端口。Socket有两种,一种是服务器端的Socket,另一种是客户端的Socket(可以有系统自动分配)
2024-11-02 18:04:51
1380
原创 Linux网络编程
网络,计算机网络遍布各个领域1.使用远程终端资源,2.达成资源共享,共享信息,程序,数据3.分布处理两台联网终端通过网络发生数据,一方发送,另外一方读,人类通过写信可以识别,计算机之前传输信息也需要解析,要遵守数据格式接收方要直到发送方的数据格式,接收方才能根据约定的协议进行解析,比如1.传输速率2.代码结构与顺序3.传输控制步骤4.出错检错 这些约定称为通信协议。
2024-11-01 16:50:19
999
原创 C语言递归
这里的递归思想是用if(n==1)确定递归上限,这就是递归调用的最高层,然后依次按照递归调用顺序返回去执行递归调用函数剩下的语句,递归思想是栈的运用,先进后出,斐波那契数列就是递归的伟大运用。将A的三个圆盘移动到目标赶,而且以这个顺序,总之,有两个盘及以上时候,大盘永远在上。2.递归思想解决汉诺塔问题。
2024-10-30 17:57:04
180
原创 二叉树的三种遍历
前序遍历:就是根节点在前面,接着左节点,接着右节点。中序遍历:左节点在前面,根节点在中间,右节点在最后。后序遍历:左节点在前面,右节点,根节点在最后。
2024-10-28 00:21:58
202
原创 数据结构,删除链表倒数第n个节点,并返回新的头节点
/2号需要走到正序的(1+x)-n个节点位置,就是删除节点前一个。//先让1号节点走1号节点要走的次数减去二号要走的次数。//最后一个节点时,二号节点遍历到要删除节点前一个。//1号需要走到x+1位置,需要移动x次。//1,2号节点开始都指向新的头节点,//然后1号2号只需要走相同的次数就。//x-(x-n) = n次;//由于代码中新加了个头节点。// 删除倒数第 n 个节点。//需要让1号节点遍历到。//就需要走x-n次。//能到达相同目标了。
2024-10-27 22:11:27
256
原创 嵌入式高级c语言学习
传递一个值的地址 int a = 10,void fun(int *p)传递一个空间的地址int buf[10];函数返回值静态区:关键字static 会把buf里的局部变量由局部变量存的栈中放在数据(Data)段在静态区,生存周期是整个程序结束2.只读区: char buf[] = "hello world";3.堆区:malloc() ,free() char *s = (char *)malloc(2048);堆区return s;
2024-10-27 14:33:24
696
原创 二分搜索法
在一个数组里找一个target,返回数组下标,没找到返回-1。整数2分转化为浮点数二分, 1e-5是科学计数法代表10的-5次方。二分查找,mid = l + r >>1;通过移动l和r来找到想要查找的值。第一种,l+1 < r;r和l是开区间处理边界法。
2024-10-25 22:12:09
281
1
原创 SPI通信
起始信号:NSS片选信号没被选中默认高电平,CS信号由高电平转为低电平,停止信号:NSS片选信号由低转高同步时钟:SCK,SPI总线是一个同步全双工通信总线,所以SPI的数据传输需要SCK时钟信号严格同步的,SCK一个时钟周期传输一位数据SPI有四种工作模式:关于在SCK信号空闲时候高低电平和数据采样在时钟第几个时钟沿CPOL(时钟极性): CPOL=0,SCK空闲状态为低电平。CPOL=1,SCK空闲状态为高电平。
2024-10-25 20:51:13
920
原创 嘉立创四层板学习
5.器件和信号连接主要在底层,GND层最好在第三层,保证关键信号线的质量,减少干扰,电源层就放第二层,顶层走其余的线。1.顶层和底层常用于走信号线,所以可以第二层走GND或者第三层走GND,电源层与之相反。4.器件和信号主要在顶层,GND层最好在第二层,第三层设置为电源层,底层走其余的线。特别是走差分线,高速线,一条线的阻碍大,一条阻碍小,则会影响原信号的计算值。3.主电源层和主GND层必须靠近摆放,以提高较大的耦合电容,1.走线信号大拐弯,2.走线宽度不一致,3走线穿过不同层。
2024-10-18 00:23:14
1276
原创 小马哥飞控硬件学习
5v转3v3_1给主芯片供电,5v转3v3_2给8266供电,因为8266功耗比较大,所以区别于主芯片单独供电,xc6206是3.3v稳压芯片,两边加了两个滤波电容8266用的是3v3_2去给它供电,主芯片用的是3v3_1供电这个电路是给锂电池升压为5V,BAT54C是为了防止电源反相,或者是VDDIN就是USB供电,输出一个稳定的5V,VBAT是锂电池实际电压VBAT是锂电池电压,下面这个是USB给锂电池供电的电路,VBAT_OUT是锂电池输出3.7V电压,要通过升压电路升到5v再稳压到3.3v。
2024-10-16 21:37:56
1124
原创 PID算法学习
PIDPID举例:电池充满电马达转速快,在具体场景中通过对编码器的速度反馈算法连续公式对上诉公式离散化,离散公式整理得到位置式PID,根据变化,得到增量式PID公式,位置式PID和增量式PID只是公式表达样式不同增量式算法不需要对积分项进行累加,控制量增量只与近几次的误差有关,计算误差对控制量计算的影响较小。而位置式算法要对近几次的偏差进行积分累加,容易产生较大的累加误差。增量式算法输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,例如步进电机。
2024-10-14 13:43:12
574
原创 Stm32 can总线协议学习,原子教程
CAN总线拓扑图,高速can是闭环总线添加匹配电阻120欧姆,低速can是开环总线,CAN的总线特点,CAN也是用差分信号线来传输,和RS485一样。可挂载的设备节点与can的收发器有关。
2024-10-13 15:09:50
430
原创 正点原子RS485学习
A相当于+,B相当于-在图中,RS485是半双工的,得到的差分信号(A-B)/2得到实际信号,但是这里是逻辑电平1,0所以只管谁大就能区别发送的逻辑电平。RS485总线是A线连A线,B线连B线,半双工通信,485芯片将将485电平转换为TTL电平,或者相反,双绞线也是为了抗干扰,匹配电阻也是为了抑制噪声。485通信波形图,RO是接收器输出端,连接的是stm32的RX, A和B是电平转换芯片将TTL电平转换为485电平输出或输入口。TTL电平逻辑1通常为2.0V以上,标准TTL的高电平通常为2.4V以上。
2024-10-13 00:39:38
678
原创 NRF24L01原子HAl库学习
CONFIG寄存器,发送是0x0e,接收是0x0f,RX_DR,接收到数据触发IRQ中断,显示低电平,TX_DS,发送出去并接收到ACK信号是发送完成,触发中断信号,IRQ输出低电平。_write_buf(NRF_WRITE_REG + RX_ADDR_P0,(uint8_t *)RX_ADDRESS, RX_ADR_WIDTH)是把接收地址写入通道0。/* 清除RX FIFO寄存器 */MAX_RT,达到最大重发次数标志,写1清除中断,MAX_RT产生中断标志,需要清除中断后系统才能通信。
2024-10-11 20:48:13
758
4
原创 NRF24L01无线通信模块学习 来自正点原子标准库
在发送端的通道0被用作接收应答信号,因此通道0的接收地址要与发送地址端地址相等,以确保接收到正确的应答信号, 下图中有6个发送端,一个接收端,因为接收模式下,可以接收6路不同数据,下面的数据通道1~5高32位为固定地址,后8位为自身地址。工作模式介绍,当处于发送模式的时候,CE脚电平为1,延时10ms,CE脚电平为0,进入待机模式I,CE在设置为,进入待机模式2。发送地址设置寄存器,先写低字节,在enhanced模式下发送后会自动应答,所以P0的接收地址应该与Tx的地址相等。NRF24F0l驱动函数。
2024-10-11 14:29:13
508
原创 正点原子讲解SPI学习,驱动编程NOR FLASH实战
后面跟上擦除整个扇区和擦除整个芯片的操作,因为norflash最小擦除单位是扇区,nandflash最小擦除单位是块,1个扇区4096byte,一个页256Byte,一个块65536字节。下面是正点例程处理写入超过当前页剩余字节数,超过扇区剩余字节数,扇区内有字节已经被写1,只能整块擦除,的norflash.c代码,我已经加了注释,非常巧妙。配置SPI传输速度时,需要先失能SPI,__HAL_SPI_DISABLE,然后操作SPI_CR1中的波特率设置位,再使能SPI,SPI相关HAL库驱动。
2024-10-10 13:03:43
657
原创 硬件SPI学习
先拉低片选,发送擦除指令20h,发送24位擦除地址,拉高片选,结束擦除,读状态寄存器,检测擦除是否完成。页写时序,拉低片选,发送02h,发送24位地址,发送数据,页写命令最多向flash传输256个字节。读状态寄存器1,CS引脚发送0拉低片选,发送05h,从机SO返回状态寄存器值,拉高CS片选结束读。读时序,拉低片选,MOSI发送03,支持连读,继续给SCLK信号就能连读,拉高片选,停止读。扇区擦除,由于flash存储器只能将1写为0,不能将0写为1,所以有了扇区擦除,SPI是边沿协议,IIC是电平协议。
2024-10-09 19:09:33
388
原创 W25Q64学习 非易失性存储器
5,因为flash写入速度慢,先将数据写入256byte页缓存区,所以多字节写入时,不能超过一页数据,写入结束后会进入慢状态,通过读状态寄存器的BUSY位=0时芯片就不忙了。对于w25q64整个存储空间,划分为128个块,对于每个块,划分为16个扇区,对于整个存储空间,会划分为很多个页,每页256个字节。2.写入数据前必须先擦除,只需要发送擦除指令给FLash,擦除后,所有数据位变为1,这里解决了第2条限制缺陷,读取,芯片进入忙状态,不会响应新的读写操作,在读取之前,要判断芯片是否在忙状态。
2024-10-09 11:06:46
433
原创 PCF8574用来通过IIC协议IO扩展
步骤2代码 读取PCF8574IO口状态,从机在接收到主机发送的读通讯地址后会锁存IO口状态,并将8个IO口发送到SDA,主机读SDA就行,产生非应答信号,然后产生停止信号。步骤3,设置PCF8574IO口状态,delay_ms(10)是预留充足时间等待写入完成。I2C通讯地址=设备地址(固定位+硬件选择位)+数据流向方向(读写位)关于通讯地址手册 PCF8574T。正点原子PCF8574教学。以上代码例程参考正点原子。PCF8574中断引脚。PCF8574驱动步骤。PCF8574T特性。
2024-10-08 18:24:51
783
原创 II2C学习
发送的地址是设备地址加数据传输方向,4kbit是512个字节就是2的9次方,发送一个字节有8位不能完全表示512个字节地址,就向设备地址借一位,有了P0。为什么要配置SDA开漏,pmos栅极输入低电平导通,nmos输入栅极输入高电平导通,输出控制输出1,Nmos导通,pmos不导通,同步串行半双工,可收发,不能同时收发,一般连接3个,SCL和SDA默认状态下为高电平,因为有上拉电阻。先发送设备地址,从机应答0收到,再发送要写入的地址,从机再次应答,再发送一字节数据,从机再应答。
2024-10-08 14:22:13
371
原创 SSD1306驱动芯片学习
行地址,列地址,页地址。行地址,列地址,页地址。ASCII字库制作 PCtoLCD2002制作字库。128*64 横128列,竖着8页。128*64 横128列,竖着8页。ASCII控制字符和显示字符。
2024-10-07 21:53:20
205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人