自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 .c文件怎么变成可执行的应用程序的?

注意:之所以不是按照先生成a.o再b.o再链接,是因为这样的话如果a.c和b.c文件同时被改动Makefile里面只执行生成a.o文件而不执行生成b.o文件(实测),更不会生成新的test程序。如果.c文件个数较少,重新处理多个文件不会对系统造成太大的负担,但是如果文件数量过大,只改动一个文件,但是编译却要全部动一遍,将造成不必要的资源浪费,至此有以下解决方案。先把所有文件输出成.o文件,最后再链接起来,因为上文所说的“所有.c文件都被动一遍”是在链接的时候做的。如果同时编译多个文件,一般用到的指令是。

2023-10-07 09:41:06 259

原创 设备树的理解与运用

传统的平台总线设备通过platform_device这一个结构体来描述,每个platform_device描述一个特定的外设,通过注册到平台总线上以保证内核和设备之间能通讯。本质是一个文件,包含很多节点,每个节点里边是对设备属性的描述(包括GPIO,时钟,中断等等),其中节点(node)和属性(property)就是设备上=树最重要的两个概念。例如,对于一个使用两个 32 位(4 字节)整数表示地址的设备,可以在设备树的根节点。DTS:设备树源文件,可由我们直接编写,包含设备的结构,属性和连接关系。

2023-09-15 14:52:12 466

原创 荧光免疫层析检测卡自动识读系统

DIR引脚控制电机的运行方向,EN引脚控制电机开关,上面代码在GPIO.h里面使用了宏定义,具体因板子而异。按下按键2电机反方向运动(采用手动拉高拉低引脚来给脉冲,不用定时器),当碰到按键3(PB1),也就是IR2时复位。使用USART2,配置串口波特率为9600,8位数据位,1位停止位,无奇偶校验位。来回扫描检测卡,按下按键2,电机往反方向前进,过程中会触碰到按键3,当按键3被按下。USART3----------->荧光信号ADC采集。USART1----------->数据发送至终端。

2023-09-13 15:02:19 196

原创 QT基于TCP协议实现数据传输以及波形绘制——安卓APP及Windows程序双版本

这个槽函数的作用是:根据IP地址栏和端口号栏的输入信息,判断是否有效以后,根据提供的IP地址和端口号开启监听,并通过connect函数开启一个TCP server,如果连接客户端成功则转到另外一个槽函数TCPnewconnect_slot(),并且输出“连接成功”的信息。这个槽函数收到客户端发送的数据以后,再跳转到TCPreadyread_slot()槽函数,这个槽函数是数据处理这块的,我到第四大点的时候再详细讲。这个槽函数是断开对客户端的监听和连接,断开各种信号与相应槽函数的连接,关闭服务器。

2023-07-27 21:36:04 1355 3

原创 正点原子F4HAL库串口中断再解读

void USART1_IRQHandler(void) 中断服务函数和voidHAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)回调函数进行了最后一步(7)void HAL_UART_MspInit(UART_HandleTypeDef *huart) 这个函数进行了(1)、(2)、(3)、(5)中的使能中断。但是对于中断服务这块,HAL库的处理效率低,步骤繁琐,正点原子官方推出另外一个中断处理程序。,使能中断(如果需要开启中断才需要这个步骤)。

2023-06-22 12:02:57 1150 2

原创 进程和线程的区别——M

同一个进程下的线程可以共享该进程的内存资源和地址空间,同时每个线程运行栈和程序计数器。所以进程间的切换需要的开销要比线程大。进程可包含多个线程,意味着一个线程崩溃不会造成进程崩溃,但是如果进程崩溃,那它所包含的线程会受到牵连而崩溃。进程是计算机内存分配的基本单元,进程是任务调度和执行的最小单位。进程具有独立的地址空间和资源空间,

2023-06-09 10:26:35 70

原创 stm32F4,ESP8266调试记录

