自定义博客皮肤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)
  • 收藏
  • 关注

原创 LED驱动代码编写

为了编写LED驱动程序,需要查看开发板的原理图,查看需要配置的引脚。这里LED驱动代码的编写基于100ask-imx6ull mini开发板。一、查看原理图由LED硬件图可以得知配置GPIO5_3 输出低电平,LED点亮,GPIO5_3输出高电平,LED熄灭。具体的寄存器操作应该是怎样的?1.使能寄存器,但有些芯片的GPIO是没有使能开关的,即它总是使能的。2.选择引脚功能,一个引脚可以用于GPIO、串口、USB或其他功能,有对应的寄存器来选择引脚的功能。3.对于已经设置为GPIO功能的引脚,

2021-12-15 22:15:20 4183 1

原创 hello 驱动编写-最简单的驱动程序

编写驱动程序步骤:确定主设备号定义自己的 file_operations 结构体实现对应的 open/read/write函数,填写入结构体把file_operations 结构体告诉内核,注册驱动程序谁来注册驱动程序?需要一个入口函数;安装驱动程序时,就会调用这个入口函数卸载驱动程序,调用出口函数其他,提供设备信息,创建设备节点imx-linux4.9.88\include\linux目录下fs.h中的file_operations 结构体:可以参考imx-linux4.9.88\

2021-12-12 23:29:54 3633

原创 TTY体系中设备节点的差别

一、设备节点及有关术语的含义设备节点含义/dev/ttyS0、/dev/ttySAC0串口/dev/tty1、/dev/tty2、/dev/tty3、……虚拟终端设备节点/dev/tty0前台终端/dev/tty程序自己的终端,可能是串口、也可能是虚拟终端/dev/console控制台,又内核的cmdline参数确定术语含义TTY来自teletype,最古老的输入输出设备,现在用来表示内核的一套驱动系统Terminal

2021-11-05 20:55:50 1008

原创 TCP 与 UDP实例

send函数ssize_t send(int sockfd, const void *buf, size_t len, int flags);sockfd 指定发送端套接字描述符;buf 指明一个存放应用程序要发送数据的缓冲区;len 指明实际要发送的数据的字节数;flags 一般置0。客户或者服务器应用程序都用send函数来向TCP连接的另一端发送数据recv函数ssize_t recv(int sockfd, void *buf, size_t len, int flags);s

2021-10-18 22:14:45 497

原创 STM32寄存器点灯

配置寄存器使STM32最小系统板上的LED灯点亮根据原理图,要使D2点亮,需要将PC13拉低,分为以下步骤:使能GPIO的时钟配置GPIO13为输出模式配置GPIO13输出低电平一、确定有关寄存器及其地址1.起始地址记录时钟控制寄存器的起始地址为0x4002 1000GPIOC寄存器起始地址为0x4001 10002.使能寄存器根据系统架构图,可知使能GPIO时钟需要去找APB2外设使能寄存器使能寄存器地址+偏移地址 左移4位 *(unsigned int*)0x4002

2021-10-13 22:00:58 785

原创 输入系统应用编程--APP访问硬件编程

一、输入系统框架假设用户程序直接访问/dev/input/event0设备节点,或者使用tslib访问设备节点,数据的流程如下:APP发起读操作,若无数据则休眠;用户操作设备,硬件上产生中断;输入系统驱动层对应的驱动程序处理中断:读取到数据,转换为标准的输入事件,向核心层汇报。所谓输入事件就是一个“struct input_event”结构体。核心层可以决定把输入事件转发给上面哪个handler来处理:从handler的名字来看,它就是用来处输入操作的。有多种handler,比如:evd

2021-10-07 21:42:29 541

原创 单例设计模式

一、简介单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。具体实现思路别人不能new实例,所以要将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。定义一个静态方法返回这个唯一对象。二、 饿汉式实现立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称

2021-10-01 09:07:28 111

原创 模板方法设计模式

模板方法设计模式定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。设计模式的主要优点它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。它在父类中提取了公共的部分代码,便于代码复用。部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。主要缺点对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,

2021-10-01 09:06:02 119

原创 DHT11温湿度LCD显示

一、温湿度模块传感器介绍DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC 测温元件,并与一个高性能8位单片机相连接。供电电压:3.3~5.5V 直流电输出为单总线数字信号温度测量范围0~50度(精度正负2度,分辨率1度)湿度测量范围为20~90%RH(精度为正负5%,分辨率1%)采用单总线双向串行通信协议,每次采集都要由单片机发起开始信号,

2021-09-23 22:18:21 4484 1

原创 ASCII字符和中文字符的显示

