自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 C语言使用数组实现链表功能

直白的说该代码原理就是通过两个数组,一个数组1存放数据,一个数组2存放地址,数组1和数组2的第n个数据共同组成一个链表节点。

2024-10-21 21:30:35 753

原创 二叉树遍历(前序、中序、后续)

树:树的根节点没有前驱,除根节点以外,其他所有节点有且只有一个前驱。二叉树:是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点。以此图为例,F为根节点,C为F的左子节点,E为F的右子节点。

2024-10-21 18:32:33 4484

原创 FreeRTOS应用开发学习

FreeRTOS 中,任务的创建有两种方法,一种是使用动态创建,一种是使用静态创建。动态创建时,任务控制块和栈的内存是创建任务时动态分配的,任务删除时,内存可以释放。静态创建时,任务控制块和栈的内存需要事先定义好,是静态的内存 ,任务删除时 ,内存不能释放。

2024-10-15 20:15:29 726

原创 博流bl616开发笔记

本文大体框架如图BL618开发板可以进行BL618芯片的快速评估、开发。开发板集成了CK-Link调试器,无需额外的调试工具。BL616/BL618 是一款博流智能推出的基于RISC-V 架构的32-bit CPU,适用于超低功耗应用的 Wi-Fi 6+蓝牙5.x+Zigbee组合芯片。支持 RISC-V 32/16 位混编指令集,包含64个外部中断源,有4个bits可以用于配置中断优先级。开发板主要包含:BL618核心电路、CK-Link调试器、TF卡座、Flash存储器、USB 2.0 HS OTG

2024-10-15 20:14:50 2013

原创 stm32定时器输入捕获模式

频率测量有两种方法。

2023-11-22 19:53:09 872

原创 【C语言】计算实时太阳角度(高度角、方位角),以及使用stm32单片机实时获取时间戳

在编写该代码的过程中寻找了多篇博文和论文,综合所有文章且按网上的以0时的方位角的0°,且随时间累加累加至360度。我修改了博文和论文的一些角度的计算方法。得到一下代码。

2023-11-22 19:49:08 2066 3

原创 读取W25Q64的设备ID时输出0xff

读取W25Q64的设备ID时输出0xff。

2023-11-10 21:08:12 1732 4

原创 软件模拟SPI协议的理解和使用编写W25Q64

SPI协议中,NSS、SCK、MOSI由主机产生,MISO由从机产生,在SCK每个时钟周期MOSI、MISO传输一位数据,,所以读写数据也可以视作交换数据。所以读写时对数据位的控制都是用同一个函数即可。如上图所示:初始状态下,然后读/写数据状态时。

2023-11-10 20:53:17 773

原创 CAN总线协议的理解以及移植stm32代码并使用

@*名称 : hal_CAN_GPIO_Config*@*功能 : CAN的引脚口(PB8R/9T)*@*形参 : 无*@*返回值 : 无在以上函数中我打开了两个接收FIFO,希望能一次性接收6个CAN的报文,但在实际实验中,连续发送6个报文,只能接收3个成功。查了好久的原因还是没有解决该问题,如果有大佬知道为什么,希望能帮我解惑。

2023-11-09 19:55:05 933

原创 linux使用线程函数时报错

先检查头文件有没有定义再检查编译时是否链接好了线程库如如果都没问题的话,看这篇。

2023-10-26 15:38:22 516

原创 VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools

我的问题出现原因是,安装ubuntn虚拟机的时候VMware tools没有安装好,需要重新安装,但安装选项是暗的,不能操作。类似这种情况,虚拟机开启时也是,因为我虚拟机已经装好了,开启时是亮的,所以我在挂起时截的图。如果虚拟机开启的时候是亮的直接点击使用就好了。直接跳到第二步就好了。

2023-10-26 11:34:15 5566 2

原创 linux网络编程

libcurl库:支持跨平台的网络协议库开发。

2023-10-07 18:58:02 146

原创 HTTP、TCP、SOCKET三者之间区别和原理

SYN和FINACK两者在请求和确认时有标志数据seq和ask,两者通用:seq为请求携带的标志数据,ask为确认的标志数据,ask=上一个seq+1。

2023-09-23 19:12:02 297

原创 树莓派通过usart串口与ch340的电脑通讯