STM32这边用到的东西,两个串口,串口用来打印信息,串口2用来连接esp8266,我还配置了两个灯,用来反馈是否能接收到8266发送的数据,串口2需要配置中断。STA模式是指设备模式,可以比喻成8266就是一台手机,可以连接其他手机的热点或者WiFi配合服务端进行工作。需要了解一个知识点:8266的三种工作模式,AP、STA、双模。拿到8266模块,先用usb转ttl模块来进行有线指令调试。第二步:用STM32F4来使用这个模块(sta模式下)AP是作为路由器让手机或电脑进行连接,类似于手机热点。

2023-05-27 19:27:54 408

原创 2023电赛备赛——AD7606模块使用记录

1、Range: 模拟输入电压范围0/1(0代表范围是+-5V,1代表范围是+-10V),默认5V。2、OS(0:2):过采样设置 三个引脚,根据自己需求接就好,不同组合代表不同过采样率。本文内容分为三个部分,只讲运用,基础知识不懂请移步别处补上。这个模块的介绍就不说了,用下来最大的感受就是线有点多。上面是大体的,主要是模块与STM32F4的连接。分别接0V,3.3V,5V电压采集出来的数据。由于我用的是串行模式,所以下面是串行的接法。我用了+-10v的范围,接PB4。

2023-05-05 18:53:23 1037 1

原创 TCP/IP三次握手和四次挥手

因为服务端一般会连接多个客户端,而每次只能处理来自一个客户端的报文,所以一般客户端发来FIN=1的报文时,服务端会先给客户端ACK=1的报文,等处理完上一个客户端的请求以后·再发送FIN=1报文表示允许断开。服务端接收到报文后发送ACK=1报文,表示接收成功,并且发送序号seq(2)和确认序号ack=seq(1)+1。客户端接收到服务端报文,再向服务发送ACK=1B报文和确认序号ack=seq(2)+1。服务端·接受到客户端的信息,发送ACK=1报文,再发送FIN=1报文(二、三次)

2023-03-18 12:36:40 427

原创 OSI(七层)网络模型

作为嵌入式开发,只要了解常用的网络协议是属于哪个层级的就好,常见的网络协议有http、https、TCP\DAP、IP、sockets。实质上是网络的通讯框架,类似于串口的奇偶校验位、数据位等,是全球网络通讯的标准框架。互联网络的工业标准——TCP\IP协议就只是用到了3—5层。这是一个四层的模型,在七层网络模型的基础上进行了一定的裁剪。一般·而言,七层网络模型不会用到七层,应用层:http、https。会话层:sockets。传输层:TCP、UDP。

2023-03-18 11:39:45 111

原创 树莓派4b——通过mjpg-streamer使用摄像头

参考博文:(51条消息) 树莓派4b如何打开摄像头_树莓派打开摄像头_会飞的小东的博客-CSDN博客(51条消息) 树莓派4B (系统版本11,bullseye)更换清华源_树莓派更换清华源_ASSSSHION的博客-CSDN博客这个坑踩了我一星期,找各种办法都不行,找各路大佬都说是第一次遇到这种问题,写篇东西记录一下,能帮助到后面学习的人那最好了简单说说我遇到的几个问题吧:摄像头识别不到国内源不正确无法下载mjpg-streamer支持库文章从烧录的系统到配置到能在网页上使用摄像头全过程记录,我遇到问题部

2023-03-07 10:50:20 1456

原创 树莓派——智能家居工厂模式实现四个场景灯的控制

如上,对比上一篇的room,只需要在outting.c文件内把room改成outting就好了,再更改以下输出引脚号,最后把该设备的成链函数放到contrlDevices.h头文件内即可。如上,用树莓派基于工厂模式完成了四个场景灯的控制。

2023-02-24 12:15:31 244

原创 树莓派——智能家居第一步

主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有略微差异),火灾报警器,摄像头,人脸识别的锁(先实现这么多功能)、控制部分主要有语音控制和网络控制。业务代码采用工厂模式来编写,一个工厂代表一个结构体,结构体的具体对象可以有多种,这样代码更便于管理,代码部分主要包括两个工厂,多个设备和主函数。两个工厂分别是contrlDevices和socket工厂,每个工厂包括一个头文件(定义整个工厂的成员属性)和多个成员,然后通过主函数来调用。注:多个设备放到主函数上采用的是链表的形式。

2023-02-23 23:00:00 1506

