自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uboot 解决 SF: Unsupported manufacture 问题

拿了个新板子,烧了程序,uboot冒出了这个错误.跟踪了一下,发现是不识别flash型号的问题.这...,都能跑uboot了,还不识别flash??追踪了下代码,却也发现了识别flash的合理性:总得把flash的页大小,容量告诉uboot,之后uboot的读,写才能顺利进行./* search the table for matches in shift and id */ ...

2018-09-05 20:50:44 1838 1

原创 linux l2tp client 简单使用

关于l2tp vpn 的讲述, h3c就讲得不错,请参考:http://www.h3c.com.cn/MiniSite/Technology_Circle/Technology_Column/ICG/ICG_Technology/201004/671383_97665_0.html2tp比pptp的拨号方式多了点步骤, pptp 采用 pppd call 的方式, 而l2tp采用 xl2t...

2018-08-14 10:28:09 9423

原创 linux pptp client 简单使用

pptp是一种基于pppd 的点对点vpn协议.pptp是建立在ip的基础上, 不像l2tp一样可在多种类似于ip协议的基础上进行连接,如atm网络. 它的可靠性主要是依赖底层的tcp来确立可靠性的传输. 相比较l2tp, 它会更节省cpu 因为l2tp需要自己去做包的序号分拆重合.pptp是一种能够加密的协议,可用微软提出的MPPE加密.以下是一个简单的pppd call 的配置文件...

2018-08-13 11:50:25 5605

原创 针对端口转发的iptables设置

场景:一个路由器上运行了监听着80端口的web。路由器有lan口,有wan口,lan口下设备允许访问该路由器的80端口。而wan口的设备有以下要求:    1.禁止访问路由器80端口    2.允许指定的ip地址(包含 ipv4 ipv6)访问8888端口来进入网页针对这个需求,以下是我的解决思路:    1.用iptables 禁止来自wan口的数据访问设备80端口;    2.筛选ip,将符合...

2018-05-23 09:30:09 2029 1

原创 嵌入式linux系统由内核态转用户态过程

接触过了几款嵌入式linux 机子,每个机子里都有个叫开机启动脚本的文件,在后续添加开机启动程序时总是不断地追加在这个文件里。此为知其然不知其所以然,究竟是谁决定了这个开机启动文件?一路追本溯源,找到了/etc/inittab 这个文件,搜索到::sysinit:xxxx 这么个地方,这里的xxxx就值代了开机启动的脚本,于是搜了一把,从以下两篇文章中找到这个文件的作用http://www.xsh...

2018-03-01 16:59:22 421

原创 cJSON应用

目的:    对字符串进行处理一直是c语言的一个弱项,如果要形成某种格式的数据,要一个一个地去规范化格式,是很恼火的,因此需要使用工具去做这种字符串格式的事。当需要的数据格式为json时,我们可以使用现有的cJson来处理,以达到形成json,解析json的目的。编译时注意事项:    在linux下编译cJSON文件,需要链接libm库,如 gcc *.c -l m一.什

2017-12-15 17:07:12 349

原创 指向结构体的指针数组,应用

数组指针跟指针数组,差异看起来很小,结果却千差万别:数组指针: struct param (*p)[100]        p+1 的结果是地址会增大 100个 sizeof(struct param),这种常用来去对二维数组进行位置的索引。指针数组: struct param *p[100]        这里创建了一个100个struct param 指针的数组, p+1是指向

2017-12-13 21:46:07 20586

原创 linux 防火墙之nat表

NAT表,作用是对网络地址进行转换,主要有两个功能:1. DNAT 网络目的地址转换; 2. SNAT 网络源地址转换。这里有两个应用场景便于理解NAT表的两个功能:1.公司里有几台服务器需要对外提供服务,但公司只有一个外网ip地址,怎么让几台服务器共用一个ip地址?2.家庭里很手机、电脑等设备,一般会通过wifi连到路由器上,然后上外网,仔细推敲下手机电脑获取的是路由器分配的

2017-11-01 21:42:07 3779

原创 linux 防火墙 认知

写博客的目的,一来是巩固所学知识,与大家分享交流经验;二来是记下暂时认知,待往后推翻昔日认知。如若有原理不对之处,欢迎大家指正。本篇要解决几个疑问:防火墙的作用防火墙的工作原理几个常见的表和链一 防火墙作用

2017-10-18 21:43:38 221

原创 iptables 浅谈

地址伪装: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE将从eth1出去的源地址,转成eth1的地址发出去。

2017-09-19 18:38:12 268

原创 经验分享--简工