在文件末尾加入在关闭串口调试,打开硬件串口进入树莓派设置页面选择Interfacing Options ->Serial ->no -> yes到这里我们的串口引脚就可以正常接收、输出数据了。

2023-09-23 11:36:26 325

原创 【树莓派4b】移植内核后不能连接上wifi。

之前我在树莓派登录时网络登录的小结,总结了没有wlan0的解决方法,查看rfkill,并关闭rfkill来解决。实现是发现重启树莓派后,报错1没了,但没连接上wifi,所以我们发现了错误3。进入/lib/modules//目录,运行sudo depmod。这两个报错是一个原因的,但发现有先后过程,所以我就分开来了。所以我找到了方法2一劳永逸的方法。所以之前的方法行不通。

2023-09-08 21:45:40 813

原创 Linux内核结构框架和驱动管理

owner = THIS_MODULE, //前缀.为单独提取该结构体类型中的其中一个元素进行操作.write = pin4_write, //函数指针,为我们定义的驱动函数我们需要先定义一个自定义的设备驱动函数,在file_operation类型的结构体中注册。

2023-09-05 10:10:13 151

原创 【树莓派4B】linux内核配置+编译+挂载

驱动代码的编写需要一个提前编译好的内核,所以烧入树莓派的linux内核需要提前配置。

2023-08-30 16:10:07 764

原创 ubuntu下载gcc8-3-0,make后的【recipe for target ‘***‘ failed】错误解决方法

在我根据进行安装到make完后,输入make install命令行时出现错误:并且解决过程中根据下载了不同依靠等东西,该xxx是有变化的。

2023-08-04 17:34:23 2073

原创 【树莓派4b】从刷机到(串口、网络、图形)三个登录方法(匹配树莓派4b,网上找到的资源大多数是3b)(解决了刷机后串口没反应,登录密码错误,网络连接不上等问题)

单纯看网上的资料太零碎,而且大部分没特定为树莓派4b的资源,都不适合树莓派4b操作,所以写了这个文章,解决了刷机后串口没反应,登录密码错误,网络连接不上等问题

2023-07-29 21:20:25 527

原创 VMware下网络连接桥接模式显示:主机已没有未桥接的主机网络适配器

VMware下网络连接桥接模式显示:主机已没有未桥接的主机网络适配器这种情况下一般是之前有将VMware虚拟机卸载后,没卸载干净导致的的网络连接失败。(我就是因为卸载VMware时只是删除了安装目录的文件,遗留了其他在c盘的文件,导致网络连接失败)写下这篇博客,为了记录一下我的解决过程,也想给与我有相同经历的朋友一个参考,我解决这个问题耗时两天查找了多篇博客,相当于一个问题总结给大家。

2023-07-27 17:26:39 4345

原创 linux操作系统下的静态库与动态库

先将我们需要包装为静态库的.c文件转换成.o文件,然后在转换成lib开头.a文件。该.a文件即为我们需要的静态库文件(后续文件名用name来代替)

2023-07-22 21:30:30 107

原创 linux下socket网络编程的学习过程

1.创建套接字(api:socket)2.为套接字添加信息(ip地址和端口)(api:bind)3.监听网络连接(api:listen)4.监听到有客户端接入,连接该客户端(api:accept)5.数据交互(api:read、wriet)6.关闭套接字,断开连接(api:colse)

2023-07-21 14:13:39 115

原创 信号量控制进程间时序

信号量相当于一个钥匙,当钥匙存在(信号量创建)时,进程的运行将需要取到钥匙才能运行(p操作),进程取走钥匙后需要放回钥匙(v操作)其他进程才能,取到钥匙,否则其他进程会死等到取到钥匙。信号量是以信号量集存在的,所以一下api操作是针对信号量集的操作。

2023-07-15 17:24:40 133

原创 C语言线程pthread操作

因为系统不能确定线程1线程2哪个先运行所以我们用互斥锁来规范运行次序,而且当线程二先运行时,我们运行一次就开关一次互斥锁,则线程1就可以达到我们需要的效果。进程之间拥有自己独立的内存空间,一个进程死掉后不会对其他进程产生影响,而线程只有自己的堆栈和局部变量的地址空间,一个线程死掉对于整个线程死掉。第四个参数为传入创建线程的参数的地址,一个参数既取变量地址即可,多个参数可以将其变为结构体或字符串等再将其地址传入。进程是程序执行的实例,进程是线程的容器,一个进程中的多个线程共用一个地址空间。