原创 树莓派——刷机(耗时两天踩坑版)

这里费了半天的功夫,才把系统刷进来,一开始是用学习视频的镜像,后来用答疑老师给的,都不行!好家伙,在这里又磨蹭了一天,一开始配不成功,又不断的找新的方法,知道晚上快1点的时候才发现找到问题根源所在,network开不开。一开始配不成功,又不断的找新的方法,知道晚上快1点的时候才发现找到问题根源所在,network开不开。美滋滋登录上来,不想每次都串口登录,好麻烦,来配置一下网络吧,好家伙,在这里又磨蹭了一天。,将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。保存,会有提示是否写入。

2023-02-19 01:26:31 665

原创 全志H616——用C语言的形式操作数据库

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。通常用来获取最近调用的API接口返回的错误代码.

2023-02-11 00:07:02 510

原创 全志H616——安装SQlite库并使用常用的数据库操作指令

(把id号为1的数据删除)sqlite3 .db r/w这种方法需要在后面衔接.database才能创建成功。数据库语句不难,主要细心点别敲错就好,还有数据类型,char型要用''或""括起来。.database 查看正在运行的数据库信息。设置下载路径和编译指令的寻找方法:README.txt中。都是代表有该文件就打开,没有该文件就创建一个。安装:sudo make install。退出SQlite:ctr+z。

2023-02-09 23:35:34 370

原创 全志H616——通过udev实现与插入硬件的交互

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"//设备类型、环境变量、访问权限如果需要自动挂载U盘也同理,只需要在/etc/udev/rules.d/目录下添加规则即可/media/%k"//事件时添加硬件设备,usb类型设备,子设备是block,RUN代表运行指令。

2023-02-09 21:21:27 229

原创 linux——守护进程守护刷抖音程序不被意外退出

一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出。ps -elf:查看系统进程,一般为d结尾的就是守护进程(用户),带[]的表示内核的守护进程。守护进程和终端无关联,也就是他们没有控制终端,所以当控制终端退出,也不会导致守护进程退出。:找到守护进程的可执行文件路径(我的是/home/orangepi/tdamon)件设备的状态动态更新设备文件,包括设备文件的创建,删除等。守护进程是在后台运行,不会占着终端,终端可以执行其他命令。写个脚本来搜索刷抖音的程序。

2023-02-09 15:32:16 578

原创 全志H616——用wiringpi库封装自己的串口收发程序

如果要使用,需要在当前文件夹配套.h文件。

2023-02-07 17:41:41 246

原创 全志H616——通过语言来控制手机刷抖音

插入手机(记得在开发者选项中选择USB可调试状态),华为手机会提示充电还是传输文件还是传输照片,我们选择传输文件,因为Linux之上皆文件。adb shell input swipe 540 1300 540 500 100 向下滑动540是水平的,1300是竖直方向,下 是。设置好名字和语言以后设置输出模式,设置完B6,B7自动设置完成。插入之后重新dmesg,滑倒最下面会有这些关于你手机的信息。连线,类似于串口模块和单片机连接,T-R;正常情况下,敲打两次指令后是这样的。用的是智能公元的SU-03T。

2023-02-07 17:20:51 887

原创 全志H616——通过改变串口demo来收发数据

打开serial->新建一个线程用来发送数据(主程序用来收数据)

2023-02-05 22:23:28 146

原创 全志H616——基于oled_demo修改发送的数据

【代码】全志H616——基于oled_demo修改发送的数据。

2023-02-05 21:03:04 174

原创 一文了解I2C

发送器每发送一个8bit字节,就会释放数据线,并且由接收器接收应答信号,应答信号为0表示有效应答(ACK);以为起始信号,终止信号和应答信号都是SCL位于高电平时做出的动作,发送数据低电平才能转变的目的时为了防止I2C总线提前退出工作。选择到第几列,输入两次,都是配置低位,一共128列,最低为0x00,0x10;宽*高=8*16,宽代表列,高代表页,意思是需要8列2页(一页是8)所以需要用两页来分开显示一个字母A。以上在屏幕上显示的东西因为时保存在内存里的,所以都会保留在屏幕上,所以需要一个清屏函数。