常找简工讨论有益身心。在做udp、tcp、串口等传输协议时,不要依赖于底层会把数据接收完整,要在应用层实现控制。拿串口来说,阻塞或非阻塞模式下,接收到的数据不一定完整,如果把不完整的数据扔给应用层,也并没有什么用,因此简工提出一种思路:串口recv只管接收,不断接收(以\n作为结束符号),然后把数据按照接收顺序扔在一个 位置 ,由应用层去把握如何读取这部分数据。这能保证所有的数据能接收

2017-08-11 09:51:12 276

原创 ARM汇编指令集2

常用ARM指令1:数据处理指令数据传输指令:mov     mov r1,r2    mov r1,#0xff01mvn    mvn和mov用法是一样的,区别是mov是原封不动的传递,而mvn是按位取反后传递    如r1=0xff,然后mov r0,r1后,r0=0xff,    但 mvn r0,r1时,r0=0xffffff00.算术运算

2016-08-26 17:06:41 550

原创 ARM汇编指令集1(16_08_26_02)

指令与伪指令(汇编)指令是CPU机器指令的助记符经过编译后会得到一串10组成的机器码,可以由CPU读取执行。(101010太难记了,用mov,bl这些助记符,人比较容易看懂);(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。两种不同风格的ARM指令1)ARM官方的ARM汇编风格:

2016-08-26 13:51:56 559

原创 ARM的异常处理方式简单介绍(16_08_26_01)

异步与同步的区别:异步:响应模式,靠中断(一种特殊的异常)来实现同步:一般会用到同步时钟。A会一直等待着B。什么是异常1)正常工作之外的流程都叫异常;2)异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作(也叫现场保护)。3)中断是异常的一种。异常向量表1)所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件

2016-08-26 11:22:39 455

原创 Strategy模式(策略模式 行为型)

与Template模式相类似,策略模式要解决的也是算法框架(接口)与具体算法实现的解耦。Template使用的是继承的方式,而Strategy模式使用的是组合(委托)的方式。以下为Strategy模式的UML类图Strategy基类:声明了接口,其接口具体实现就交由其子类去实现。Context类Context类: Context需要用到那个Strategy类的子类,就用它的

2016-08-24 12:31:35 440

原创 Template模式(模板模式 行为型)

面向对象编码的过程中,经常会遇到一种情况:对一个业务逻辑(算法实现),在不同的对象中有不同的细节实现,但是算法的框架是相同的。Template模式提供的就是这么一个实现框架:采用继承的方式,将算法框架放在了抽象基类中,并定义好细节接口,子类去实现细节接口。Template模式实际上利用的是面向对象的多态特性,以及算法与具体实现的解耦。以下为Template模式的UML类图。也即

2016-08-24 10:49:52 210

原创 Facade模式(外观模式 结构型)

问题抛出:对于C++程序来说,其编译过程可分为4个步骤:1)预编译;2)编译成汇编;3)汇编编译成机器码;4)链接成文件。如果每一次编译程序,都要手动去按照这样的流程去编译,那操作将会很麻烦。什么是Facade模式:用过IDE开发环境的程序员都知道,它一般都会提供一个编译按钮,按了之后就会进行上面四个步骤,我们只需静待结果就行了。这个编译按钮可以理解为Facade模式,它提

2016-08-24 09:50:21 244

原创 Singleton模式(单例模式 创建型)

一般的,我们看到的,用c++实现单例模式主要有两种: 饿汉模式 和 懒汉模式。以下为二种模式应用。饿汉模式:指单例实例在程序运行时被立刻执行初始化:这种模式很好,但类的静态成员m_data成员初始化时间并不确定,只有当编译器执行到 SignletonSingleton::m_data 时,getInstance()才获得资源。另一种实现方法,可以很好地解决这一冲突。

2016-08-24 08:43:58 237

原创 Proxy模式(代理模式 结构型)

意图:为其他对象提供一种代理以控制对这个对象的访问。原理:当我们要访问一个对象时,可以通过一个中间层间接地去访问,这个中间层就叫做Proxy代理。例如一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。与适配器模式、装饰模式的区别:1)代理模式和适配器模式的区别:适配

2016-08-23 17:58:57 239

原创 Composite模式(组合模式 结构型)

适用场景1)在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。2)在一个使用面向对象语言开发的系统中需要处理一个树形结构。3)在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一些新的类型。主要优点:1)可以清楚地定义分层次的复杂对象,让客户端忽略了层次的差异,方便对整个层次结构进行控制。2)在组合模式中

2016-08-22 17:16:52 317

原创 Decorator模式(装饰模式 结构型)