2023-07-15 15:47:34 927

原创 基于openmv识别红色小球代码

主要内容分为两部分,1.颜色识别 2.噪点滤波。

2023-07-14 09:06:15 1379

原创 基于加速度传感器计算位置信息的学习过程

一下内容是对这篇文章的解读原文解释:这个校准程序移除了加速度传感器的输出偏移分量,因为存在重力加速度(静态的加速度)。校准程序在加速度计处于无运动状态时,对加速度求平均值。采样的数量越多,加速度的校准结果越精确。理解解读:在do-while循环中进行对sstatex的累加,累加完0x0400(1024次)后,用>>10位的方式进行取平均值,左移10位和除以1024是等价的,之前一直不理解这一步的取均值在哪。原文解释:低通滤波是消除加速度计中信号噪音(包括机械的和电子的)很好的方法。

2023-05-23 11:07:53 1124

原创 烧录esp8266-01、-01s,错误总结

历时两天我终于将esp8266的at固件烧录完成了,我是把坑给踩满了,首先我说说我遇到的两大类问题:1.点击state一直在等待上电同步2.检测到单片机开始下载后,没下载完显示错误。

2023-05-16 14:21:38 11697 31

原创 linux中的进程间通讯

单机通讯:FIFO,命名全双工通道,消息队列,信号,共享存储联网通讯:STREAMS(嵌套字),socket。

2023-05-10 18:35:31 165

原创 Linux环境下的文件管理函数

linux的库中调用的函数:read(),write(),open(),close(),lseek();调用头文件:#include 和 #include 和#include

2023-05-04 21:02:49 198

原创 Linux中报错segmentation fault

我在写一个char *readBuf = NULL;后直接调用*readBuf = a;然后就报了segmentation fault 的错误,通过看别人的博客后,发现是因为我的这个指针还是野指针,所以直接赋值的话会直接内存溢出/泄露。泄露/溢出: 当一个进程执行一个无效的内存引用,或发生断错误时,会触发 SIGSEGV信号,内核默认的动作就是 终止该进程。我们可以在定义完readBuf后,给指针开辟一个空间,用malloc开辟。size为我需要空间能存放多少字节。我今天就遇到了该问题。

2023-05-04 20:30:50 714

原创 基于linux的贪吃蛇项目开发

项目由五个模块实现。0.主函数对curses的初始化,1.地图的扫描,2.贪吃蛇身体的定义,3.双线程对按键进行获取且转弯,4.食物随机出现与让贪吃蛇长长的机制。我们定义贪吃蛇身体的代码是用链表将他的身体连接起来,然后通过链表尾加一个和链表头减一个实现贪吃蛇的运动。为什么要用那么反人类的尾加一前进呢,因为当我们如果要链表尾减一我们要遍历链表到尾的上一个进行,将尾的上一个的->next=NULL;

2023-04-27 21:14:12 401

原创 C语言.指针部分学习(一级二级指针变量作为参数在函数中的的意义与功能)

首先的首先要提一下之前让我在指针学习中非常混乱的东西:指针的定义char *a,其实是(char *)a;这样子的,实际上定义的只有一个名字为a的存放地址数据的变量。(可能我悟性不好,搞了好久才搞明白)在传入的值需要修改时,或者需要进行地址偏移来遍历数据但不需要改变原地址时,我们得用一级指针。(相当于用取地址中的值的方式直接对地址修改)

2023-04-11 20:32:51 212

原创 AD20学习笔记:规则、快捷键等设置方法

目录绘线(具有电气特性、不具有电气特性),连线的状态改变,网络标识的特殊表示方法,文本框放置,批量注释元器件,查找相同元器件,元器件镜像快捷键 ,自制元器件修改管脚pin,注释位置改变,输入输出端口,总线,原理图封装,调整网格大小,放置网格,单位切换,封装库与元器件库联系的修改,管脚特性,整体标号。​编辑pcb设计:调取原理图中的所有元器件,层级名称,框选作图范围,元器件旋转,镜像,自动布线规则布线完成后的完善工作:泪滴,敷桶,修改多个元器件参数,布线规则定义 (线宽,安全间距,敷铜时的过孔规则),挖槽,导

