自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些重要的(非常实用)操作

1.树莓派与window文件互传用FileZillaclient——>主机sftp://172.20.10.12(我的树莓派ip)用户名:pi 密码:raspberry快速连接就可以互传文件2.如何把编译生成的可执行文件下载到开发板scp xxx(文件名) pi@172.20.10.12:/home/pi//指令 开发板用户名@开发板地址:开发板绝对路径...

2021-07-31 14:45:05 185

原创 一些面试需要准备的——计算机网络

1.OSI网络模型、TCP/IP模型2.一些常用的协议(1)常见应用层协议:HTTP 端口号80 说明:超文本传输协议 HTTPS 端口号443 说明:HTTP+SSL,HTTP的安全版(https协议是在http与tcp之间多添加了一层,进行身份验证和数据加密)FTP 端口号20,,21,990 说明:文本传输协议(2)scoket在会话层(3)TCP、UDP在传输层3.一些关于TCP的知识点(1)TCP通信两端使用socket接口函数建立连接的流程(2)TCP建立连接——三

2021-04-28 20:17:43 243

原创 硬件模块的二次开发——YS-LDV7语音模块的二次开发

1.YS-LDV7语音模块:工作电压:5V通信方式:串口通信单片机型号:STC11L08XE2.源码修改:(1)使用 Keil uVision4 进行修改,打开 code:(2)main.c:(此处省略部分代码)#ifdef TEST //不执行测试命令则去掉 TESTPrintCom("一级口令:小杰\r\n"); /*text.....*/PrintCom("二级口令:1、代码测试\r\n"); /*text.....*/PrintCom(" 2、开发板验证\r\n"); /*

2021-04-15 20:47:15 701

原创 linux系统文件中转站(ftp服务)项目—实现在2台不同主机之间

(1)写项目需用到的知识点:1.linux系统编程:进程,文件,socket网络编程等2.C语言编程:函数调用、字符串函数、结构体等(2)一些比较陌生的函数调用:头文件:#include<stdio.h>定义函数:int fflush(FILE * stream);函数说明:fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中,如果参数stream为NULL,fflush()会将所有打开的文件数据更新。返回值:成功返回0,失败返回EOF,错误代码存于errno中

2021-04-15 12:02:46 772

原创 Linux系统编程

1.文件编程:(1)光标lseek():lseek();的返回值可用来计算文件大小lseek();光标位置移动(2)linux系统默认文件标识符fd = 0:标准输入(从键盘输入)fd = 1:标准输出(从键盘输出)fd = 2:标准错误(3)文件类型:静态文件:文件存储在磁盘中动态文件:open静态文件->内核产生linux内核结构体(4)写一个整数、结构体到文件:例:int data = 10;//结构体类似write(fd,&data,sizeof(dat

2021-04-11 19:15:56 137

原创 贪吃蛇——Linux环境下,基于Ncurse图形库的c语言的小游戏

1.一些关于ncurse的知识(1)使用ncurses原因:按键响应速度快(2)一些ncurse函数:initscr();//ncurse界面初始化函数printw();//在ncurse模式下的printfgetch();//等待用户输入,如果没有这句话程序就退出了,看不到运行结果endwin();//程序退出,调用函数来恢复shell终端的显示,如果没有这句话,shell终端会字乱码,坏掉keypad();//设置了可以从stdscr接收键盘的功能键(快捷键)//使用keypad(std

2021-04-03 14:42:53 260

原创 C语言概括总结

1.基础:(1)system函数:支配电脑干活函数调用system:运行window命令例:system(“ifconfig”);system("pause");//作用:等待用户输入,造成程序在输入之前不会结束(2)提高程序效率的方法:1.少用全局变量2.少用if3.少定义函数(3)各种类型的数的定义和打印:2.选择/判断语句:(1)死循环:while(1);for(;;);(2)一些选择语句的使用:if(判断){......}else{.....}if(判断

2021-03-30 15:07:43 310

原创 树莓派IO口驱动