2023-02-05 19:49:50 2892

原创 全志H616——通过定时器来实现舵机的转动

通过上一篇定时器的操作可以得知,一次定时时间为0.5ms,通过定义一个变量来计数定时了多少个周期,进而改变转动的角度。PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据。舵机需要一个接口输入PWM波形才能进行工作。

2023-02-04 23:37:56 294

原创 全志H616——Linux下定时器的定时器

ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。t_interval:计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置。ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。it_value:程序跑到这之后,多久启动定时器。

2023-02-04 23:01:17 417

原创 全志H616——超声波测距小实验

【代码】全志H616——超声波测距小实验。

2023-02-04 21:37:46 153

原创 一篇文章说清楚定时器

(以51单片机为例)

2023-02-04 20:30:55 232

原创 全志H616——刷机以及初步配置

命令接入网络 nmcli dev wifi connect TP-LINK_3E30 password 18650711783。格式化SD卡->连接号USB转TTL模块->(上电)写入镜像文件->输入初始账号密码(orangepi)命令扫描周围的WIFI热点 nmcli dev wifi。一波操作下来,就可以啦!ifconfig也可以。

2023-01-29 22:57:46 3626

原创 linux——网络编程实战

h代表host,n代表net,s代表short(两个字节),l代表long(4个字节),通过上面的4个函数可以实现主机字节序和网络字节序之间的转换。有时可以用INADDR_ANY,INADDR_ANY指定地址让操作系统自己获取。显而易见,相比服务端,客户端少了几个API,多了一个connet。需要先把字节序给调整一下,把主机的字节序调整为网络字节序。需要将主机的字符串型ip地址转换为网络的地址。

2023-01-26 22:00:54 412

原创 Linux——网络编程概述

Q:为什么要网络编程?A:进程间的通信是依赖于Linux内核的,只能适用于单机,而要实现联机,就要用网络编程,网络编程是面向多台设备间的通信。

2023-01-24 22:09:27 570

原创 linux——线程互斥量

假设有两把锁,一线程获取锁一以后想要获取锁二,但是锁二已经被二线程获取了,而且二线程获取锁二以后还要继续获取锁一的情况,这会导致两个线程都没法运行,造成死锁。如果一个线程被加锁,其他要运行的线程需要堵塞等待解锁,之后线程之间竞争抢锁。被锁住的线程可全部执行完,未加锁的线程不能干扰。记得在测试代码中添加结束符,不然会一直执行下去。

2023-01-24 21:45:37 107

原创 linux——线程操作

线程创建 记得编译的时候加-lpthread。

2023-01-21 00:16:40 82

原创 linux——高级信号

sigaction() 包含三个元素num,sigaction()函数,备份。siginfo,系统内部的结构体,可用指针引出来输出想要知道的信息。sa_flags,需要配置为:SA_SIGINFO才能获取信号。sa_handler,不需要配置,如果配置了则和普通信号一样。sa_sigaction,一个结构体,再额外配置传进来。sigaction是一个结构体,需额外配置再传进来。指针,空表示没有数据,非空表示有。备份直接忽略,代表不需要备份。sa_mask,阻塞,不配置。

2023-01-19 19:37:32 1581

原创 linux——信号

linux——信号

2023-01-18 21:25:14 68

原创 linux——消息队列的收发

【代码】linux——消息队列的收发。

2023-01-18 15:53:53 102

原创 linux——共享文件操作

系统建立IPC通讯(如。

2023-01-18 12:48:56 131

原创 linux进程之——全/半双工管道

单向执行,fd[0]为读,1为写。两者可同时操作同一个文件。

2023-01-17 00:55:10 238

原创 父进程等待子进程的退出

父进程等待子进程退出wait(&status)承接收集退出状态。父进程通过WEXITSTATUS(status)转换退出状态。退出状态与exit()括号内的值一致。父进程等待子进程退出。

2023-01-15 22:04:38 123

原创 vfork()和fork()的区别

vfork()和fork()的区别。

2023-01-14 23:04:37 92

原创 Linux——fork()创建一个新进程

结果代码。

2023-01-14 22:11:34 121

空空如也

空空如也

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

TA关注的人

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