2023-04-11 11:11:49 1135

原创 基于VMwareWorkstation运行ubuntu虚拟机的文件共享与虚拟网络配置

虚拟机网络编译器>>选择现有桥接模式虚拟网卡/添加网络>>选择桥接模式>>选择桥接到(选择硬件通道)(无线网络/有线网络)>>设置整个虚拟机网络适配器>>选择桥接模式。但如果是一些如百度云阿里云服务器这样的虚拟机,则如果需要共享文件只能使用ftp方式在有网络的情况下实行ip地址间的数据传输。虚拟机的网络有三种模式:1.桥接模式(Bridged)2.网络地址转换模式(NAT)3.仅主机模式(Host-Only)文件共享方式有三种:1.拖拽。在虚拟机设置>>选项>>共享文件夹>>总是启用>>添加>>确定。

2023-04-11 09:46:59 646

原创 基于VMwareWorkstation运行ubuntu虚拟机的操作键

退出VI模式并保存代码:在命令行模式下输入 ‘:’+w+q(w:保存,q:退出)输入模式:该模式下底部会有INSERT的提示,在命令行模式下按i进入该模式。重命名文件:mv a.c b.c (将a.c文件重命名为b.c)编译c文件:gcc ‘文件名.c’ -o '编译完的文件的文件名'将所有的c代码剪切到指定文件夹下:mv *.c +‘文件夹名’终端窗口字体放大:Ctrl + Shift + ‘+’把b.c拷贝成新的文件c.c:cp b.c c.c。VI模式:两种模式:命令行模式和输入模式。

2023-04-10 20:51:53 2914 1

原创 初识PID算法

PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。按白话来说就是一个控制精细、误差小的数据时使用的一种算法。上式的一堆公式让人看起来非常头疼非常不易理解,其实我们将上式分为三个部分来改变最终控制情况即可。分别是比例积分和微分的控制。

2023-04-04 21:41:01 109

原创 基于JSON库转换数据后数据传输出现未知错误时的debug

我在学习涂鸦云平台的wifi模块使用时,用的是平台提供的mcu_mdk,在移植完mdk后发现并不能与wifi模块正常通讯,后来发现是该硬件mdk库用了JSON库来转换要发送的数据,而JSON需要大量的堆和栈才能正常运行,stm32f103的启动文件中定义的堆栈空间完全不足以支持JSON运行。在如下图中修改stack_size为栈的大小,Heap_size为堆的大小。所以我们需要在启动文件中找到堆栈的定义函数,然后修改为0x0800即可。JSON库是一种轻量级的数据交换格式,特点是容易阅读和编写。

2023-04-04 21:08:10 125

原创 对涂鸦云平台所购买的wifi模块移植连入涂鸦云平台

用mcu_get_wifi_work_state()获取ap配网的实时进度,根据需求对不同进度作出不同效果。然后在手机上先连好自家wifi,到app中输入该wifi的名称密码,然后连接涂鸦云wifi模块的热点,等待配对成功即可。* - WIFI_NOT_CONNECTED: WIFI配置成功但未连上路由器。* - WIFI_CONN_CLOUD: WIFI已经连接上云服务器。先调用mcu_set_wifi_mode(1)进入smartconfig模式。

2023-04-04 20:55:19 988

原创 C语言.指针部分知识(函数指针)

让代码更有序,方便修改和移植,如果未来需要将这个项目的这一模块移植到别的项目上,这就直接在需要调用的函数/模块中调用指针的赋值函数就好了,不需要修改这个模块的代码。可作为变量输入函数:int Wud(int a,int b,(*p)(int,int) ){ (*p)(a,b);用法:p=‘函数名’ //p可当做‘函数名’的函数用(例: (*p)(a,b) )用做一个回调函数,相当于传递hal层数据到app层的函数调用。例:int (*p)(int a,int b);

2023-03-28 17:54:06 156

原创 stm32f4的systick定时器延时函数

本文参考 如有侵权请联系删除参考代码是正点原子的ov2640的摄像头例程代码。

2023-03-27 18:23:10 492

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除