- 博客(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
原创 【C语言】计算实时太阳角度(高度角、方位角),以及使用stm32单片机实时获取时间戳
在编写该代码的过程中寻找了多篇博文和论文,综合所有文章且按网上的以0时的方位角的0°,且随时间累加累加至360度。我修改了博文和论文的一些角度的计算方法。得到一下代码。
2023-11-22 19:49:08
2066
3
原创 软件模拟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
原创 VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools
我的问题出现原因是,安装ubuntn虚拟机的时候VMware tools没有安装好,需要重新安装,但安装选项是暗的,不能操作。类似这种情况,虚拟机开启时也是,因为我虚拟机已经装好了,开启时是亮的,所以我在挂起时截的图。如果虚拟机开启的时候是亮的直接点击使用就好了。直接跳到第二步就好了。
2023-10-26 11:34:15
5566
2
原创 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
原创 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
原创 基于加速度传感器计算位置信息的学习过程
一下内容是对这篇文章的解读原文解释:这个校准程序移除了加速度传感器的输出偏移分量,因为存在重力加速度(静态的加速度)。校准程序在加速度计处于无运动状态时,对加速度求平均值。采样的数量越多,加速度的校准结果越精确。理解解读:在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环境下的文件管理函数
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
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人