ASCII字符和中文字符的显示基于Framebuffer进行编程,Framebuffer应用编程可参考这里一、显示ASCII字符需要在LCD中显示ASCII字符,即英文字母这些字符,需要先找到字符对应的点阵,再根据Framebuffer的应用编程将字符显示到LCD上即可。1. ASCII字符点阵文件Linux内核源码下lib\fonts\font_8x16.c有字符对应的点阵这一文件,该点阵为为8X16的点阵,即每一行有八位即一个字节,一共有16行,每个字符占据16个字节。像素从右边数起,bit0

2021-09-18 17:23:15 2003

原创 Framebuffer应用编程

一、Framebuffer介绍在Linux系统中通过Framebuffer(帧缓冲)驱动程序来控制LCD。Framebuffer就是一块内存,里面保存着一帧图像。Framebuffer中保存着一帧图像的每一个像素颜色值。LCD控制器周而复始地从Framebuffer中逐一取出每个像素的颜色值发送到LCD,这样LCD便能显示出图像。假设LCD的分辨率是1024x768,每一个像素的颜色用32位来表示,那么Framebuffer的大小就是:1024x768x32/8=3145728字节。二、确定LCD某

2021-09-13 20:10:22 1054

原创 Makefile的简单使用

Makefile核心规则目标文件(target)… : 依赖文件(prerequiries)…tab键+ 命令(command)如果依赖文件比目标文件更加新,那么执行命令来重新生成目标文件举例:a.c#include <stdio.h>int main(){ func_b(); return 0;}b.c#include <stdio.h>void func_b(){ printf("this is

2021-09-10 16:45:07 202

原创 -I (大写i)、-L、-l(小写L) 的使用

一、案例目录下有以下文件:main.c#include <stdio.h>#include "sub.h"int main(int argc, char *argv[]){ int i; printf("Main fun!\n"); sub_fun(); return 0;}sub.cvoid sub_fun(void){ printf("Sub fun!\n");}sub.hvoid su

2021-09-02 22:16:30 958

原创 Navicat 连接linux mysql 失败解决方法

一、问题描述最近在使用Navicat 连接linux mysql总是提示 2003 can’t connect to MySQL server on…,导致总是连接不上。看了网上大部分博文所介绍的解决办法,比如重启mySQL服务、检查mysql是否授权远程用户登录等等…但我这里不能正常解决。二、问题解决(仅对我遇到的情况)1.如果在同一局域网内连接linux mysql,可以先关闭防火墙再连接:systemctl start firewalld // 开启防火墙systemctl stop f

2021-08-09 23:36:28 2750

原创 LCD 1602学习

一、LCD 1602介绍LCD1602 液晶显示屏是一种字符型显示模块,可以显示ASCII码的标准字符和其他的一些内置特殊符号。显示容量:16 X 2 个字符,每个字符为5*7的点阵引脚功能VCC正极(4.5V~5.5V)VO对比度调节电压RS数据、指令选择,1为数据,0为指令RW读写选择,1为读,0为写E使能,1为数据有效,下降沿执行命令DB0~DB7数据输入、输出BG VCC背光灯电源正极BG GND背光灯电源负极

2021-07-16 12:05:49 3890 2

转载 进程间通信(IPC)介绍

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。...

2021-07-13 22:04:32 704

转载 Linux 信号(signal)

对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。一、 信号概述1、信号的名字和编号:每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。信号定义在signal.h头文件中,信号名都定义为正整数。具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是从1开始编号的,不存在0号信号。kill

2021-07-11 17:16:40 6751

原创 java 泛型

一、泛型类的引入1、问题提出假设现在有这样的一个需求:需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同,那我们如何做。方法一:创建多个类文件,给每个类中的成员变量设置指定的数据类型class Cs1 { private int a; public Cs1(int a) { this.a = a; } public int getData() { return a; }}clas

2021-07-07 21:16:39 121 1

原创 java之多态

一、多态介绍1.多态的概念多态性是指同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。多态就是同一个接口,使用不同的实例而执行不同操作。2.多态存在的三个必要条件需要存在继承和实现关系同样的方法调用而执行不同操作、运行不同代码(重写)父类引用指向子类对象:Parent p = new Child();3.多态的作用多态通过分离做什么和怎么做,从一个角度将接口和实现进行分离多态消除了类型之间的耦合关系多态的存在提高了程序的拓展性和后期的可维护性举例:Dog 类和Cat类

2021-06-24 19:49:41 161

原创 Linux 下的system和popen

