自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 public,private,protected的区别,继承方法与访问权限

test

2018-05-24 16:42:43 6509

转载 C++ const修饰函数、函数参数、函数返回值

const修饰函数在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。[cpp] view plain copy#include <iostream>  using namesp...

2018-05-24 14:12:31 369

转载 类成员函数的重载、覆盖和隐藏区别 (C++)

1.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。2.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。3.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同...

2018-05-24 14:01:22 447

原创 C++类和结构体的区别

经测试(编译环境为VC6.0),发现C++结构体与类只有一个区别,就是类默认的成员是private,结构体默认的成员是public。结构体可以定义public、private、protected,可以定义static成员。可以定义构造和析构函数。也可以继承,也可以定义虚函数。例程如下:#include "stdafx.h"typedef struct st_father{ int m_iValue...

2018-05-24 13:54:17 3240

原创 C++类的默认成员函数

C++类有六个默认的成员函数,分别是构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、&运算符重载函数、const &运算符重载函数。下面分别说明:定义一个class CTestClass{};类。1、构造函数类实例化时执行的函数。CTestClass();2、析构函数类释放时执行的函数。~CTestClass();3、拷贝构造函数CTestClass(const CTestC...

2018-05-24 12:47:57 342 1

原创 C++类和结构体的大小

1、规则(1)空类大小为1,因为C++标准规定空类也可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址。(2)类的大小为非静态成员数据的类型大小之和,静态成员存放在全局数据段,不影响类实例化的大小。(3)类本身的一些特性占用的大小,虚函数表就占用4个字节,当类中含有虚函数时,无论是否是继承来的,...

2018-05-24 10:08:04 1160

原创 C++ map用法(带例程)

介绍:Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们...

2018-05-23 13:28:21 1401

原创 C++ set用法(带例程)

介绍:        set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽...

2018-05-22 15:23:43 1982

原创 C++ list用法(带例程)

介绍:list实际是一个双向链表,可以高效的进行插入删除操作。使用:1、头文件#include <list>2、初始化list<int> a{1,2,3}; list<int> a(n);    //声明一个n个元素的列表,每个元素都是0  list<int> a(n, m);  //声明一个n个元素的列表,每个元素都是m  list<int&...

2018-05-18 15:17:04 412

原创 C++ Vector用法(带例程)

介绍:vector是可变大小数组的序列容器。vector是连续存储的,与数组存储相同,区别是大小是动态改变的,可随机访问,因此vector访问速度快。vector在末尾删除添加元素时相对高效,若在其他任意位置添加删除元素则效率更低。使用:1、头文件#include <vector>2、初始化vector<int> vec;        //声明一个int型向量vector...

2018-05-15 17:30:30 5566

转载 XModem协议

XModem协议介绍:XModem是一种在串口通信中广泛使用的异步文件传输协议,分为XModem和1k-XModem协议两种,前者使用128字节的数据块,后者使用1024字节即1k字节的数据块。一、XModem校验和协议1. XModem信息包格式XModem协议最早由Ward Christensen在20世纪70年代提出并实现的,传输数据单位为信息包,信息包格式如下:--------------...

2018-05-09 11:26:45 331

转载 COAP协议全面分析

HTTP与COAP 请求与响应示例HTTP请求(文本格式)POST https://getman.cn/echo HTTP/1.1User-Agent: FiddlerHost: getman.cnContent-Length: 9{temp:22}1234567HTTP响应(文本格式)HTTP/1.1 200 OKServer: NWSsDate: Thu, 07 Dec 201...

2018-05-09 11:26:04 1265

转载 MQTT协议-MQTT协议简介及协议原理

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设...

2018-05-09 09:19:59 385

转载 TCP 协议如何保证可靠传输

一、综述1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。2、数据校验3、数据合理分片和排序:  UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接...

2018-05-08 18:38:31 250

转载 TCP和UDP的最完整的区别

TCP UDPTCP与UDP基本区别  1.基于连接与无连接  2.TCP要求系统资源较多,UDP较少;   3.UDP程序结构较简单   4.流模式(TCP)与数据报模式(UDP);   5.TCP保证数据正确性,UDP可能丢包   6.TCP保证数据顺序,UDP不保证   UDP应用场景:  1.面向数据报方式  2.网络数据大多为短消息   3.拥有大量Client  4.对数据安全性无特殊...

2018-05-08 18:30:02 559

转载 为何要把文件夹形式的rootfs制作成单个rootfs镜像文件

假设目前我们已经有了rootfs,它是文件夹形式的,可以在pc 端浏览的rootfs。但是,我们的目的是:把此rootfs,弄到嵌入式开发板上。而嵌入式开发板上的rootfs所存放到的物理设备,往往都是nand flash。所以此时,没法直接把此rootfs,放到该nand flash上去,所以需要弄成,对应的格式的文件系统的镜像,比如用mk.jffs2制作成jffs2的镜像,用mkyaffs2i...

2018-05-08 17:45:14 1515

转载 如何使用busybox编译和生成最简linux根文件系统(rootfs)

继前几天对uboot和内核编译进行了初步了解之后,昨天开始研究如何制作rootfs根文件系统。昨晚对busybox这个工具有了初步的了解,今天继续深入研究,终于成功的制作出了一套完整可用的最简linux rootfs根文件系统。现记录详细步骤以备日后查阅。一、准备工作1、首先交代系统版本和开发环境操作系统:ubuntu 12.04(64bit);交叉编译工具链:arm-linux-gcc 4.4....

2018-05-08 17:44:39 6341

转载 Linux下bootargs引导参数说明

本文是学习hisi芯片启动过程,不同的芯片启动方式不一样,但都大同小异。 =========================================设置系统启动参数=========================================   必须正确设置bootargs参数或者烧写bootargs镜像才能保证系统正常启动              这个参数设置要传递给内核的信息,...

2018-05-08 17:43:50 1025

转载 文件系统编译进内核

1、利用busybox制作根文件目录。(需要有init 和 linuxrc)2、makemenuconfig 在general setup 中设置 initial ram filesystem and RAM disk 后指定文件系统源文件路径.3、makemenuconfig 在boot options 中指定 kernel command line type选择 always use........

2018-05-08 17:20:46 875

原创 linux中断处理

linux中断相关的系统源码位于/kernel/irq下,request_irq就是定义在这个目录下。跟cpu相关的中断定义位于/arch/arm/mach-maximasp目录下,这个目录下定义了许多跟本型号cpu相关的内容。mach-maximasp是对应cpu的目录。/arch/arm/mach-maximasp/irq.c主要是对gpio中断的一些功能函数定义:static struct ...

2018-05-08 16:17:25 200

转载 ARM中断处理过程

一、前言本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述:1、第二章描述了中断处理的准备过程2、第三章描述了当发生中的时候,ARM硬件的行为3、第四章描述了ARM的中断进入过程4、第五章描述了ARM的中断退出过程本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了...

2018-05-08 15:18:57 18669 1

原创 Kernel启动和加载流程

1、vmlinux.lds.S链接脚本OUTPUT_ARCH(arm)ENTRY(stext) 定义编译内核为arm,程序入口为stext。连接脚本后面定义了SECTIONS2、head.Shead.S主要做的事情是处理u-boot传入的参数,具体如下:判断是否支持这个CPU、判断是否支持这个单板(对比机器ID)、建立一级页表、使能MMU、跳到start_kernel函数head.S在/arch/...

2018-05-08 14:26:29 1534

原创 uboot学习心得(uboot流程分析)max32590芯片

1、代码框架源码解压以后,我们可以看到以下的文件和文件夹: cpu与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、start.S、u-boot.lds。cpu.c:初始化CPU、设置指令Cache和数据Cache等interrupt.c:设置系统的各种中断和异常start.S:是U-boot启动时执行的第一个文件,它主要做最早期的系统初始化,代码重定向和设置系统堆栈,为进...

2018-05-08 10:56:33 981

转载 经典的嵌入式基础硬件知识,搞嵌入式开发必备

嵌入式基础知识做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。总线(Bus)在嵌入式系统中一定会有一块处理器芯片,此外,还有其它的芯片作为外部设备(后面简称外设),这些芯片与处理器协作实现产品的功能。复杂的产品往往是由大量的芯片组成的。那么不可避免的是我们需要将所有的外设与处理器进行相连,...

2018-04-25 13:07:32 373

转载 lwIP移植工作(一)cc.h 与CPU和编译器的相关接口

Lwip的移植主要是三个接口部分:1、与CPU或编译器相关接口(include中cc.h文件)2、与操作系统的接口;3、与底层网卡驱动的接口。一、与CPU或编译器相关接口与CPU或编译器相关接口(include中cc.h文件),主要包括数据长度,字的高低位顺序,编译器对c语言中struct结构字节对齐问题(c语言中struct结构是四字节对对齐的,但lwip中是根据struct结构中不同数据的长度...

2018-04-07 14:33:22 2324

转载 u-boot移植与分析记录之一【S5PV210芯片手册启动顺序部分的翻译】

本系列基于Smart210开发板,对u-boot相关知识进行总结与分析。  本文是对S5PV210芯片手册中启动部分的翻译,原文位于《S5PV210 RISC Microprocessor User's Manual, Revision 1.10》第二部分“系统”中的第六章“启动顺序”。1.1 启动顺序综述  S5PV210内部存储器由64KB ROM和96KB SRAM组成。S5PV210从内部...

2018-03-07 10:53:16 743

转载 linux下多线程之pthread_detach(pthread_self())

写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之

2018-01-31 10:22:38 262

转载 rootfs根文件系统

一、下载并解压根文件系统的源码,进入根文件系统目录二、配置BusyBox1、修改Makefile文件        vim  Makefile         CROSS_COMPILE = arm-linux-         ARCH   =    arm2、.配置编译选项     make   menuconfigBusybox Setting

2018-01-23 10:47:57 1012

原创 rk3128系统&驱动开发分享——(五)xbin执行文件添加

驱动开发过程中经常需要写一些测试代码程序,可以在驱动中添加测试代码,然后应用层调用。也可以直接应用层写程序来测试。这里介绍添加可执行c程序到system/xbin目录下并且直接通过make系统源码就可以自动添加打包到系统中的方法。android系统源码external目录下新建helloworld文件夹。helloworld目录下新建hellowrold.c和Android.mk文件。

2018-01-22 14:28:38 1080

原创 linux应用基础编程及优化调试

1、多线程及同步linux多线程api:pthread_equal 、 pthread_self 、 pthread_create 、 pthread_exit 、pthread_join、pthread_cancel、pthread_cleanup_push、pthread_cleanup_pop、pthread_detach、pthread_mutex_init、pthread_mut

2018-01-17 11:17:05 197

原创 linux系统介绍及驱动子系统介绍

一、驱动分类linux驱动一般分类方式为字符设备驱动、块设备驱动、网络设备驱动。字符设备驱动采用字节流访问方式,如按键、串口、触摸屏、spi外设等。块驱动如U盘、SD卡、nanflash等。块设备驱动需要mount挂载然后才能访问。二、驱动加载及设备访问linux驱动加载分为动态加载和静态加载。动态加载即是驱动编译成.ko,通过insmod加载驱动。静态加载时编译到

2018-01-12 14:55:11 3714

原创 Linux内核驱动调试方法

一、问题发现问题发现可根据系统运行时查询/proc信息(/proc是伪文件系统,主要提供一些系统信息),例如查询/proc/meminfo查询内存信息,也可采用一些内存检查工具来检测。还可以根据系统运行崩溃发现问题。二、调试方法1、内核调试选项配置Kernel hacking下有选型配置,可以打开一些调试相关的然后编译内核。Kernel leak相关配置打开时,可在文件系统

2018-01-11 15:04:00 914

转载 Linux内核内存泄漏工具使用

1. 内核添加内存泄漏功能选项       kernel memory leak detector       kernel debugging       memory leak debugging       Compile kernel with debug info       通过make menuconfig 进入配置选项界面进入kernel h

2018-01-11 13:49:40 702

原创 ARM硬件接口及总线介绍

ARM总线架构:分高速总线和低速总线,类似pc机的南北桥。常用总线接口介绍:uart:接口介绍:uart和com是指物理接口形式,ttl和rs232是指电平信号标准。Uart为4线接口(VCC、GND、TX、RX)采用ttl电平,0为低电平(0V),1为高电平(3.3V或以上)。COM是PC机上的9线接口,采用RS232电平(负逻辑电平,+5-+12V为低电平,-12--5V为

2018-01-11 10:05:51 14736

原创 linux驱动编程基础

•内存操作kmalloc()/kfree()vmalloc()/vfree()vmalloc和kmalloc都用于内核中内存的分配。vmalloc分配的为虚拟上连续的内存,kmalloc分配的是物理地址一一映射过来的连续内存。vmalloc可申请大内存,但速度慢。kmalloc最大能分配32页(32*4K=128K)内存,速度快。copy_from_user()

2018-01-11 10:05:01 205

原创 RK3128系统&驱动开发分享——(四)init.rc及开机启动脚本

1、android启动代码/system/core/init/init.c该启动代码读取并解析init.rc脚本代码如下:init_parse_config_file("/init.rc");然后通过action_for_each_trigger触发响应的动作。2、init.rc在/system/core/rootdir目录下。init.rc的语法主要分动作命令和服

2018-01-05 09:16:39 2529 2

原创 RK3128系统&驱动开发分享——(三)、系统启动

RK3128系统启动大致流程分三个阶段1、boot启动,即rk3128MiniLoaderAll(L)_V2.31.bin和uboot.img启动2、linux内核启动,即kernel.img的启动3、android系统的启动,即ramdisk.img、system.img的启动。这里讲解第三步。android系统启动过程是从init进程开始的。(源码在/system/core/init/init

2018-01-02 15:24:05 3186

原创 RK3128系统&驱动开发分享——(二)、编译及烧录

烧录工具及文档:链接:https://pan.baidu.com/s/1jIvihSE 密码:y67p本文主要讲解三部分:一、编译原理流程讲解二、打包脚本讲解三、生成文件及烧录讲解一、编译原理流程讲解. build/envsetup.sh 配置命令环境(运行源码目录下的build.sh即可)lunch选择编译项目make installclean 清除编

2017-12-28 16:14:47 5290 1

原创 RK3128系统&驱动开发分享——(一)、开发环境搭建

本系列课程主要讲解RK3128平台的系统&驱动开发相关的知识。RK3128为我司基于RK3128平台定制的一款pad设备。基于瑞芯微官网源码开发。android版本采用5.1。本章节主要讲解android系统开发环境搭建及编译基础,针对RK3128平台的源码下载及编译流程参考附件文档。本文主要讲解基础性理论知识,并针对RK3128提供的平台讲解下编译脚本。一、andro

2017-12-20 14:10:13 8611 1

原创 IMAX6Q+DM9000+DP83640设计原理分享

概况:采用飞思卡尔IMAX6Q作为主芯片,主芯片总线外接MAC芯片和PHY芯片实现网络功能以及通过专用的物理层芯片实现1588时钟同步功能。本节只介绍几本原理,具体的驱动开发流程及1588时钟同步协议开发移植流程暂不分享。参考资料:DM9000中文手册、IMAX6Q datasheet分三部分讲解:一、arm总线简单讲解 二、DM9000接口设计 三、DM9000和DP83640的控制流程

2017-12-15 12:13:47 7262 2

空空如也

空空如也

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

TA关注的人

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