自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 I.MX6ULL ARM驱动开发---块设备驱动

I.MX6ULL ARM驱动开发---块设备驱动

2022-09-22 12:31:13 623

原创 I.MX6ULL ARM驱动开发---INPUT子系统

I.MX6ULL ARM驱动开发---INPUT子系统

2022-09-21 23:13:25 476

原创 I.MX6ULL ARM驱动开发---MISC驱动

I.MX6ULL ARM驱动开发---MISC驱动

2022-09-21 16:39:34 372

原创 I.MX6ULL ARM驱动开发---设备树下的platfrom设备驱动

I.MX6ULL ARM驱动开发---设备树下的platfrom设备驱动

2022-09-21 13:55:57 297

原创 I.MX6ULL ARM驱动开发---platfrom设备驱动

I.MX6ULL ARM驱动开发---platfrom设备驱动

2022-09-21 13:26:33 239

原创 I.MX6ULL ARM驱动开发---网络设备驱动框架

I.MX6ULL ARM驱动开发---网络设备驱动框架

2022-09-20 13:48:37 1508

原创 I.MX6ULL ARM驱动开发---Linux中断之下半部

I.MX6ULL ARM驱动开发---Linux中断之下半部

2022-09-10 12:08:05 256

原创 I.MX6ULL ARM驱动开发---并发与竞争

I.MX6ULL ARM驱动开发---并发与竞争

2022-09-09 18:01:33 235

原创 I.MX6ULL ARM驱动开发---Linux按键输入实验

I.MX6ULL ARM驱动开发---Linux按键输入实验

2022-09-09 11:01:05 288

原创 I.MX6ULL ARM驱动开发---Linux内核定时器

I.MX6ULL ARM驱动开发---Linux内核定时器

2022-09-09 10:30:58 442 1

原创 I.MX6ULL ARM驱动开发---Linux中断

I.MX6ULL ARM驱动开发---Linux中断

2022-09-08 22:43:59 388

原创 I.MX6ULL ARM驱动开发---阻塞和非阻塞 IO

I.MX6ULL ARM驱动开发---阻塞和非阻塞 IO

2022-09-08 14:22:10 481

原创 I.MX6ULL ARM驱动开发---异步通知

I.MX6ULL ARM驱动开发---异步通知

2022-09-08 10:55:35 204

原创 I.MX6ULL ARM驱动开发--- pinctrl 和 gpio 子系统的蜂鸣器驱动

I.MX6ULL ARM驱动开发--- pinctrl 和 gpio 子系统的蜂鸣器驱动

2022-08-23 11:47:32 824

原创 I.MX6ULL ARM驱动开发---设备树下的LED驱动实验

I.MX6ULL ARM驱动开发---设备树下的LED驱动实验

2022-08-22 16:34:43 503

原创 I.MX6ULL ARM裸机开发---C语言LED实验

本次点亮LED实验基于NXP的I.MX6ULL开发板,I.MX6ULL使用的是Cortex-A7 架构,通过C语言进行裸机开发。

2022-08-07 13:22:41 970

原创 I.MX6ULL ARM裸机开发---汇编LED实验

本次点亮LED实验基于NXP的I.MX6ULL开发板,I.MX6ULL使用的是Cortex-A7 架构,通过汇编进行裸机开发。

2022-08-07 11:00:24 501

原创 浅学排序算法

  在计算机科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式进行排列的一种算法。最常用到的排序方式是数值顺序以及字典顺序。排序算法也用在处理文字资料以及产生人类可读的输出结果。基本上,排序算法的输出必须遵守下列两个原则:输出结果为递增序列(递增是针对所需的排序顺序而言)输出结果是原输入的一种排列或是重组排序算法介绍冒泡排序选择排序插入排序快速排序一、冒泡排序  冒泡排序又称为泡式排序,是一种简单的排序算法。它重复地走访过要排

2022-05-05 21:46:57 472

原创 MySQL C语言 API总结

  在实际应用中,我们不可能在命令行登录进数据库进行数据的查询、插入等操作,用户一般是使用一个界面良好的应用程序软件来对数据进行管理。为了方便应用程序的开发,MySQL提供了多种编程语言(C、perl、php等)的编程接口,供开发者使用。  对于C语言来说,MySQL提供了C语言客户机库,它允许从任何C程序的内部访问MySQL数据库,客户机实现API,API定义了客户机如何建立和执行与服务器的通信。使用C语言开发MySQL项目具有更好的安全性和性能,C语言API是与MySQL一起提供的,包含在mysqlc

2022-03-24 20:26:41 3862

原创 初识设计模式之状态模式

  在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。  对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的处理。但是显然这

2022-03-21 20:01:00 377

原创 初识设计模式之工厂模式

