linux
八倍体123
这个作者很懒,什么都没留下…
展开
-
树莓派——智能家居第一步
主控我采用的是树莓派的4b4G版本,外设包括四个区域的灯(我的和上图有略微差异),火灾报警器,摄像头,人脸识别的锁(先实现这么多功能)、控制部分主要有语音控制和网络控制。业务代码采用工厂模式来编写,一个工厂代表一个结构体,结构体的具体对象可以有多种,这样代码更便于管理,代码部分主要包括两个工厂,多个设备和主函数。两个工厂分别是contrlDevices和socket工厂,每个工厂包括一个头文件(定义整个工厂的成员属性)和多个成员,然后通过主函数来调用。注:多个设备放到主函数上采用的是链表的形式。原创 2023-02-23 23:00:00 · 1494 阅读 · 0 评论 -
树莓派——刷机(耗时两天踩坑版)
这里费了半天的功夫,才把系统刷进来,一开始是用学习视频的镜像,后来用答疑老师给的,都不行!好家伙,在这里又磨蹭了一天,一开始配不成功,又不断的找新的方法,知道晚上快1点的时候才发现找到问题根源所在,network开不开。一开始配不成功,又不断的找新的方法,知道晚上快1点的时候才发现找到问题根源所在,network开不开。美滋滋登录上来,不想每次都串口登录,好麻烦,来配置一下网络吧,好家伙,在这里又磨蹭了一天。,将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。保存,会有提示是否写入。原创 2023-02-19 01:26:31 · 656 阅读 · 0 评论 -
全志H616——用C语言的形式操作数据库
该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。通常用来获取最近调用的API接口返回的错误代码.原创 2023-02-11 00:07:02 · 507 阅读 · 0 评论 -
全志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 · 225 阅读 · 0 评论 -
linux——守护进程守护刷抖音程序不被意外退出
一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出。ps -elf:查看系统进程,一般为d结尾的就是守护进程(用户),带[]的表示内核的守护进程。守护进程和终端无关联,也就是他们没有控制终端,所以当控制终端退出,也不会导致守护进程退出。:找到守护进程的可执行文件路径(我的是/home/orangepi/tdamon)件设备的状态动态更新设备文件,包括设备文件的创建,删除等。守护进程是在后台运行,不会占着终端,终端可以执行其他命令。写个脚本来搜索刷抖音的程序。原创 2023-02-09 15:32:16 · 571 阅读 · 0 评论 -
全志H616——通过改变串口demo来收发数据
打开serial->新建一个线程用来发送数据(主程序用来收数据)原创 2023-02-05 22:23:28 · 144 阅读 · 0 评论 -
全志H616——基于oled_demo修改发送的数据
【代码】全志H616——基于oled_demo修改发送的数据。原创 2023-02-05 21:03:04 · 173 阅读 · 0 评论 -
全志H616——通过定时器来实现舵机的转动
通过上一篇定时器的操作可以得知,一次定时时间为0.5ms,通过定义一个变量来计数定时了多少个周期,进而改变转动的角度。PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据。舵机需要一个接口输入PWM波形才能进行工作。原创 2023-02-04 23:37:56 · 291 阅读 · 0 评论 -
全志H616——Linux下定时器的定时器
ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。t_interval:计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置。ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。it_value:程序跑到这之后,多久启动定时器。原创 2023-02-04 23:01:17 · 412 阅读 · 0 评论 -
全志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 · 3581 阅读 · 0 评论 -
linux——网络编程实战
h代表host,n代表net,s代表short(两个字节),l代表long(4个字节),通过上面的4个函数可以实现主机字节序和网络字节序之间的转换。有时可以用INADDR_ANY,INADDR_ANY指定地址让操作系统自己获取。显而易见,相比服务端,客户端少了几个API,多了一个connet。需要先把字节序给调整一下,把主机的字节序调整为网络字节序。需要将主机的字符串型ip地址转换为网络的地址。原创 2023-01-26 22:00:54 · 409 阅读 · 0 评论 -
Linux——网络编程概述
Q:为什么要网络编程?A:进程间的通信是依赖于Linux内核的,只能适用于单机,而要实现联机,就要用网络编程,网络编程是面向多台设备间的通信。原创 2023-01-24 22:09:27 · 568 阅读 · 0 评论 -
linux——线程互斥量
假设有两把锁,一线程获取锁一以后想要获取锁二,但是锁二已经被二线程获取了,而且二线程获取锁二以后还要继续获取锁一的情况,这会导致两个线程都没法运行,造成死锁。如果一个线程被加锁,其他要运行的线程需要堵塞等待解锁,之后线程之间竞争抢锁。被锁住的线程可全部执行完,未加锁的线程不能干扰。记得在测试代码中添加结束符,不然会一直执行下去。原创 2023-01-24 21:45:37 · 106 阅读 · 0 评论 -
linux——线程操作
线程创建 记得编译的时候加-lpthread。原创 2023-01-21 00:16:40 · 80 阅读 · 0 评论 -
linux——高级信号
sigaction() 包含三个元素num,sigaction()函数,备份。siginfo,系统内部的结构体,可用指针引出来输出想要知道的信息。sa_flags,需要配置为:SA_SIGINFO才能获取信号。sa_handler,不需要配置,如果配置了则和普通信号一样。sa_sigaction,一个结构体,再额外配置传进来。sigaction是一个结构体,需额外配置再传进来。指针,空表示没有数据,非空表示有。备份直接忽略,代表不需要备份。sa_mask,阻塞,不配置。原创 2023-01-19 19:37:32 · 1579 阅读 · 0 评论 -
linux——信号
linux——信号原创 2023-01-18 21:25:14 · 66 阅读 · 0 评论 -
linux——消息队列的收发
【代码】linux——消息队列的收发。原创 2023-01-18 15:53:53 · 100 阅读 · 0 评论 -
linux——共享文件操作
系统建立IPC通讯(如。原创 2023-01-18 12:48:56 · 127 阅读 · 0 评论 -
linux进程之——全/半双工管道
单向执行,fd[0]为读,1为写。两者可同时操作同一个文件。原创 2023-01-17 00:55:10 · 235 阅读 · 0 评论 -
父进程等待子进程的退出
父进程等待子进程退出wait(&status)承接收集退出状态。父进程通过WEXITSTATUS(status)转换退出状态。退出状态与exit()括号内的值一致。父进程等待子进程退出。原创 2023-01-15 22:04:38 · 121 阅读 · 0 评论 -
vfork()和fork()的区别
vfork()和fork()的区别。原创 2023-01-14 23:04:37 · 90 阅读 · 0 评论 -
Linux——fork()创建一个新进程
结果代码。原创 2023-01-14 22:11:34 · 117 阅读 · 0 评论 -
vi编辑器下打开,编写,读文件以及修改文件
SET代表原点,CUR代表当前位置,END代表尾部,off_t offset是光标偏移个数,+代表向后,-代表向前。read()的返回值和size_count中输入的值无关,它是一个固定值,下图中n_write是确定已知的。因为读的动作是从光标所在位置往后,所以在读之前要先把光标移动到字符串前或者关闭再打开文件。原创 2023-01-12 23:40:27 · 534 阅读 · 0 评论 -
fopen()和open()的区别
由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式操作。如果从文件IO的角度来看,前者属于低级IO函数,后者属于高级IO函数。转载 2023-01-12 23:34:50 · 129 阅读 · 0 评论 -
Linux的vi编辑器下的常用命令
命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外两种模式,同时无论在任何模式下只要按一下[Esc]键都可以返回命令模式。如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc。如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。末行模式:在命令模式输入“:”即可进入该模式,在末行模式中有好多好用的命令。(1)选定文本块,使用v进入可视模式;转载 2023-01-10 16:14:29 · 465 阅读 · 0 评论