一、Linux system函数system函数可以简单理解为利用system执行shell 命令int system(const char *command);1.源码简单分析来看下面linux版system函数的源码:int system(const char * cmdstring){ pid_t pid; int status; if(cmdstring == NULL){ return (1); } if((pid = fork())

2021-06-24 16:55:15 925

原创 java重载和重写及类的加载顺序

一、方法重载(Overload)重载概念:同一个类中,同名不同参的方法称为重载方法多数程序语言要求为每个方法(函数)提供一个独一无二的方法名,不存在方法重载的概念。在java中,规定方法签名是解析方法的规则而不是方法名,为方法重载开创了条件。方法重载使得在一个类中,方法名相同而参数列表不同的方法可同时存在,代表相似的行为或功能注意:仅有返回值不同的方法不能称为重载例如:public class Overloading { public int test(){ Syste

2021-06-21 11:04:10 918 1

原创 java包装类和自动拆装箱

一、什么是包装类Java中的数据类型分为基本数据类型和引用数据类型,而java当中的基本数据类型不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法。包装类的产生就是为了解决基本数据类型存在的这样一些问题,通过包装类可以让基本数据类型获取对象一样的特征,行使对象相关的权力。1.java中的基本数据类型和引用数据类型1.基本数据类型只有8种,可按照如下分类.1.整数类型:long、int、short、byte2.浮点类型:float、double3.字符类型:char4.布尔类型:b

2021-06-19 22:41:47 221

原创 安卓的相对布局与线性布局

一、安卓布局的种类Android共有七大基本布局。分别是:线性布局LinearLayout、表格布局TableLayout、相对布局RelativeLayout、帧布局FrameLayout、绝对布局AbsoluteLayout、网格布局GridLayout。约束布局ConstraintLayout。其中,表格布局是线性布局的子类。网格布局是android 4.0后新增的布局。约束布局是Android Studio 2.2推出的新布局,并从Android Studio 2.3开始成为默认布局。在手机

2021-06-13 14:23:17 1807 4

原创 安卓的Socket客户端开发及应用

一、应用场景在做嵌入式开发中,比如我们通过开发板控制电机从而驱动小车前进和转向,希望能通过手机安卓app控制小车。这时我们可以引入安卓的Socket编程。实现思路:假设小车前进和转向的消息获取是经过串口通信完成的,要实现安卓app的控制,可以先在开发板上开启socket服务端,当在安卓app界面上点击按钮时,按钮实现客户端的创建并与服务端建立连接,客户端对服务端发送消息。这时,服务端接收消息后,剩下的步骤便可由串口通信完成。二、界面简单布局代码activity_main.xml:<Relat

2021-06-07 21:35:26 793 4

原创 基于java的socket编程

package com.heavysea.l;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;// 服务端public class Test { public static void main(String[] args) { byte []data = new byte[128]; int len = 0;

2021-06-04 12:54:24 327

原创 安卓页面的跳转(按钮点击跳转、自动跳转)

一、安卓页面跳转1.创建新页面在eclipse中建立安卓工程后,默认会有一个页面MainActivity,要实现多个页面的跳转,首先需要建立新的页面在eclipse建立新的页面过程如下:要添加的新页面的工程下src 右键---->New—>Other—>选择Android下的Android Activity选择next下一步按照需求选择后点击next:为新页面取名后点击完成,完成新页面的创建2.实现点击按钮实现页面跳转activity_main_xml<R

2021-05-31 23:18:15 17580 6

原创 安卓按键响应的方式

一、在xml中设置按键的onClick绑定的函数在页面显示两个按钮,用onClick 绑定buttonBeClicked函数,该函数在MainActivity.java中实现。activity.main.xml:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout

2021-05-28 21:31:20 384 1

原创 51单片机 串口学习

一、串口电平标准:电平标准是与数据的对应关系数据1与数据0的表达方式,是传输线缆中认为规定的电压。串口常用的电平标准有:1.TTL电平: +5V表示1,0V表示02.RS232电平: -3~ -15V表示1,+3V~+15V表示03.RS485电平:两线压差 +2 ~ +6V 表示1,-2~ -6V表示0二、常用通信接口名称引脚定义通信方式特点UARTTXD、RXD全双工、异步点对点通信I2CSCL、SDA半双工、同步可挂载多个设备SPI

2021-04-18 21:23:16 1916 2

原创 C语言变量

一、变量的作用域按照变量的作用域分可分为局部变量和全局变量局部变量:在一个函数内部定义的变量 只有在函数内才能使用他们全局变量:函数之外定义的变量,也称外部变量。有效范围是从定义变量的位置开始到本源文件结束。二、变量的存储方式静态存储方式:在程序运行期间由系统分配固定的存储空间的方式动态存储方式:程序运行期间根据需要进行动态分配空间的方式存储空间可以分为三部分:(1) 程序区(2) 静态存储区(3) 动态存储区全局变量全存放在静态存储区。程序开始执行给全局变量分配存储区,执行完毕释

2021-04-18 11:50:42 1000

原创 51单片机 定时器学习

一、定时器介绍定时器:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。定时器作用:1.用于计数系统,可实现软件计时,或使程序每隔一固定时间完成一项操作2.替代长时间的Delay,提高CPU的运行效率和处理速度1.定时器资源以STC89C52为例,定时器个数三个(T0,T1,T2),其中T2是此型号单片机增加的资源。注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机共有的。2

2021-04-12 22:03:49 511

原创 51单片机 外部中断

一、中断的概念:为了降低CPU的占有率,同时实现单片机对复杂情景的处理,引入了中断。CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,为该外设服务(或者处理紧急事件),处理完毕后回到原断点继续执行原程序。该过程叫做中断。二、什么是中断源引起中断的原因和发出中断请求的来源中断源可以是外设,紧急事件,定时器或者人为设置用于单步断点调试程序。1.中断系统要解决的问题:1.CPU在执行程序中,如何检测到随机发生的中断请求2.是否允许中断3.

2021-04-11 15:11:00 5303 1

原创 shell 脚本入门

一、shell 脚本介绍:将很多条命令放到一个文件里面,然后直接运行这个文件即可,这就是shell脚本。即shell脚本就是将连续执行的命令写成一个文件二、shell 脚本写法shell 脚本是纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.shshell 脚本第一行一定要为:#!/bin/bash表示使用 bash三、shell 脚本常见语法规则1.交互式shell 脚本echo 表示输出read可以读取键盘输入的字符 read后面可以接 -n -d -a 等等

2021-03-30 21:26:00 98 1

原创 树莓派字符设备驱动代码(基于框架)的编译测试

一、树莓派字符设备驱动代码框架:以下框架只添加了open write函数,可以根据需求在结构体中自行添加#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //__init __exit 宏定义声明#include <linux/device.h&gt

2021-03-22 22:54:36 189

原创 串口通信与通信方式简介

串口通信:串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串口通信的要素:1.数据格式(数据位 停止位 奇偶校验位) 类比人与人交流之间所用的语言2.波特率 类比人与人交流之间的语速通信从传输方向上可以分为单工通信、半双工通信、全双工通信三类。一、全双工

2021-03-19 12:14:43 3181

原创 Ubuntu用户用户组和文件权限

一、Linux 用户Linux 是一个多用户操作系统,不同的用户拥有不同的权限。可以查看和操作不同的文件。Ubuntu有三种用户1.初次创建的用户(创建Ubuntu系统时创建的用户)2.root 用户(系统中唯一的超级用户,具有系统中所有的权限,相当于Windows系统中的system用户)3.普通用户初次创建的用户权限比普通用户多,但是没有root用户多,初次创建的用户可以创建普通用户Linux 用户记录在 /etc/passwd 这个文件内Linux 用户密码记录在 /etc/shadow

2021-03-18 17:48:53 1984

原创 Ubuntu下的压缩与解压缩

linux 下常用的压缩拓展名有: tar tar.bz2 tar.gz一、gzip 压缩工具:.gzip 工具负责压缩和解压缩.gz格式对文件进行操作:gzip xxx //压缩gzip -d xxx.gz // 解压缩对文件夹进行操作:gzip -r xxx //压缩gzip -rd xxx //解压缩gzip 虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩二、bzip2 压缩工具和gzip 类似,只是bzip2

2021-03-17 13:08:19 381

原创 java之内部类

一、概念:内部类,就是将一个类定义在另一个类的内部。内部的类称为内部类public class Outer{ class Inner { // 省略 }}二、内部类的主要特点:内部类可以很好的实现隐藏,可以使用protected private 修饰符内部类可以直接访问外部类的所有成员 包括私有的成员外部类不能直接访问内部类的成员 必须首先建立内部类的对象才能访问三、成员内部类的应用:1.成员内部类属于外部类的实例成员 成员内部类可以有

2021-03-15 23:27:33 104

原创 ubuntu文件系统结构与磁盘管理

一、根目录“/”:Linux下“/”就是根目录所有的目录都是由根目录衍生出来的二、ubuntu 文件系统结构:三、绝对路径和相对路径:绝对路径:从根目录“/”算起的路径相对路径:相对于目前路径的文件写法磁盘管理一、ubuntu 磁盘文件/dev/sd* 文件 此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一目录下才可以访问通过对U盘拔插,可以得出U盘的设备文件以我这里为例: /dev/sdb 和/dev/sdb1是U盘的设备文件/dev/sdb 表示U盘

2021-03-15 22:57:04 940

原创 java之接口

一、概念:接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口语法:interface 接口名{// 公有静态常量 抽象方法}二、接口的特点:1.接口中只能存放静态常量和抽象方法2.java接口是对功能的拓展3.通过实现接口 java类可以实现多功能4.一个类可以同时继承(extends)一个父类并且实现(implements)多 个接口5.接口与接口

2021-03-14 22:00:04 278

原创 java之抽象类

一、抽象类概念:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。注意:1.抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。2.由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。3.父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

2021-03-14 21:53:37 83

空空如也

空空如也

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

TA关注的人

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