初识设计模式之工厂模式什么是工厂模式? 工厂模式是最经常被使用的设计模式之一。 根据不同需求,通过使用一个公共接口指向所需要创建的新对象,且创建逻辑不会暴露给客户端。 使用该模式的好处是,可以在不修改原有代码的基础上加入新的产品,满足软件设计的开闭原则。优点使用者只需要知道对象ID就可以创建新对象。代码扩展性强,增加新产品时,只需要在库中添加类即可,不需要改变用户代码。代码解耦性强。缺点产品增多时,对应的类将会变多,增加了系统的复杂度。增加了系统的抽象性,使之不好理解。实现原

2022-03-20 14:37:10 421

原创 Linux驱动代码

#include <linux/fs.h>//file_operation声明#include <linux/module.h>//module_init module_exit声明#include <linux/init.h>//_init _exit声明#include <linux/device.h>//class device 声明#include <linux/uaccess.h>//copy_from_user的头文件#inc

2021-11-02 14:10:03 924

原创 树莓派 视频监控:mjpg-streamer安装及使用

1、安装所依赖的库sudo apt-get install subversionsudo apt-get install libjpeg8-devsudo apt-get install imagemagicksudo apt-get install libv4l-devsudo apt-get install cmakesudo apt-get install git2、下载mjpg-streamersudo git clone https://github.com/jacksonliam

2021-10-17 16:59:43 897

原创 基于翔云OCR云平台的人脸识别(2)

基于翔云OCR云平台的人脸识别(2)项目思路raspistill命令的相关参数说明-v:调试信息查看-w:图像宽度-h:图像高度-rot:图像旋转角度,只支持 0、90、180、270 度(这里说明一下,测试发现其他角度的输入都会被转换到这四个角度之上)-o:图像输出地址,例如image.jpg,如果文件名为“-”,将输出发送至标准输出设备-t:获取图像前等待时间,默认为5000,即5秒raspistill -o test.png -w 400 -h 400 -t 1000摄像头拍

2021-10-17 16:54:34 475 2

原创 基于翔云OCR云平台的人脸识别(1)

基于翔云OCR云平台的人脸识别本节通过翔云OCR云平台来实现人脸识别。调用人脸对比API,通过https post方式向云服务器提交两张需要对比的图片Base64流以及其他信息,云服务器处理后返回判断结果。翔云OCR云平台:https://www.netocr.com/libcurl库支持https版本的编译方法上一节安装了libcurl库,有以下步骤:1、./configure --prefix=$PWD/_install 配置安装路径为当前路径下_install文件夹2、make 编译3

2021-10-17 00:10:03 2110

原创 Linux C libcurl安装及使用

一、libcurl简介及安装libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies和用户认证。libcurl的官网:http://curl.haxx.se/库下载:https://github.com/curl/curl/releases/tag/curl-7_

2021-10-15 13:51:31 2081

原创 OSI模型、Socket、TCP、HTTP/HTTPS协议

1、OSI模型开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为OSI),简称为OSI模型。该模型是由ISO(国际标准化组织)定义,是个灵活稳健和可互操作的模型。1.1 OSI七层模型的划分OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。1.2 常见应用层协议:协议端口说明HTTP80超文本传输协议HTTPS

2021-10-13 23:33:42 1323

原创 Linux 小项目(1)---简易FTP服务器

一、FTP服务器本小节我们通过C语言在Linux系统上编写简易FTP服务器代码。什么是FTP服务器?FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。所设计的简易FTP服务器代码包含服务器端server.c和客户端client.c。服务器通过for

2021-10-07 11:42:25 1883 2

原创 Linux 设备驱动开发(三)---基于驱动的超声波距离检测

超声波模块超声波是 4Pin(VCC, Trig, Echo, GND),工作时需要 Trig 发送触发信号,发送超声波信号,回波检测引脚 Echo 接收超声波返回信号。工作过程:1、Trig 设置成输出模式,给至少 10us 的高电平信号。2、Echo设置成输入模式,等待有信号返回,当检测到一个高电平,高电平持续的时间就是超声波从发射到返回的时间,测试距离=(高电平时间*声速(340m/s))/2。基于wiringPi库的超声波检测程序#include "wiringPi.h"#inclu

2021-10-05 20:31:22 1065 4

原创 Linux 设备驱动开发(二)---I/O口操控

一、知识储备总线地址:地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。简单来说就是CPU能够访问内存的范围。比如装了32位的win7的系统,明明内存条8G,可是系统只识别了3.8G ,装了64位系统才能识别8G,因为 32位操作系统只能表示/访问2的32次方=4294967296 个地址,每个地址访问一个字节。所以4294967296(即2的32次方)个地址访问2的

2021-10-02 17:35:19 598

原创 Linux 设备驱动开发(一)

前言设备有设备名字、设备号(包括主、次设备号)、设备驱动函数三个属性。在/dev目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。1、什么是主设备号和次设备号?主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。通过执行ls -l 命令,可以看到在修改日期之前,有两个用逗号分隔的数字

