自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程控制互斥锁与信号量

1.多线程编临界资源访问#define _GNU_SOURCE #include <pthread.h>#include <stdio.h>#include <unistd.h>#include <errno.h>int Num = 0;void *fun1(void *arg){ while(Num<3){ Num++; printf("%s :Num =

2020-11-16 16:13:50 3

原创 多线程创建、退出与回收

1.在程序中,可以通过函数,pthread_self,来返回当前线程的线程号,例程1给出了打印线程tid号获取线程号#include <pthread.h>pthread_t pthread_self(void);成功:返回线程号#include <stdio.h>#include <pthread.h>int main(){ pthread_t tid = pthread_self(); printf("tid = %ld

2020-11-16 13:56:22 5

原创 UDP编程

服务端代码:#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include <time.h>#in...

2020-11-15 18:01:15 4

原创 读老文件到新文件

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>int main(int argc,char **argv){ int fd_old,fd_new; char buf[1024]; int len; /* 1. 判断参数 */

2020-11-15 10:57:10 8

原创 设置环境变量PATH

1.如果不想设置环境变量echo $PATHsudo cp hello /usr/local/bin/hello2hello22.临时设置环境变量(只对当前终端有效)cp hello /home/book/export PATH= $PATH:/home/book3.永久设置方法(对当前用户有效)修改~/.bashrc vi ~/.bashrc在行尾添加: export PATH=$PATH:/home/book然后重启系统或重新登录4.永..

2020-11-14 13:43:47 7

原创 Makefile规则与示例

1.Makefiletest : main.c sub.c sub.hgcc -o tset main.c sub.c2.Makefiletest : main.o sub.ogcc -o test main.o sub.cmain.o : main.cgcc -c -o main.o main.csub.o : sub.cgcc -c -o sub.o sub.cclean:rm *.o test -f执行:make make clean3.Makefiletest ..

2020-11-13 10:21:55 8

原创 linux常用的压缩命令

2020-11-12 13:43:04 5

原创 linux进阶命令

2020-11-11 21:39:48 4

原创 vi常用命令

:%s/p1/p2/gc 全局替换 替换需确认 n下一个:%s/p1/p2/g

2020-11-11 21:07:17 10

原创 基于Wemos的wifi避障小车

#include <ESP8266WiFi.h>#define Dong1 D6#define Dong2 D7#define Zhuan1 D4#define Zhuan2 D5#define Echo D2#define Trig D8char* ssid = "HONOR9X"; //“wifi热点名称”char* passwd = "qwejklbnm"; //”wifi热点密码”int port

2020-11-10 18:37:35 18

原创 Linux内核配置环境变量

一、概述树莓派的github主页:https://github.com/raspberrypi,里面包含了linux源码、交叉编译工具链等内容。对于我们要用到的有两个仓库:https://github.com/raspberrypi/linux 内核源码https://github.com/raspberrypi/tools 交叉编译工具链(仅在交叉编译时用到)注:1、树莓派里安装的系统镜像版本要和kernel代码对应。因为树莓派系统是在不断开发和升级的,如果你的树莓派使用的是某个时间的系统镜像

2020-10-19 12:25:30 30

原创 Linux静态库、动态库的生成和使用

当要把程序给别人,但不想让他看到原代码的时候,可以将程序编译成“库”发给他。相当于对程序进行了加密,别人可以使用,但看不到里面的内容。一、静态库与动态库?①.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。②.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。静态库优点:1.静态库被打包到应用程序中加载速度快2.发布程序无需提供静态库,因为已经在app中,移植方便缺点:1.链接时完整地拷贝至可执行文件中,被多次使用

2020-10-18 23:04:48 9

转载 基于Linux的FTP文件传输项目(类似百度云)

项目功能一、服务端1.定义命令宏2.命令转换3.服务端的网络编程4.实现LS,PWD功能5.实现GET功能6.实现PUT功能7.实现CD,QUIT功能二、客户端1.实现LS,PWD,CD,GET功能2.实现PUT功能3.实现LLS,LCD,QUIT功能4.打印服务端的数据三.整体项目代码一、服务端1.定义命令宏首先我们先创建一个config.h文件,用于存放我们将要输入的命令#define LS 0#define PWD 1#define GET

2020-10-12 10:56:14 30

原创 基于Wemos的智能感应开盖垃圾桶

#include <Servo.h>#define DuoPIN D5Servo myDuoJi;#define Echo D2#define Trig D8long getTime(){ digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); return pulseIn(Echo,HIGH); }void initChaoShengBo(){

2020-10-09 13:13:54 62

原创 链表添加/遍历/统计/查找/插入/删除算法实现

#include <stdio.h>#include <stdlib.h> struct Test { int data; struct Test *next; }; struct Test* insertFromfor(struct Test *head,int data,struct Test *new) {

2020-10-05 17:36:40 23

原创 链表动态创建之头/尾插法

实现代码:#include <stdio.h>#include <stdlib.h>struct Test{ int data; struct Test *next;};int printLink(struct Test *head){ struct Test *point; point = head; whi

2020-10-05 17:21:10 20

转载 Vmware虚拟机三种网络模式详解

原文来自:https://www.cnblogs.com/linjiaxin/p/6476480.html

2020-10-05 08:52:17 34

原创 树莓派IO操控代码编程

我们在编写驱动程序的时候,IO空间的起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址应该是从0x3f200000开始的,然后在这个基础上进行Linux系统的MMU内存虚拟化管理,映射到虚拟地址上。特别注意,BCM2708 和BCM2709 IO起始地址不同,BCM2708是0x20000000,BCM2709是0x3f000000,这是造成大部分人驱动出现“段错误”的原因。树莓派3B的CPU为BCM2709。驱动代码:#include <linu.

2020-10-04 12:59:33 36

原创 微机总线地址物理地址虚拟地址介绍

地址总线:(Address Bus)是一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为216=64KB,16位微型机的地址总线为20位,其可寻址空间为220=1MB。一般来说,若地址总线为n位,则可寻址空间为2^n位。简单来说 就是cpu能访问内存的范围。现象 : 装了32的win7系统,明明内存条8g,可是系统只是别3.8g ,装了

2020-10-04 08:40:49 7

原创 树莓派高阶课程--基于框架编写驱动代码以及编译和测试

pin4test.c#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>int main(){ int fd; fd = open("/dev/pin4",O_RDWR); if(fd<0) { printf("open failed\n");

2020-10-04 00:55:20 22

原创 树莓派高阶课程--驱动认知

2020-10-03 17:46:24 7

原创 树莓派高阶课程--Linux内核结构介绍

Linux Shellshell是系统的用户界面,提供了了用户与内核进行交互操作的一种接口。它接受用户输入的命令并把它送入内核去执行,是一个命令解释器。如下图所示,Linux内核只是Linux操作系统一部分。对下,它管理系统的所有硬件设备;对上,它通过系统调用,向Library Routine(例如C库)或者其它应用程序提供接口。因此,其核心功能就是:管理硬件设备,供应用程序使用。...

2020-10-03 17:22:12 6

原创 文件系统

1、 什么是文件系统?文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统的功能:文件系统的功能包括:管理和调度文件的存储空间,提供文件的逻辑结构、物理结构和存储方法;实现文件从标识到实际地址的映射,实现文件的控制操作和存取操作,实现文件信息的共享并提供可靠的文件保密和保护措施,提供文件的安全措施。2、 文件系统(文件管

2020-10-03 16:37:37 30

原创 树莓派高阶课程-- Linux内核镜像拷贝至树莓派并启动新内核

挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡:把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;一个是ext4分区,也就是系统的根目录分区。我们生成的文件涉及到这两个分区的内容,一般插入ubuntu后会自动挂载,fat分区可以不用root权限操作,ext4分区需要root权限操作。两个分区具体挂载在什么地方可以自己决定,以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载

2020-10-03 15:04:55 24

原创 树莓派高阶课程--Linux内核编译

编译:安装必要的库:sudo apt-get install bcsudo apt-get install libncurses5-dev libncursesw5-devsudo apt-get install zlib1g:i386sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses51、执行menuconfigARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNE

2020-10-03 14:48:30 7

原创 树莓派高阶课程--配置Linux内核适合树莓派相关操作

树莓派linux源码配置:驱动代码的编写驱动代码的编译需要一个提前编译好的内核编译内核就必须配置配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核 厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码 第一种方式: cp 厂家.config .config 第二种方式: make menuconfig 一项项配置,通常是基于厂家的config来配置 第三种方式: 完全自己来 如何配置树莓派的Linux内

2020-10-03 14:40:18 13

原创 linux内核源代码目录树结构

Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间。Linux是开源,免费,LInux开源社区工作者共同维护,爱好Linux是一个开源的,支持多架构多平台代码 = 非常牛逼可以移植非常高但是Linux内核编译出来一般就几M. 4M因为支持多平台,多架构,所以编译之前要配置,配置成适合的目标平台来用ARM海思 友善之臂 RK 树莓派 nanoPiX86PowerPCMIPS转载:ht

2020-10-03 10:57:42 11

原创 树莓派等芯片带操作系统的启动过程

C51,STM32(裸机)》》》》》》C直接操控底层寄存器实现相关业务。 业务流程型的裸机代码遥控灯: while(1)垃圾桶:WemosD1 LOOP恩智浦智能车: stm32 X86,Intel windows 启动过程: 电源 -》 BIOS -》windows内核-》C,D盘-》 程序启动(QQ) 嵌入式产品: 树莓派,mini2440, mini6410,nanopi,海思,RK(瑞芯微)------人脸识别打卡器,智能家居主控。。。 启动过程: 电源-》BootLoad

2020-10-03 10:52:52 12

原创 带WiringPi库的交叉笔译如何处理三

交叉编译:arm-linux-gnueabihf-gcc demo2.c -I /home/cky/lessonPI/WiringPi/wiringPi -L. -lwiringPi -o crossCompDemo2如何把编译生成的可执行文件下载到开发板:scp crossCompDemo2 pi@192.168.43.69:/home/pi指令 文件名 开发板用户名@开发板地址:开发板的绝对路径树莓派运行即可:./crossCompDemo2...

2020-10-02 18:05:03 6

原创 带WiringPi库的交叉笔译如何处理二之软链接概念

Linux创建连接命令 ln -s创建软连接参考文章: https://www.cnblogs.com/zhangna1998517/p/11347364.htmlln -s 是linux中一个非常重要命令,一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下

2020-10-02 17:52:16 9

原创 带WiringPi库的交叉编译如何处理

带wiringPi库的交叉编译如何进行1. 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。2. 通过-I -L来指定 因为链接的库的格式不对,是宿主机的平台,出现以下错误 arm-linux-gnueabihf-gcc demo2.c -I /home/CLC/lessonPI/WiringPi/wiringPi -lwiringPi /home/CLC/lessonPI/tools-master/arm-bcm2708/g

2020-10-02 17:44:42 22

原创 交叉编译阶段二的项目并运行

交叉编译服务端客户端交叉编译:检查下交叉编译工具对不对:arm-linux-gnueabihf-gcc -v4.8.3 ****arm-linux-gnueabihf-gcc xxx.c -o xxx**** 如何把编译生成的可执行文件下载到开发板:****scp xxx(hellow) pi@192.168.43.30:/home/pi****指令 文件名 开发板用户名@开发板地址:开发板的绝对路径这是我遇到的问题遇到这种情况,输入yes,回车输入密码即可。...

2020-10-02 14:25:15 12

原创 树莓派(或者其他平台)交叉编译工具链的安装

交叉编译工具链的安装https://github.com/raspberrypi/(选择tools,然后Code下面的Download ZIP)拷贝共享文件夹至工作目录:cp /mnt/hgfs/share/tools-master.zip .解压: unzip tools-master.zip环境变量配置步骤(临时有效):lscd tools-master/lscd arm-bcm2708/lscd gcc-linaro-arm-linux-gnueabihf-raspbian.

2020-10-02 13:44:36 13

原创 交叉编译的概念

1.交叉编译是什么?交叉编译 是在一个平台上生成另一个平台上的可执行代码。我们在windows上面编写C51代码,并编译成可执行代码,如xxx.hex,是在c51上面运行,不是在windows上面运行我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,而不是在ubuntu linux上面运行编译:是在一个平台上生成在该平台上的可执行代码C51 交叉编译的发生在keil(集成环境上面)2.既然我们已经有了主机编译器,那为什么还要交叉编译呢?(1)有时

2020-10-02 12:26:23 55

原创 树莓派和电脑之间串口通信编程

#include <wiringSerial.h>#include<wiringPi.h>#include <stdio.h>#include <stdlib.h>int main(){//void serialPutchar (int fd, unsigned char c)//void serialPuts (int fd, char *s)int fd; //Linux 的思想是:将一切IO设备,都看做 文件,fd就是代表串口抽象出来

2020-10-01 17:21:58 32

原创 串口通信协议概述

串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。通讯数据格式:l 起始位: 1 位l 数据位: 8 位l 奇偶位: 无l 停止位: 1 位波特率:所谓传输率就是指每秒传输多少位,传输率也常叫波特率单工通信就是只能从A到B,如[广播]半双工通信是A到B,B到A都行,但不能同时进行.如[对讲机]全双工通信是A到B,B到A都行,可以同同时进行.如

2020-10-01 15:54:54 764

原创 树莓派控制HC-SR04超声波模块测距

一.超声波的工作原理:二.编程实现:#include <wiringPi.h>#include <stdio.h>#include <sys/time.h>#define Trig 4#define Echo 5void ultraInit(void){pinMode(Echo, INPUT); //设置端口为输入pinMode(Trig, OUTPUT); //设置端口为输出}float disMeasure(void){

2020-10-01 12:48:50 65

原创 继电器组硬件控制开发

#include <wiringPi.h>#include <stdio.h>#include <string.h>#define SWITCHER1 26#define SWITCHER2 27#define SWITCHER3 28#define SWITCHER4 29int main(){char cmd[128] = {’\0’};if(wiringPiSetup() == -1){printf(“硬件接口初始化失败\n”);return

2020-10-01 11:55:36 71

原创 树莓派控制继电器

硬件初始化函数使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作。可以调用下表函数之一进行初始化,它们都会返回一个int , 返回 -1 表示初始化失败。int wiringPiSetup (void) 返回:执行状态,-1表示失败当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16需要root权限通用GPIO控制函数void pinMode (int pin, int mode)pin:配置的引脚mode:指定

2020-10-01 10:38:34 39

原创 树莓派外设开发综述

树莓派 Raspberry Pi —— wiringPi库安装wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。java 的pi4j项目也是基于wiringPi的,我最近也在看源代码,到时候整理好了会放出来的。下面开始wiringPi之旅吧!wiringPi下载进入 wiringPi的github (https://git.drogon.net/?p=wiringPi;a=summary) 下载安装包。点击页面的第一个链接的右边的

2020-09-30 11:10:52 14

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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