当要为一个已存在的类,增添新的功能时,一般的会有两种做法,改变或者继承。改变的意思是直接在该类上新增功能:好处是够直接,坏处是会对已有的架构产生较大影响,破坏开源闭合原则。而继承是比较明朗的做法,但坏处是类的继承深度会加深,且增加职责是静态的,不够灵活。有一种方法较Decorator模式,它提供一种方法,即不使用继承的方法,而通过新增 添职责的类,起到为该类动态增加功能的作用,其结构如下:

2016-08-22 12:45:09 231

原创 Adapter模式(适配器模式 结构型)

1.意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作得那些类可以一起工作。2.别名:包装器Wrapper。3.动机:有些工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。举个栗子。(发觉这个栗子好难举啊,还是用下别人的好了)有一个绘图编辑器,这个编辑器允许用户绘制和排列基本图元(线、多边形和正文等)

2016-08-19 16:35:28 369

原创 Bridge模式(桥接模式 结构型)

Bridge是设计模式中比较复杂和难以理解的模式之一,即使用组合的方式将抽象和实现彻底地解耦,这样的好处是抽象和实现可以分别独立地变化,系统的耦合性也得到了很好的降低。这句话太精简,以至于我很难知道它在说什么……我觉得这么说更恰当,bridge使用组合的方式,使(抽象A类)和(A类的组成部分抽象B类)的实例化彻底地解耦。这样说我觉得是最贴切的。举个栗子。我想要创作一个笔类,那么做为

2016-08-18 18:14:48 811

原创 Builder模式(建造者模式 创建型)

GoF说,在两种情况下适合使用Builder模式:1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2)当构造过程必须允许被构造的对象有不同的表示时。硬咬着文字去解读,是很难理解的,要容易理解可以用类比、图例的手法,加快理解这个模式。举个栗子:Director是设计工程师,他设计了房子要先建地基、二建主体、三建砖墙。然后交给工人去建造。工人A去建造

2016-08-17 15:06:43 260

原创 Abstract Factory模式(抽象工厂模式 创建型)

抽象工厂对应产品族的概念,例如每个汽车公司可能都要生产轿车、货车、SUV等汽车,那么每个公司都有生产轿车、货车、SUV等车的方法。抽象工厂是要创建一组相关或者相互依赖的对象。特点:应对产品族概念而生,增加新的产品线容易,但是无法增加新的产品。AbstarctFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的类中,维护这样一个创建类总比维护n多相关对象的创建

2016-08-16 15:09:30 306

原创 Factory模式(工厂模式 创建型)

Factory模式,可分为2种,一种为简单Factory模式,另一种为Factory方法模式,这2种都是使用广泛的Factory模式,侧重点不同,优缺点也不同。一 简单Factory模式意图:定义一个工厂类,让调用客户端决定工厂生产哪一种产品。何时使用:屏蔽产品生产细节,根据用户输入条件来抉择。这种模式中,工厂类扮演上帝的角色,用户告诉工厂类需要什么样的产品,工厂类就去创造出来

2016-08-16 08:55:27 496

原创 项目常用的linux shell命令

在此记录,在linux下常用到的命令。(保持更新中)查看僵尸进程: ps -ef|grep defunc删除共享内存(linux): ipcrm -M 0x12345678

2016-04-20 10:21:29 283

原创 c/c++ 读取当前时间

时间编程是个重要概念,如果程序需要在确定时间进行采样,用sleep()等函数来做时间间隔精度会不准,而直接读取出系统的时间来判别是比较准确的一种途径了。在此我写了一个示例,把当前本地时间给打印出来,程序很简单,大家直接参照即可。 1 #include 2 #include 3 int main(int argc,char **argv) 4 { 5 time_t

2016-04-20 09:33:14 454

原创 在windows下打开关闭外部应用程序的方法。

项目里有几个应用程序,它们之间有先后关系,有时需要在某个程序中,重新启动另外一个应用程序,因此需要找到windows api来实现。在这里列举三种情况:在程序中,纯粹打开外部应用程序、纯粹关闭外部应用程序、打开应用程序后过会儿再关闭它。我在这里只讲方法,不讲原理(因为windows api 太恶心了)1,纯粹打开外部应用程序:使用ShellExecute()#include#in

2016-04-12 12:32:54 7650

原创 尽量以const、enum、inline替换#define

许久以来,在程序设计的世界里我一直处于羸弱的姿态,习得代码的外貌却深入不到它的精髓,对于一些设计技巧基本不去研究,因此代码看起来毫无章法,混乱至极。要想成为一个大师级人物,就要有章有法,写出有意味的code。因此决心潜下心来学习c++程序的设计技巧,通过几本书来学习它,完善自身。门外万物皆是空,应以不变应万变。替换#define,并不是替换所有的#define,而是某些情况下#de

2016-04-10 22:35:03 276