2021-10-01 10:34:01 358

原创 Linux 交叉编译

1、交叉编译(Cross Compiler)是什么?为什么要交叉编译?交叉编译是在一个平台上生成另一个平台上的可执行代码。我们在Windows上面编写C51代码,并编译成可执行代码,如xxx.hex,是在C51上面运行,不是Windows上运行我们在Ubuntu 上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上运行,不是在Ubuntu Linux上面运行编译:是在一个平台生成该平台上的可执行代码。Stm32、C51:交叉编译的发生在keil(集成环境上面)为什么要交叉编译:

2021-09-28 00:38:55 2320

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

1、分文件编程分模块的编程思想:假设一个项目需要用到网络、超声波、电机,程序不是都杂糅在同一个文件,而是将网络、超声波、电机需要调用的函数写在不同文件里,在主文件中直接调用即可。好处:a.功能责任划分b.方便调试c.主程序简洁2、库使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个程序函数库简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个函数更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为三种类型

2021-09-26 22:48:02 826

原创 Linux 网络编程

网络编程网络编程即如何在程序中实现两台或多台计算机之间的通信。在进程间通信这一节,我们讲了管道、消息队列等IPC方式,不过只能限制在同一台主机上的进程间通信,满足不了不同主机之间的进程通信,而网络编程中的Socket正好可以满足。现在网络上各种各样的服务大多是基于Socket来完成通信的。套接字Socket:简单来说是IP地址与端口的结合协议组成与作用:在网络传输中用于唯一标识两个端点的链接。端点:包括(IP+Port)四个要素:客户端的地址、客户端的端口、服务器的地址、服务器端口。端口号的

2021-09-24 21:05:35 234

原创 Linux 线程

Linux线程介绍进程与线程一个进程可以有多个线程,同时做多件事情,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令,数据及组织形式的描述,进程才是程序的真正运行实例。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。进程的所有信息对该进程中的所有线程都是共享的,包括数据段、代码段、堆、栈等。在Unix和类Unix操作系统中

2021-09-22 14:37:11 142

原创 Linux 进程间通信(二)

信号对于Linux来说,信号是软中断,许多重要的程序都需要处理信号。信号为Linux提供了一种处理异步事件的方法。比如,终端用户输入了ctrl+c到终端程序,会通过信号机制停止一个程序。信号其实也类似于单片机中的中断。Linux系统中信号有很多种,它们都有各自的名字和序号,可以用kill -l指令来查看。 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8

2021-09-20 20:31:16 178

原创 Linux 进程间通信(一)

前言进程间通信(简称IPC即InterProcess Communication),简单来说,就是两个进程之间的数据交换。在进程这一小节,讲过通过exit函数,使当前进程退出并向父进程传递退出状态,父进程再通过wait函数收集终止状态。不过这只能局限于父、子进程,且不能实现子进程运行过程中的数据交换。我们要用到IPC来实现任何两个进程之间的数据交换。进程间通信方式一般有以下几种:1、匿名管道(仅支持同一主机的IPC)2、命名管道:FIFO(仅支持同一主机的IPC)3、消息队列(仅支持同一主机的I

2021-09-18 23:34:13 239

原创 Linux 进程(二)

前言fork创建一个子进程的一般目的有哪些呢?(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络进程中是常见的—父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。(2)一个进程要执行不同的程序。这对shell是最常见的情况,这种情况下,子进程从fork返回后立即调用exec。上一节我们详细介绍了第一点,接下来我们介绍下第二点。我们用fork函数创建新进程后,经常在新进程调用exec函数去执行另外一个程

2021-09-17 20:10:17 174

原创 Linux 进程(一)

储备知识1.什么是程序?什么是进程?有什么区别?程序是静态的概念,gcc xxx.c -o pro 磁盘中生成pro文件,叫做程序。进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程。2.如何查看系统中的有哪些进程?(1)使用ps指令查看 ps -aux|grep a.out实际工作中,配合grep来查看程序中是否存在某一个进程。(2)使用top指令查看,类似windows任务管理器。3.什么是进程标识符?每个进程都有一个非负整数表示的唯一ID,叫做PID,类似身份证

2021-09-16 20:31:37 735

原创 Linux 文件系统

前言Linux修改文件步骤其实和Windows系统相似,步骤如下:操作系统提供了一系列的API如Linux系统:打开 open读写 write/read光标定位 lseek关闭 close什么是文件标识符?文件描述符即索引,通过文件描述符来区分不同文件,并对相应文件进行操作。静态文件:存放在块设备中的文件系统中。动态文件:当我们去open打开一个文件时,linux内核做的操作包括:内核在进程中建立一个打开文件的数据结构,记录下我们打开的这个文件;内核在内存中申请一段内存,并且将静态文

2021-09-15 10:04:31 334

空空如也

空空如也

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

TA关注的人

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