自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PUD编码规则

共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。 发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发

2016-09-12 14:53:49 3610

原创 Text模式和PDU模式的区别

发送短消息常用Text和PDU(Protocol   Data   Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于

2016-09-12 11:49:42 624

原创 Linux-C实现GPRS模块发送短信

“GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传输速率又可以分为GPRS模块、EDGE模块和纯短信模块。短信模块只支持语音和短信服务。GPRS,可说是GSM的延续。它经常被描述成“2.5G”,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间。GP

2016-09-12 11:29:07 1209

原创 Hi3520D UART2和UART3是如何加载到内核的

Hi3520D的UART驱动位于linux-3.0.y/drivers/tty/serial/amba-pl011.c添加UART2和UART3需要修改的文件为:linux-3.0.y/arch/arm/mach-hi3520d/core.c和linux-3.0.y/arch/arm/mach-hi3520d/include/mach/irqs.h两个文件;首先修改 c

2016-08-24 22:28:03 961

原创 Hi3520d uImage制作 uboot制作 rootfs制作

首次安装SDK1、hi3520D SDK包位置    在"hi3520D_V100R001***/01.software/board"目录下,您可以看到一个 hi3520D_SDK_Vx.x.x.x.tgz 的文件,该文件就是hi3520D的软件开发包。2、解压缩SDK包    在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用

2016-08-24 21:39:28 1727

原创 Hi3520d uboot uImage rootfs 移植与升级

安装、升级hi3520DDEMO板开发开发环境    # 如果您使用的hi3520D的DEMO板,可以按照以下步骤烧写u-boot,内核以及文件系统,以下步骤均使用网络来更新。    # 通常,您拿到的单板中已经有u-boot,如果没有的话,就需要使用仿真器进行烧写。    # 更详细的操作步骤及说明,请参见01.software\board\documents目录下的《Linux开发

2016-08-24 21:30:36 1487

原创 Linux VTIME VMIN的作用以及使用有效的前提

前提条件 1、fdcom = open(ptty, O_RDWR | O_NOCTTY); //other attributions default /*Canonical Input*/ //termios_new.c_lflag |= (ICANON | ECHO | ECHOE); 2、/*Raw Input*/ //termios_new.c_lflag

2016-08-22 22:31:21 2176

原创 串口初始化配置

在基于AT91的嵌入式linux中接收串口数据时,发现对于接收的数据经常出现接收不完整的现象。一帧的数据可能会被当做两帧接收,导致对于一帧数据接收出现问题。虽然这种情况在一般情况下,并不是经常出现,但是只要数据量稍微大一些,情况就会出现。于是仔细看了程序中关于串口配置这一块的程序,[cpp] view plain copyint se

2016-08-22 14:34:12 1808

原创 linux下串口的阻塞和非阻塞操作

有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY;第二个是可以在打开串口之后通过fcntl()函数进行控制。阻塞的定义:       对于read,block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,移植到串口输入缓冲区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数;

2016-08-21 23:25:36 547

原创 进程 、进程组、会话、控制终端之间的关系

一个进程组可以包含多个进程      进程组中的这些进程之间不是孤立的,他们彼此之间或者存在者父子、兄弟关系,或者在功能有相近的联系。      那linux为什么要有进程组呢?其实提供进程组就是方便管理这些进程。假设要完成一个任务,需要同时并发100个进程,当用户由于     某种原因要终止这个任务时,要是没有进程组,就需要一个个去杀死这些进程,设置了进程组之后,就可以对

2016-08-21 14:47:39 397

原创 C语言串口驱动程序

驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一样的代码来操作,至少2440和树莓派是通用的。分享代码如下:[cpp] view plain copy#include   #include   #include   #include   #include   #include   #inc

2016-08-03 23:14:07 1560

原创 flsah的分类

1. flash按照内部存储结构不同,分为两种:nor flash和nand flash。nor flash:像访问SDRAM一样,按照数据/地址总线直接访问, 可写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址是线性结构,多用于程序代码的存储.nand flash:只有8位/16位/32位甚至更多位宽的总线,每次访问,都要将长地址分为几部分,一点点的分布传入才能访问

2016-07-28 15:10:13 429

原创 Linux进程状态解析之R、S、D、T、Z、X

Linux进程状态解析之R、S、D、T、Z、X;Linux是一个多用户,多任务的系统,可以同时运;众所周知,现在的分时操作系统能够在一个CPU上运;在linux系统中,每个被运行的程序实例对应一个;Linux进程状态:R(TASK_RUNNING;只有在该状态的进程才可能在CPU上运行;很多操作系统教科书将正在CPU上执行的进程定义为;Linux进程状态:SLinux进程状态解析之R、

2016-07-01 20:44:33 2573

原创 IO端口和IO内存的区别及分别使用的函数接口

IO端口和IO内存的区别及分别使用的函数接口          每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没

2016-07-01 13:49:54 1372

原创 ultraedit正则表达式

一般使用ultraedit中的Perl风格的正则表达式,下面是perl正则的基本语法perl中的元字符如下: ^    表示一行的开头;$     表示一行的结尾;( )   表示一个匹配块的,可以对匹配上的块通过$1,$2...进行读取,但是无法写;$0表示这个perl文件/     表示用来进行转义的意思,比如/n表示换行符;

2016-06-25 23:55:50 2413

原创 Linux--文件结构体struct file

代码:struct file {   struct file *f_next,**f_pprev;   struct dentry *f_dentry;   struct file_operations *f_op;   mode_t f_mode;   loff_t f_pos;   unsigned int f_count,f_flags;   unsigned

2016-06-21 18:48:56 714

原创 C++ 高级篇(一)—— 模板(Templates)

模板(Templates)是ANSI-C++ 标准中新引入的概念。如果你使用的 C++ 编译器不符合这个标准,则你很可能不能使用模板。  函数模板( Function templates)模板(Templates)使得我们可以生成通用的函数,这些函数能够接受任意数据类型的参数,可返回任意类型的值,而不需要对所有可能的数据类型进行函数重载。这在一定程度上实现了宏(

2016-06-21 14:39:35 1407

原创 C++ 高级篇(二)—— 名空间 (Namespaces)

通过使用名空间(Namespaces)我们可以将一组全局范围有效的类、对象或函数组织到一个名字下面。换种说法,就是它将全局范围分割成许多子域范围,每个子域范围叫做一个名空间(namespaces).使用名空间的格式是: namespace identifier { namespace-body }这里identifier 是一个有效的标示符,namespa

2016-06-21 14:38:51 301

原创 C++ 高级篇(三)—— 出错处理

本节介绍的出错处理是ANSI-C++ 标准引入的新功能。如果你使用的C++ 编译器不兼容这个标准,则你可能无法使用这些功能。在编程过程中,很多时候我们是无法确定一段代码是否总是能够正常工作的,或者因为程序访问了并不存在的资源,或者由于一些变量超出了预期的范围,等等。这些情况我们统称为出错(例外),C++ 新近引入的三种操作符能够帮助我们处理这些出错情况: try, throw

2016-06-21 14:37:59 296

原创 C++ 高级篇(五)—— 预处理指令

预处理指令是我们写在程序代码中的给预处理器(preprocessor)的 命令,而不是程序本身的语句。预处理器在我们编译一个C++程序时由编译器自动执行,它负责控制对程序代码的第一次验证和消化。所有这些指令必须写在单独的一行中,它们不需要加结尾的分号;。#define在这个教程的开头我们已经提到了一种预处理指令: #define ,可以被用来生成宏定义常量(define

2016-06-21 14:37:17 308

原创 C++ 标准函数库 —— 文件的输入输出 (Input/Output with files)

C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打

2016-06-21 14:36:46 298

原创 C++ 面向对象(四)—— 多态 (Polymorphism)

基类的指针(Pointers to base class)继承的好处之一是一个指向子类(derived class)的指针与一个指向基类(base class)的指针是type-compatible的。 本节就是重点介绍如何利用C++的这一重要特性。例如,我们将结合C++的这个功能,重写前面小节中关于长方形rectangle 和三角形 triangle 的程序:// p

2016-06-21 14:35:55 261

原创 C++ 面向对象(三)—— 类之间的关系

友元函数(Friend functions)在前面的章节中我们已经看到了对class的不同成员存在3个层次的内部保护:public, protected 和 private。在成员为 protected 和 private的情况下,它们不能够被从所在的class以外的部分引用。然而,这个规则可以通过在一个class中使用关键字friend来绕过,这样我们可以允许一个外部函数获得访问clas

2016-06-21 14:35:01 316

原创 C++ 面向对象(二)—— 操作符重载

C++ 实现了在类(class)之间使用语言标准操作符,而不只是在基本数据类型之间使用。例如:int a, b, c;a = b + c;是有效操作,因为加号两边的变量都是基本数据类型。然而,我们是否可以进行下面的操作就不是那么显而易见了(它实际上是正确的):struct { char product [50]; float price; } a, b, c;a = b +

2016-06-21 14:34:19 286

原创 C++ 面向对象(一)—— 类(Classes)

类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struct只能包含数据元素。类定义的形式是:[cpp] view plain copy class class_name {      permission_label

2016-06-21 14:33:44 1129

原创 C++ 高级数据类型(六)—— 自定义数据类型

前面我们已经看到过一种用户(程序员)定义的数据类型:结构。除此之外,还有一些其它类型的用户自定义数据类型: 定义自己的数据类型 (typedef)C++ 允许我们在现有数据类型的基础上定义我们自己的数据类型。我们将用关键字typedef来实现这种定义,它的形式是:typedef existing_type new_type_name;这里 existing_

2016-06-21 14:33:13 272

原创 C++ 高级数据类型(五)—— 数据结构

一个数据结构是组合到同一定义下的一组不同类型的数据,各个数据类型的长度可能不同。它的形式是:struct model_name {type1 element1;type2 element2;type3 element3;..} object_name;这里model_name 是一个这个结构类型的模块名称。object_name 为可选参数,是一个或多个

2016-06-21 14:32:21 687

原创 C++ 高级数据类型(四)—— 动态内存分配

到目前为止,我们的程序中我们只用了声明变量、数组和其他对象(objects)所必需的内存空间,这些内存空间的大小都在程序执行之前就已经确定了。但如果我们需要内存大小为一个变量,其数值只有在程序运行时 (runtime)才能确定,例如有些情况下我们需要根据用户输入来决定必需的内存空间,那么我们该怎么办呢?答案是动态内存分配(dynamic memory),为此C++ 集成了操作符new 和d

2016-06-21 14:31:39 273

原创 C++ 高级数据类型(三)—— 指针

我们已经明白变量其实是可以由标识来存取的内存单元。但这些变量实际上是存储在内存中具体的位置上的。对我们的程序来说,计算机内存只是一串连续的单字节单元(1byte cell),即最小数据单位,每一个单元有一个唯一地址。计算机内存就好像城市中的街道。在一条街上,所有的房子被顺序编号,每所房子有唯一编号。因此如果我们说芝麻街27号,我们很容易找到它,因为只有一所房子会是这个编号,而且我们知道它会

2016-06-21 14:31:05 1208

原创 C++ 高级数据类型(二)—— 字符序列

前面基础知识部分讲C++变量类型的时候,我们已经提到过C++的标准函数库提供了一个string类来支持对字符串的操作。然而,字符串实际就是一串连续的字符序列,所以我们也可以用简单的字符数组来表示它。例如,下面这个数组:char jenny [20];是一个可以存储最多20个字符类型数据的数组。你可以把它想象成:理论上这数组可以存储长度为20的字符序列,但是它也可

2016-06-21 14:30:07 404

原创 C++ 高级数据类型(一)—— 数组

数组(Arrays) 是在内存中连续存储的一组同种数据类型的元素(变量),每一数组有一个唯一名称,通过在名称后面加索引(index)的方式可以引用它的每一个元素。也就是说,例如我们有5个整型数值需要存储,但我们不需要定义5个不同的变量名称,而是用一个数组(array)来存储这5个不同的数值。注意数组中的元素必须是同一数据类型的,在这个例子中为整型(int)。例如一个存储5个整数叫做

2016-06-21 14:29:30 300

原创 C++ 控制结构和函数(三)—— 函数II(Functions II)

参数按数值传递和按地址传递(Arguments passed by value and by reference)到目前为止,我们看到的所有函数中,传递到函数中的参数全部是按数值传递的(by value)。也就是说,当我们调用一个带有参数的函数时,我们传递到函数中的是变量的数值而不是变量本身。 例如,假设我们用下面的代码调用我们的第一个函数addition :int x=5, y=

2016-06-21 14:28:38 229

原创 C++ 控制结构和函数(二) —— 函数I(Functions I)

通过使用函数(functions)我们可以把我们的程序以更模块化的形式组织起来,从而利用C++所能提供的所有结构化编程的潜力。一个函数(function)是一个可以从程序其它地方调用执行的语句块。以下是它的格式: type name ( argument1, argument2, ...) statement 这里:type 是函

2016-06-21 14:27:54 240

原创 C++ 控制结构和函数(一) —— 控制结构

一个程序的语句往往并不仅限于线性顺序结构。在程序的执行过程中它可能被分成两支执行,可能重复某些语句,也可能根据一些判断结果而执行不同的语句。因此C++ 提供一些控制结构语句 (control structures) 来实现这些执行顺序。为了介绍程序的执行顺序,我们需要先介绍一个新概念:语句块(block of instructions)。一个语句块(A block of instructi

2016-06-21 14:27:11 226

原创 C++基础知识(五)—— 基本输入输出

控制台(console)是电脑的最基本交互接口,通常包括键盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备,而 屏幕为标准输出设备。在C++的iostream函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerr和clog也已经被实现――它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或

2016-06-21 14:24:58 372

原创 C++基础知识(四)—— 操作符/运算符

前面已经学习了变量和常量,我们可以开始对它们进行操作,这就要用到C++的操作符。有些语言,很多操作符都是一些关键字, 比如add, equals等等。C++的操作符主要是由符号组成的。这些符号不在字母表中,但是在所有键盘上都可以找到。这个特点使得C++程序更简洁,也更国际化。运算符是C++语言的基础,所以非常重要。    你不需要背下所有这一小节的内容,这些细节知识仅供你以后需要时参考 。

2016-06-21 14:23:43 1261

原创 C++基础知识(三)—— 常量

一个常量(constant)是一个有固定值的表达式。字(Literals)字是用来在程序源码中表达特定的值。在前面的内容中我们已经用了很多的字来给变量赋予特定的值。例如:a = 5;这句代码中5就是一个字常量。字常量(literal constant)可以被分为整数(Integer Numbers), 浮点数(Floating-Poi

2016-06-21 14:22:58 456

原创 C++基础知识(二)—— 变量和数据类型

你可能觉得这个“Hellow World”程序用处不大。我们写了好几行代码,编译,然后执行生成的程序只是为了在屏幕上看到一句话。的确,我们直接在屏幕上打出这句话会更快。但是编程并不仅限于在屏幕上打出文字这么简单的工作。为了能够进一步写出可以执行更有用的任务的程序,我们需要引入变量(variable)这个的概念。让我们设想这样一个例子,我要求你在脑子里记住5这个数字,然后再记住2这个数字。你

2016-06-21 14:22:29 397

原创 C++基础知识(一)—— C++程序结构

下面我们从一个最简单的程序入手看一个C++程序的组成结构。// my first program in C++#include using namespace std;int main() {    cout     return 0;}Hello World!      上面左侧显示了我们的第一个程序的源代码,代码文件名

2016-06-21 14:21:56 302

原创 C++学习基础篇 —— 引用(&)的用法和应用

一、引用简介  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。  引用的声明方法:类型标识符&引用名=目标变量名;【例1】:[cpp] view plain copy int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名    说明:  (1)&

2016-06-21 14:21:25 970

空空如也

空空如也

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

TA关注的人

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