1.地址(1)总线地址:CPU能够访问内存的范围现象:装了32位的win7系统,明明内存条8G,可是系统只能识别3.8G,装了64位,才能识别到8G(2)物理地址:硬件的实际地址或绝对地址(3)虚拟地址:逻辑(基于算法的地址(软件层面的地址,假))地址称为逻辑地址MMU的作用:将物理地址转化为虚拟地址2.寄存器翻阅【树莓派博通BCM2835芯片手册】第6章(89页):The GPIO has 41 registers. All accesses are assumed to be 32-bi

2021-03-23 09:58:34 297 1

原创 树莓派驱动框架

1.树莓派底层驱动框架:文件名为pin4driver.c#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h> //class devise声明

2021-03-21 14:36:42 143

原创 树莓派快速扩容

当树莓派默认的系统空间已经被占满,无法再进行安装等操作,而 SD卡仍有空间未被使用,可以对树莓派进行扩容假设一个镜像的大小为 4G,由于该镜像对内存卡的要求是大于或等于 4G,但对于 4G以上的内存卡来说,树莓派的系统只利用到 4G,因此才有了扩容这种操作扩容步骤:1.首先输入df -h命令可以看到,当前root分区总共只用了3.1G,而可用空间仅剩288M,但实际我们的内存是8G,所以可用空间理论不应该这么小,如下:pi@raspberrypi:~$ df -hFilesystem S

2021-03-20 20:14:18 1140

原创 Linux内核架构和Linux shell

应用程序(基础C加C库)通过函数库(C库),C库提供了应用程序支配内核干活的接口,虚拟文件系统和系统调用接口其实是重合的。下面我们以如何打开一个文件来说明具体的步骤——应用程序调用open,read,write这些函数(来自于C库),C库和系统调用接口打交道,系统调用接口可以操作底层的各种东西,可以做进程线程相关的东西,也可以访问各种不同的文件系统,我们在应用程序中调用open ,read ,write函数,在系统调用接口就会调用sys_open,sys_read ,sys_write,然后根据open,.

2021-03-20 19:05:21 115

原创 Linux文件系统目录结构——不是分区,和window不同

1.根目录目录功能/bin存放系统命令,普通用户和 root 都可以执行/boot存放系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等/dev存放设备文件/etc存放配置文件/home普通用户的主目录(家目录/lib/lost+found当系统意外崩溃或意外关机时,产生的一些文件碎片就会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,

2021-03-20 14:57:02 125

原创 树莓派配置Linux内核源码

驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置内核,配置的最终目标是生成 .config 文件,该文件指导 Makefile 去把有用东西组织成内核1.获取编译所需源码:点击进入树莓派官方网址所需文件:linux:内核源码,可以在branches下进行版本的选择。tools:编译内核和其他源码所需的工具——交叉编译器等。linux:tools:2.配置环境变量:(1)手动配置环境变量(临时):①获取当前环境变量的值:echo $PATH②获取交叉编译工具链所在路径:p

2021-03-20 13:42:51 237

原创 Linux内核源码目录树结构

文件功能arch包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)block部分块设备驱动程序crypto常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法Documentation关于内核各部分...

2021-03-18 19:24:19 107

原创 Source Insight的使用入门

注意:Source Insight 的工程中不能有中文路径!!!1.Source Insight 新建工程(1)点击Projetc中的New Project:(2)输入工程名,选择工程存放路径:(工程存放路径建议放在代码附近,便于查找)点击ok:(3)添加工程所需代码:工程建立完毕勾选此处列出工程文件:2.文件关联(1)点击(2).点击3.解决工程文件中出现中文乱码问题第一次使用 Source Insight,如果打开有中文的文件,可能会出现中文乱码,这是因为编码方式

2021-03-18 11:11:33 277

原创 树莓派交叉编译

1.什么是交叉编译编译:在一个平台上生成该平台上的可执行代码。交叉编译:在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。我们在 windows 上编写 C51 代码,并编译成可执行代码,如 xx.hex,是在 C51 上运行,而不是在windows 上运行。我们在 ubuntu 上编写树莓派的代码,并编译成可执行代码,如 a.out,是在树莓派上运行,不是在ubuntu linux上运行。2.为什么要交叉编译既然我

