自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux之awk命令

目录一、awk基础语法1.1 主要用法1.2 awk内置变量1.3 过滤时机二、awk基础应用案例三、awk条件判断3.1 正则表达式3.2 数值、字符比较3.3 逻辑比较测试3.4 运算符四、awk流程控制4.1 if语句4.2 for循环五、awk数组与应用案例六、awk综合案例6.1 ss命令6.2 过滤连接状态注:/etc/passwd内容一、awk基础语法创造者:Aho、Weinberger、Kernighan...

2021-12-13 20:47:10 4639 1

原创 Shell脚本正则表达式与sed基础

目录一、正则表达式1.1 扩展正则符号1.2 Perl兼容的正则符号1.3 grep语法格式二、sed基础2.1 常用命令选项2.1.2正则定位2.3 使用sed修改配置2.3.1 Delete指令2.3.2 Replace指令2.3.3 Substitution2.3.4 正则符号()2.3.5 =打印行号2.4 多行文本处理2.4.1 Inset指令2.4.2 Append指令2.4.3 Read指令2.4.4 Write...

2021-12-12 23:14:57 887

原创 Shell脚本函数与子串处理

一、case语句检查、判断变量的取值,命令序列最后必须以分号结尾(双分号)case 变量 in模式1) 命令序列1;;模式2) 命令序列2;;...*) 默认命令序列esac示例xm@ubuntu:~/shell$ cat casetest.sh#!/bin/bashread -p "请输入redhat|fedora:" keycase $key inredhat) echo "fedora.";;fedora) ec...

2021-12-11 23:18:08 334

原创 Shell脚本基础语法