原创 c++ 类成员函数 作回调函数

今天写了一个类,类中用到了创建线程函数:_beginthreadex()  (windows下的创建线程函数,这其实是一个C标准的线程函数,但跟windows联系紧密,只要是为解决Create_Thread()函数创建的线程如果调用了C函数库,就会发生内存泄露,所以这是个安全的函数,建议用这个。)  以下是一个成员函数的某段代码: HANDLE hth; unsigned

2016-03-11 17:44:24 641 1

原创 c++ 堆栈解退的概念

刚在看书的时候,了解到了一个很酷的概念——堆栈解退。 也就是使用try块时,try块没有直接调用引发异常的函数,而是调用了对引发异常的函数进行调用的函数,当会引发异常的函数发生异常时,程序的跳转,堆栈的变化锁所涉及到的一项技术。它具有释放堆栈中自动变量,调用堆栈中自动类对象析构函数的能力,有了它,当发生上述异常时,就不会产生内存泄露。贴个图片大家一起看看。

2016-02-19 17:08:24 1319

原创 c++ 模板--包含本身就是模板的参数

模板可以包含类型参数(如typename T)和非类型参数(如 int n)。模板还可以包括本身就是模板类的参数。这种参数是模板新增的特性,用于实现STL。模板参数格式为 templateclass Thing . 我们使用模板,就是为了泛型编程,如使用类型参数  typename T,就能实现相同算法下不同类型参数的统一编程。如要实现两个数的互换,按C语言的做法,要先知道

2016-02-19 11:51:29 602

原创 c++ 函数模板

函数模板的格式templatevoid Swap(Any &a, Any &b){Any temp;temp = a;a = b;b = temp;}使用上述模板,可完成两个不同数据类型的转换。how  to  use?就这样:int  i= 5;int j = 10;Swap(5,10);就可以了,完成两个数的转

2016-02-18 17:20:24 208

原创 把int强制转化为float,float 存储了些啥?

int  j = 1;float a = (float) j;你们猜,a里面存储的值,用十六进制展开,会是什么?答案是:0x3f800000.为什么会是这样的值,现在来解释一下。这里有两条公式:公式一: V = (-1)^S  *  M  *  2^E公式二: E =  e - (2^7  -  1)float 是一个32 位的 数。

2016-01-17 15:54:14 3053

原创 关于把整形数据转化为浮点型float 输出。

我用rs485通信时,需要接收两个16位的寄存器的数据,然后把这两个16bits的数据,组合成一个float型数据。两个寄存器要传输的值为 3.14 ,按照modbus RTU 的float 方式发送,则会发送0xc4048f5c3 ,此时寄存器的存储方式为:高字节在后,低字节在前,低字在前,高字在后。则寄存器1的值为:f5c3寄存器2的值为4048然后在接收端,用

2016-01-17 12:52:37 15247

原创 windows下串口编程一(2015.12.29)

由于工作需要用到windows下的串口编程,今天就去搜了下相关方面的内容,为了方便记忆,就写了个短小的程序,为方便回顾,也为了跟大家进行交流学习,就写了这个博客。程序功能:1:打开串口com2,设置它波特率;2:设置串口的读超时限制;3:循环监听串口com2,有数据就读出来,然后再写回去。以下为示例程序:#include#includeusing

2015-12-29 20:33:56 503

原创 tq2440 的dma裸机驱动

DMA是一种提高CPU效率的工具。如果让cpu去负责搬运数据,效率是十分低下的,因为在这个过程中,cpu就只能做这么一件事。因此DMA就应运而生。只要告诉dma,要搬运的数据源地址,以及要搬运到哪里去的地址,何种方式,使能它,DMA就会获取总线控制权,自动地搬运数据,从而解放cpu,提高效率。tq2440的dma裸机驱动,按以下方式进行初始化://初始化原地址//初始化目的地址

2015-08-10 12:22:01 583

原创 arm9 bootloader 的 MMU配置与使用--section

1 #define GPBCON (volatile unsigned long*)0xA0000010 2 #define GPBDAT (volatile unsigned long*)0xA0000014 3 4 /* 5 * 用于段描述符的一些宏定义 6 */ 7 #define MMU_FULL_ACCESS (3 << 10) /* 访问权限

2015-07-19 22:56:30 1769

原创 C main的反汇编简单介绍

在linux下写了个简单的C程序,如下: 1 #include 2 int main() 3 { 4 int a; 5 a++; 6 return a; 7 }用arm-linux-gcc -g test.c -o test 得到test可执行文件,然后进行反汇编:arm-linux-objdump -D -S test  >dump ,进入d

2015-07-17 12:50:48 707

空空如也

空空如也

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

TA关注的人

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