2021-03-17 19:20:37 294

原创 树莓派开发——串口通信

1.配置:初次使用树莓派串口编程,需要配置修改 cmdline.txt 文件:1.cd /boot/2.sudo vi cmdline.txt删除【】之间的部分:dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait修改 inittab 文件:1.cd /et

2021-03-17 14:31:15 167

原创 树莓派开发——超声波测距

1.模块介绍:HC-SR04 超声波模块:VCC:正极Trig:触发Echo:回应GND:负极(接地)**2.接线:Vcc:超声波模块电源脚,接5V电源Trig:接收来自树莓派的控制信号,接 GPIO 口Echo:发送测距结果给树莓派,接 GPIO 口(值得注意的是:Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此可以加一个分压电路)Gnd:接地,接 0v3.工作原理:1、树莓派向 Trig 发送一个持续 10us(微秒) 的脉冲

2021-03-17 13:41:11 909

原创 树莓派开发——继电器

1.继电器接口继电器驱动电压为 3.3v2.接线继电器正极接到树莓派 3.3v,继电器负极接到树莓派 0v,继电器 GPIO 口接到树莓派 GPIO 口接好后继电器灯亮起(绿灯灭断开,绿灯亮为闭合)3.代码实现#include <stdio.h>#include <wiringPi.h>#define GPIO7 7int main(){ int cmd; if(wiringPiSetup() == -1){ // 硬

2021-03-16 18:54:25 652

原创 树莓派的wiringPi库

wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等检查树莓派是否安装 wiringPi,在树莓派终端输入:gpio -v // 会在终端中输出相关 wiringPi 的信息,否则没有安装使用 gcc 编译器时需要添加库:gcc xxx.c -lwiringPiwiringPi常用的API:1.树莓派引脚图:gpio readall // 在树莓派终端输入指令查看树莓派 io 口引脚图 +-----+-----+---

2021-03-15 22:08:38 240

原创 Linux库

1.什么是库?库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamic

2021-03-15 18:49:26 86

原创 VIM更新到好用的版本——更新源

1.默认的源是国外的,apt-get安装的时候会失败,我们更新成国内的源2.备份源:sudo cp /etc/apt/sources.list /etc/apt/sources.list_back3.编辑sources.list打开终端 sudo nano /etc/apt/sources.list添加国内源(阿里源)(确定系统别名“lsb_release -a”命令查看系统的Code name,将buster字段改成相应的Code name即可)deb https://mirrors.aliy

2021-03-11 00:01:32 279

原创 树莓派开发文档笔记——基础配置

树莓派刷机1.将SD卡插入读卡器,然后将树莓派的系统镜像烧进去,可以去官网下载, 我是用win32Disklmager这个工具烧的,好像有别的工具,应该也可以。2.修改配置文件(1)打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。因为树莓派默认是蓝牙跟串口是绑定的,我们只需要只要串口来通信,所以把蓝牙解绑来停止对串口的占用。dtoverlay=pi3-miniuart-bt(2)修改根目录下的"cmdline.txt",将里面的内容替换成下面的内容。dwc_o

2021-03-07 22:39:07 176

原创 linux网络编程socket

一些关于网络编程的知识点:TCP连接发送的数据,无差错,不丢失,不重复,且按序到达UDP尽最大努力交付,既不保证可靠交付字节序:指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序常见序:Little endian小端字节序Big endian大端字节序网络字节序是大端字节序socket(建立一个socket通信):需要的头文件:#include <sys/types.h>#include <sys/socket.h>参数原型:int socket(in

2020-12-30 13:09:25 174

原创 linux线程——条件操作

pthread_cond_init(创建):需要的头文件:#include <pthread.h>参数原型:int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);cv:条件cattr:通常为NULL例如:pthread_cond_t cond;pthread_cond_init(&cond,NULL);返回值:成功返回0,其他任何值表示失败pthread_cond_destr