目录一、条件测试1.1 字符串比较1.2 整数值比较1.3 文件状态测试1.4 控制操作符1.5 监控脚本二、if语句(单、多分支)三、for循环3.1 {1..4}四、while循环五、DEMO一、条件测试使Shell脚本获得识别能力,为命令的执行提供最直接的识别依据1、文件或目录的读/写等状态2、数值的大小3、字符串是否匹配4、多条件组合test测试操作,一般推荐方括号进行条件测试语法格式1、test 选项 参数2、[ 选项 参数

2021-12-11 21:29:56 218

原创 Shell脚本基础与变量

一、Shell基础常见的Shell解释器有"/bin/bash、/bin/sh、/bin/csh、/bin/tcsh",解释器负责将用户的指令翻译为内核可以识别的指令交互式:命令行,逐条解释执行、效率低非交互式(脚本):需要提前设计,批量执行、效率高通过usermod、chsh可以更改登陆shell添加一个用户,通过grep可以看用户的解释器为shxm@ubuntu:~$ sudo useradd testxm@ubuntu:~$ grep test /etc/passwdtes.

2021-12-10 23:52:30 179

原创 C++之函数模板与类模板

目录函数模板的引入其隐式转换函数模板重载类模板引入定做函数模板的引入重载:C++入门之构造函数,通过参数的不同来调用不同的函数体int& max(int& a, int& b){ return (a < b)? b : a;}double& max(double& a, double& b){ return (a < b)? b : a;}float& max(float&

2021-05-31 20:57:57 407 3

原创 C++之抽象类与抽象类界面(高级编程)

纯虚函数看以下例子,对于#include <iostream>#include <string.h>#include <unistd.h>using namespace std;class Human {private: int a;public: virtual void eating(void) = 0; virtual void wearing(void) = 0; virtual void driving(void) = 0;

2021-05-29 21:14:59 300 1

原创 C++之多态与类型转换

多态先看以下例子#include <iostream>#include <string.h>#include <unistd.h>using namespace std;class Human {public: void eating(void) { cout<<"use hand to eat"<<endl; }};class Englishman : public Human {public: void ea

2021-05-29 15:26:16 487 1

原创 C++之继承及访问权限

目录论述继承protected权限访问控制权限继承覆写other多重继承再论构造函数论述继承这里直接举例来理解,其中Son继承Father的内容,对于Son我们称为派生类,也俗称子类,对于Father我们称为基类,也俗称父类,可以看到Son是以public的权限继承基类的,如果不写public的话,默认是以private的方式去继承基类#include <iostream>#include <string.h>#include &lt

2021-05-25 21:46:58 1425 1

原创 C++之操作符重载

目录静态友员重载操作符重载+重载++重载<<类中重载先介绍一下静态与友员静态对于静态变量与C相似,在C++中下面举例一个例子,利用静态成员计算对象创建的个数,在类中定义静态变量成员属于类,而不会属于某个创建的对象,类的静态成员变量需要在类外独立分配内存空间,因此"int Person::cnt = 0;"定义个初始化是需要的,例子中定义为私有变量,因为需要设置个接口,同时也设置为静态函数,只类所拥有,对于静态函数只能访问静态成员,不能访问其他成员,例如na

2021-05-24 20:20:26 345 1

原创 C++入门之构造函数

目录重载与引用构造函数实例化对象析构函数拷贝函数other重载与引用重载,即函数名相同,调用不同的函数体#include <iostream>using namespace std;int add(int a, int b){ cout<<"add int+int"<<endl; return a+b;}#if 0 double add(int a, int b) { cout<<"add int+

2021-05-23 21:44:28 293 5

原创 C++入门之程序结构

目录类的引入与访问控制权限this程序结构namespaceusingcout类的引入与访问控制在C语言中可以用struct来类比一个对象,但是struct比较局限,不能像C++可以有自己的成员函数并且可以访问内部成员,在C++中用class来定义一个类,因此struct和class的区别就在于struct不可以含有成员函数而C++可以,对于C++中的struct和class的主要区别在于默认的存取权限不同,struct默认是public,而class默认是privat.

2021-05-23 16:31:35 315 9

原创 设备树之DTS与DTB格式

设备树对于点灯字符设备驱动程序可以有三种写法,首先是传统方法,这种方式直接在程序中写死,其次是利用总线设备驱动模型,利用分离的思想,将程序规划为两部分,对于驱动部分一般是稳定的,在设备部分更改资源,最后是利用设备树方法,可以使用设备树直接指明引脚,而驱动写法的核心不变,差别就在于如何指定硬件资源,这三种方法有各自的优缺点 优点 缺点 传统方法 简单 不易扩展,需重新编译 总线设备驱动模型 易扩展,只需要修改资源 稍微复杂 ,冗余代码多(如果有多个版本的硬.

2021-05-09 21:22:46 2649 1

原创 ARM处理器之Cache与MMU

一、Cache简述对于ARM芯片中包含这指令Cache和数据Cache以及MMU,这些MMU和Cache是通过协处理器(coprocessor)CP15来操作的,协助主处理器,在ARM9系统里面有CP0到CP15总共16个协处理器下面有一段程序,假设sum为地址A,i为地址B,根据反汇编我们可以发现会不断地读写地址A和B,不断地执行for循环中的代码,取指令和执行指令,在JZ2440中SDRAM非常慢,怎么提高程序执行效率#include <stdio.h>int sum(

2021-04-22 22:39:36 2250 2

原创 ARM处理器之中断与异常

一、概念引入与处理流程CPU被中断的方式有指令不对、数据访问有问题、Reset信号等这称为异常,还有中断源:按键、定时器、网路数据等称为中断,中断处于一种异常体系,对于异常,首先需要我们保存现场(也就是保存相关的寄存器),然后调用对应的处理函数,对于中断来说首先还需要分辨中断源再处理对应的处理函数,最后恢复现场总体过程如下,其中标粗的过程是硬件决定的,后面的过程是软件决定的初始化:a.设置中断源,让其可以产生中断;b.设置中断控制器(可屏蔽,可设置优先级);c.设置CPU总开关(使能中断) 执

2021-04-17 21:43:37 1803 3

原创 Linux之socket详解

目录一、什么是Socket1.1 Socket建立1.2 Socket配置(绑定)1.3 连接建立1.4 数据传输1.5 结束传输二、编程DEMO2.1 TCP编程2.2 UDP编程一、什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口Socket接口设计者最先是将接口放在Unix操.

2021-04-16 20:43:30 4944

原创 实现通用Makefile

目的:编写一个适用于所有的应用程序的Makefile,在这之前可以先参考:Makefile规则以及函数,包含一些基本语法与函数的使用目录一、需要编译的文件二、Makfile内容2.1 子目录Makefile2.2 顶层Makfile与Makefile.build三、分析3.1 实现的机制3.2 顶层Makfile3.3 顶层Makfile.Build(重点)一、需要编译的文件需要编译的工程进去display目录进去test目录可以看到在顶层

2021-04-12 21:44:04 648 1

原创 双向链表DEMO

定义定义一个普通双向链表结构体,双向链表比单向链表多一个pre指针用来指向上一个节点typedef struct NAME{ char *name; struct NAME *pre; struct NAME *next;}T_Name, *PT_Name;static PT_Name g_ptNameHead;DEMO在main函数中实现一个菜单,可以列出节点、添加节点、删除节点和退出int main(int argc, char **argv){ char c.

2021-04-12 19:34:52 154

原创 freetype简介与测试

简要从点阵文件中把字母或者汉字的字模取出来在LCD上显示这个方式有个缺点,这个文字的大小就固定了不能够缩放,我们浏览器就可以放大缩小字体,这些字体就成为矢量字体,比如字母A,在矢量字体文件中存放的是若干条闭合曲线的关键点,显示的时候使用数学曲线描绘并连接关键点,然后填充曲线内部空间,这样来实现缩放字体,关键点之间的相互位置是知晓的,而这种数学曲线就称为贝塞尔曲线,贝塞尔曲线在高等数学中有讲到,但不代表我们需要复习贝塞尔曲线,我们可以通过freetype库来处理这些矢量字体,在网上可以搜索到freetyp

2021-04-10 17:40:16 7919 2

原创 字符编码方式通俗易懂

目录字符编码方式数字的含义Unicode码编码显示相关参考字符的存储gcc之charset字符编码方式分三层理解:数字 代表什么 显示为"什么"数字的含义开始阶段由欧美人发明计算机,他们只使用有限的字母,英文中26个字母,大小写52个跟其他符号,用一个字节来表示,甚至不需要8位,只需要低七位来表示字母,这些字母就是ASCII码,例如0x61表示'a',0x41表示'A'由于时代发展,我们中国人也要用,还有其他国家的,我们常用汉字有6k多个,...

2021-04-10 15:27:57 525

原创 SPI协议介绍

SPI简介SPI协议是一种同步串行接口技术(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,SPI是一主多从的,SPI通信都是由主机发起的,SPI只需要4根线CS:片选引脚,多个SPI设备都会有一个片选引脚,当引脚拉低后就能选中该芯片 SCK:串行时钟,为SPI通信提供时钟 MOSI/SDO:主设备数据输入,从设备数据输出 MOSI/SDI:主设备数据输出,从设备数据输入数据传输配图例如我们发出0x56的数据即0b0101 01.

2021-04-08 16:59:33 1772 1

原创 GitHub高效寻找开源项目

GitHub入手用法目录搜索框搜索技巧举例搜索框搜索技巧#按照项目名/仓库名搜索(大小写不敏感):in:name xxx#按照README搜索(大小写不敏感):in:readme xxx#安装description搜索(大小写不敏感):in:description#starts数大于xxx:starts:>xxx#forks大于xxx:forks:>xxx#编程语言为xxx:language:xxx#最近更新时间晚于

2021-04-07 21:32:56 142

原创 GitHub入手用法

目录GitHub简介创建仓库添加ssh账户上传分支本地分支跟踪服务器分支从远程分支上拉取代码题外话GitHub简介使用GitHub,可以借助GitHub来托管我们的项目,GitHub官网:github.com基本概念仓库(reposiory):项目代码就放在仓库里面,在github上面就叫做仓库 ,那就必须要新建一个repository,如果你的开源项目多了,就拥有多个repositories,仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个.

2021-04-07 20:59:39 363

原创 Git学习笔记(二)

本文主要讲解分支管理Git学习笔记(一)目录一、概念二、创建与合并分支2.1 简介2.2 配图示例2.3 命令小结三、解决冲突四、分支管理策略五、Bug分支5.1 stash功能5.2 小结一、概念分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了git又学会了SVN!分支在实.

2021-04-07 16:35:35 515

原创 Git学习笔记(一)

一、git简介1.1 历史git是目前世界上最先进的分布式版本控制系统。Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不...

2021-04-06 21:48:14 271

原创 IIS接口传输简介

IIS接口IIS为硬件接口,用来传输声音数据,也就是只能够用来传输声音或者接受声音,在硬件上,IIS控制器与音频编解码芯片以IIS接口相连,如下图VM8976G芯片,因此对于声音音量等设置等用L3接口来控制,也可以用IIC接口来控制,IIS和IIC是两个完全不一样的接口,一般连接到CPU的IO控制器,其中CDLCK是系统时钟,由CPU提供给编解码芯片使用播放和录音过程:播放:从内存把数据传给IIS控制器,IIS控制器根据IIS接口传给音频编解码芯片,音频编解码芯片中用DAC把数字信号转换为模

2021-04-05 15:45:49 5351

原创 Linux之USB无线网卡开发(二)

目录使用WIFI网卡利用wpa_supplicant(STA模式)1、编译过程2、使用wpa_supplicant使用WIFI网卡利用dhcp并且自动使用wifi1、编译过程2、使用3、接上网卡自动连接AP并设置IP使用WIFI网卡利用wpa_supplicant(STA模式)对于我们的ARM/手机一般是supplicant(请求者,要访问网络的设备),而AP在术语上是authentic(客服端和认证服务器的中间设备,在客户端和认证服务器之间传递信息),服务器术语上.

2021-04-02 22:20:22 707

原创 Linux之USB无线网卡开发(一)

目录使用WIFI网卡准备工作1、选型2、搭建开发环境3、配置内核支持USB WIFI网卡使用WIFI网卡相关概念并利用工具iw(STA模式)使用WIFI网卡准备工作对于我们的手机一般来说都会连着理由器的WIFI,此时手机为STA模式,而路由器为AP模式(也叫热点),因为我们可以让ARM开发板工作于STA模式或者AP模式1、选型确定网卡的VID和PID,原本可以在http://wireless.kernel.org/en/users/Devices/USB此网址找到内.

2021-03-31 22:19:12 1483

原创 S3C2440移植内核3.4

一、内核框架介绍及修改参数linux内核下载地址:https://www.kernel.org/,这里移植linux3.4.2版本u-boot是bootloader最常用的一种,对于u-boot会先将内核拷贝到内存中,设置TAG参数,然后调用函数启动内核(函数的参数:R0=0 R1=机器ID R2=TAG参数地址)内核过程根据R1,判断能否支持该机器,调用机器相关的初始化函数解析TAG参数装载驱动程序(网卡、Flash等)挂接根文件系统启动应用程序编译内核步骤tar x

2021-03-13 15:30:34 263

原创 S3C2440移植U-BOOT

一、移植高版本u-bootu-boot下载地址:http://www.denx.de/wiki/U-Boot/SourceCode,这里移植2012.04.01版本的u-boot,解压过程如下tar xjf u-boot-2012.04.01.tar.bz2cd u-boot-2012.04.01make smdk2410_configmake如果gcc版本过低需要在解压之前需要高版本的gcc编译器,添加在根目录后,需要环境变量添加/usr/local/arm/4.3.2/bin...

2021-03-11 22:35:22 888

原创 Linux3.4.2之IIC驱动

目录一、IIC驱动框架介绍二、搭建驱动框架2.1 方法一2.2 方法二2.3 方法三2.4 方法四三、完善设备驱动四、用户态直接访问一、IIC驱动框架介绍框架分为三层:app、设备驱动、总线驱动app open、read 设备驱动 例如at24cxx_open、at24cxx_read 总线驱动 提供统一的IIC操作函数 例如2440的IIC硬件操作 Atmel某个芯片的IIC硬件操作 怎么把这三层联系在一块:涉及到总.

2021-03-06 21:12:37 525

原创 嵌入式软件之应用调试

目录一、strace追踪二、gdb与gdbserver调试2.1 gdb调试2.2core dump三、修改内核打印用户段错误信息四、自制系统调用一、strace追踪使用strace命令来跟踪系统调用,应用程序过程中open、read、write等就涉及到系统调用,strace工具比较简单,可以解决一些常见问题,这里用的是strace-4.5.15版本的编译过程,其中host是运行的宿主机,CC是编译器./configure --host=arm-linux..

2021-03-04 21:21:58 935

原创 嵌入式软件之裸板与驱动调试

一、裸板调试1.1 点灯法通过点亮LED来观察程序走到哪一步,汇编实现对LED点亮死循环led_flicker: // 初始化LED ldr r0, =0x56000050 @ GPFCON ldr r1, =(1<<(4*2)) str r1, [r0] // 循环点亮熄灭LED ldr r0, =0x56000054 @ GPFDAT ldr r1, =0 ldr r2, =(1<<4)loop:

2021-03-03 21:00:13 1126

原创 Linux驱动之热拔插

一、hotplug/uevent机制分析字符设备驱动中可以实现自动创建设备节点也就是以下函数class_device_create(),为了让mdev(udev的简化版本)根据这些信息来创建设备节点,分析自动创建设备节点的过程,class_device_create函数最终会调用到kobject_uevent_env函数struct class_device *class_device_create(struct class *cls, struct class_device *p

2021-03-01 17:14:40 440

原创 Linux之字符驱动写法二

目录字符设备驱动写法二RTC驱动简介字符设备驱动写法二之前的写法参考:S3C2440之字符设备驱动详解对于之前的写法,有一个缺点,对于file_operations结构会放在chrdev数组中去,这样只能注册255个字符设备驱动static struct char_device_struct { struct char_device_struct *next; unsigned int major; unsigned int baseminor; int minorc.

2021-02-22 22:02:12 188 1

原创 Linux2.6之IIC驱动

一、IIC简介1.简单介绍通俗易懂IIC是通信协议中的一种,为一主多从的结构,对于主从,所有的数据都是从主机这边发起,从机只能接受,不能主动引起数据传输,只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)对于多个IIC设备来说,每个连接到总线的器件都可以使用软件根据它的唯一地址来识别,当我们要使用一个IIC设备时,通过SDA传输地址,并等待IIC设备的回应即ACK信号而SDA上是如何实现双向传输的,在硬件上使用了开极电路,两条总线都有接上拉电阻,因此平时情况下SDA和SCL

2021-02-21 21:59:58 427 2

原创 Linux之虚拟网卡驱动

目录一、网卡驱动程序框架二、编写虚拟网卡驱动2.1 测试直接注册net_device2.2 提供发包函数2.3 添加统计信息2.4 构造假包ping通一、网卡驱动程序框架网卡驱动程序时网络驱动程序的一部分,并不是网络驱动程序,网络驱动程序分为很多层,在这里只是最底层,最终会操作到硬件,在硬件上,有硬件相关层的驱动程序,即我们要写的网卡驱动网卡驱动需要具备收发能力,使数据底层到上层,也能从上层到底层,大多驱动程序都是以面向对象的思想实现,参考真正的网卡驱动程序cs...

2021-02-20 21:40:10 1893

原创 块设备驱动简介与测试

目录块设备驱动的引入块设备驱动程序的框架编写块设备驱动程序编写驱动框架完善代码分配内存模拟硬盘添加打印语句分区块设备驱动的引入对于字符设备驱动,应用层read/write就会调用到底层的read/write,若对于块设备这样执行会有什么后果,例如:硬盘,一个一个盘面组成,正面为磁头0,背面磁头1,磁头0中有很多环即柱面,每个柱面中有很多扇区,假设先读0磁头的扇区0,后写2磁头的扇区0,再读0磁头扇区1,对于磁盘里的机械结构,首先要定位到0磁头的扇区0读,再跳到...

2021-02-17 17:14:32 630 1

原创 Linux之USB设备驱动分析与编程

目录一、概念介绍二、分析USB总线驱动程序三、编写USB设备驱动程序一、概念介绍例当USB设备接到PC时,右下角弹出"发现android phone",跳出一个对话框,提示安装驱动程序提出问题:既然还没有"驱动程序",为何能知道是"android phone"?答:windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone",提示安装的是"设备驱动程序" USB设备种类非常多,为什么一接入电脑,就能识别出来?答:PC和

2021-02-15 22:46:50 891

原创 S3C2440之触摸屏驱动

一、触摸屏驱动简介触摸屏驱动是以用输入子系统写的:输入子系统 所有触摸屏驱动程序都是以下框架:1.分配一个input_dev结构体;2.设置input_dev结构体;3.注册input_dev结构体;4.硬件相关的操作static int s3c_ts_init(void){ /* 1. 分配一个input_dev结构体 */ s3c_ts_dev = input_allocate_device(); /* 2. 设置 */ /* 2.1 能产生哪类事件 */ set_bit(E

2021-02-14 16:17:04 603

第十二届蓝桥杯嵌入式程序设计.zip

第十二届蓝桥杯嵌入式程序设计与客观题

2021-04-19

空空如也

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

TA关注的人

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