2020-12-29 13:19:52 245

原创 linux线程——互斥锁操作

pthread_mutex_init(创建):需要的头文件:#include <pthread.h>参数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);mutex:互斥锁mutexattr:PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP

2020-12-29 00:06:43 358

原创 Linux线程——线程操作

线程操作:使用线程的原因:1.它是一种非常“节俭”的多任务操作方式2.线程间方便的通信机制pthread_create(创建线程):需要的头文件:#include <pthread.h>参数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg));thread:为指向线程标识符的指针。attr:用来设置线程属性,

2020-12-27 23:56:59 134

原创 进程间通信(IPC)——信息量

一些关于信号量的概念:临界资源:一次仅允许一个进程使用的资源称临界资源。物理:输入机,打印机,磁带机等。软件有:消息缓冲队列,变量。P操作(拿锁):如果有可用资源(信号量值>0),则占用一个资源(给信号量值减去一,进入临界区代码);如果没有可用的资源(信号量值等于0),则被堵塞到,直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)V操作(放锁):如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程。如果没有进程等待它,则释放一个资源(给信号量值加一)semget(创建

2020-12-27 00:27:30 325

原创 进程间通信(IPC)——信号

关于信号的常用命令:kill -l:查看系统中所有的信号kill(传送信号给指定进程)需要的头文件:#include <sys/types.h>#include <signal.h>参数原型:int kill(pid_t pid, int sig);pid:要发送消息的进程号sig:信号例如:kill (pid,signum);返回值:成功返回0失败返回-1signal(设置信号处理方式)需要的头文件:#include <signal.h>

2020-12-23 14:15:07 138

原创 进程间通信(IPC)——共享内存

shmget(得到一个共享内存标识符或创建一个共享内存对象)需要的头文件:#include <sys/ipc.h>#include <sys/shm.h>参数原型:int shmget(key_t key, size_t size, int shmflg);key:共享内存的键值。通常通过ftok获取例如:key_t key;key = ftok(".",1);size:共享内存的大小,以M为单位,例如:1024*nshmflg:0:取共享内存标识符,若不存在则函

2020-12-22 13:18:47 460

原创 进程间通信(IPC)——消息队列

消息队列(互发):消息队列是消息的链接表,存放在内核中。一个消息队列由一个标识符(队列ID)来标识。消息队列API:msgget(创建或打开消息队列)需要的头文件:#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>参数原型:int msgget(key_t key, int msgflg);key:消息队列的键值,通常通过ftok获取例如:key_t key;key = ft

2020-12-21 23:16:12 476

原创 进程间通信(IPC)——管道

无名管道:1.数据只能在一个方向上流动2.管道数据,读走了就没了pipe(建立管道)需要的头文件:#include <unistd.h>参数原型:int pipe(int pipefd[2]);fd[0]:为管道的读取端fd[1]:为管道的写入端例如:pipe(fd)返回值:成功返回0,失败返回-1关闭管道,只需把两个文件描述符关闭即可。命名管道(单向):mkfifo(建立命名管道):需要的头文件:#include <sys/types.h>#i

2020-12-20 23:00:43 110

原创 linux进程-fork的使用以及 vfork的区别

fork(创建进程)pid(进程标识符):每个进程都有一个非负数表示的唯一的ID,叫做pid,类似身份证。需要的头文件:#include <unistd.h>参数原型:pid_t fork(void);例如:pid_t pid;pid = fork();返回值:如果出错,则fork()返回-1在子进程中,fork()返回0在父进程中,fork()返回正的子进程的PIDfork函数被调用一次,但返回值2次,两次返回值的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的

2020-12-19 16:24:23 1054 3

原创 文件操作篇——打开 读写 关闭操作

open(打开文件):需要的头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>参数原型: int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);pathname:要打开的文件名Flags:1.O_RDONLY:只读打开2.O_WRONL

2020-12-18 19:40:50 1342 5

空空如也

空空如也

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

TA关注的人

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