自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bad_good_man的专栏

不卑不亢,不慌不忙。头发一甩,纵横四海。

  • 博客(50)
  • 收藏
  • 关注

原创 嵌入式文件系统——Cramfs、JFFS2和YAFFS2概述

文件系统概述所谓文件系统,实际上就是在一个具体的存储设备上任何文件的组织和目录。这个设备可能是各种RAM、NAND FLASH、NOR FLASH等DOC设备,还有以NAND FLASH为基础的各种存储卡等。目前,针对不同的设备和应用有很多文件系统可供选择,例如EXT2、TEMPFS、RAMDISK、CRAMFS、JFFS1/2、YAFFS1/2、XFS等。除此之外,还有很多供应商提供的商用文件系统

2015-12-17 11:32:55 1679

原创 ARM、X86和MIPS主流架构优缺点分析

三种主流芯片架构1. ARMARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM处理器的主要特点是:体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容

2015-12-14 19:57:41 27029 1

原创 嵌入式系统的性能优化

嵌入式Linux系统的性能优化研究嵌入式系统的启动速度因设备的性能和代码的质量而异,但总体而言,从消费者的角度考虑,系统的启动速度肯定是越快越好。尤其是某些行业的设备,如监控行业,如果设备的启动时间过长,那么很可能被不法分子利用,造成恶劣的影响。因此,对嵌入式系统进行性能优化,加快设备的启动时间为项目后期必须进行的一项工作。需要注意的是:嵌入式Linux设备的优化不是一蹴而就的,而是一个不断优化,不

2015-12-09 20:41:04 6901

原创 Sublime Text 3快捷键

Sublime Text 3功能非常强大,甚至可以取代sourceinsight打开整个工程。利用Sublime Text 3打开工程,甚至都不需要同步文件,就可以在整个工程内部搜索各个文件及函数,搜索速度非常块,更重要的是,界面非常干净整洁好看,让人爱不释手。 现将常用的Sublime Text 3快捷键总结如下,相信一定会让你的Sublime Text 3之旅更加顺心如意,得心应手。1 搜索C

2015-12-05 14:23:55 1119

转载 嵌入式Linux系统启动过程分析

一 启动嵌入式系统在启动时,引导代码、操作系统的运行和应用程序的加载主要有两种架构,一种是直接从Nor Flash启动的架构,另一种是直接从Nand Flash启动的架构。1 从Nor Flash启动NorFlash具有芯片内执行(XIP,eXecute In Place)的特点,在嵌入式系统中常做为存放启动代码的首选。从NorFlash启动的架构又可细分为只使用Nor Flash

2015-12-03 19:30:18 1061

原创 UltraEdit高级技巧集锦

UltraEdit是一款强大的windows环境下的编辑器,受到很多程序员的青睐。掌握一些UltraEdit的高级使用技巧,不仅可以小装一下,而且更重要的是可以使工作事半功倍。现将自己用到的UltraEdit高级技巧总结如下。一 常用快捷键按照常用程度进行划分,从五星到一星:★★★★★转换所选文字为小写 CTRL + F5转换所选文字为大写 Alt

2015-12-01 19:19:32 1285

原创 beyond compare 中文乱码问题解决方法

beyond compare是程序员必备的文本比较软件,但是中文乱码问题困扰着很多人。以下是中文乱码问题的两种解决办法:办法一:点击工具栏中的format→encoding中选择中文简体编码。办法二:点击菜单栏中的tools→file formats→everything else→encoding中选择中文简体编码。

2015-11-30 14:58:22 5518

原创 Makefile进阶——自动化变量

如何书写一个命令来完成从不同的依赖文件生成相应的目标?因为在每一次的对模式规则的解析时,都会是不同的目标和依赖文件。自动化变量就是完成这个功能的。所谓自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了。这种自动化变量只应出现在规则的命令中。下面是所有的自动化变量及其说明:$@表示规则中的目标文件集。在模式规

2015-11-27 16:23:38 801

原创 Makefile的obj-y和obj-m语句

有人问我在看uboot源码时,看到如下的Makefile语句怎么理解: obj-y += api.o api_display.o api_net.oapi_storage.oobj-$(CONFIG_ARM) += api_platform-arm.oobj-$(CONFIG_PPC) += api_platform-powerpc.o在此解释如下:obj-y

2015-11-27 15:25:43 7830

转载 uboot源码及启动过程分析

一 uboot源码下载地址:ftp://ftp.denx.de/pub/u-boot/在此网站可以下载到最新的uboot,同时也可以根据需要下载各个不同时期版本的uboot。二 uboot源码整体框架源码解压以后,我们可以看到以下的文件和文件夹:.├── api├── arch├── board├── common├── configs├── disk

2015-11-27 15:16:28 3355

转载 Linux编程——makefile编写技巧大全

1. Makefile 简介本来想自己写一些makefile的东西,但是在网上查资料时发现这篇文章,感觉写得很详细,排版也很不错,现转载过来。特此声明。原文地址:http://www.cnblogs.com/wang_yb/p/3990952.htmlMakefile 是和 make 命令一起配合使用的.很多大型项目的编译都是通过 Makefil

2015-11-24 14:47:57 5271

原创 Linux编程——文件操作

文件在Linux系统中是一个广泛的概念,Linux将所有的硬件设备当作文件来处理,因此了解文件操作是十分重要的。(一)文件和目录操作1.stat  获取文件属性       #include        #include        #include        int stat(const char *filename,struct stat *buf);   

2015-11-13 19:47:57 2737

原创 Linux编程——进程与线程

(一) 理论部分1.进程与线程进程进程(process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.进程本质上是正在执行的一个程序,是容纳运行一个程序所需要所有信息的容器。与一个进程相关的是进程的地址空间(address space)和进程表(process table)。进程的地址空间包括代码段、数据段、堆栈段。下面画出了

2015-11-13 19:39:31 2424

原创 Linux编程——网络编程

1.概述网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的来说是服务端的程序在一个端口上监听,直到有一个客户端的程序发来了请求. 2.网络编程的实现Linux 系统是通过提供套接字(socket)来进行网络编程的.网络程序通过 socket 和其它几个函数的调用,

2015-11-13 19:26:13 2479

原创 Linux编程——静态库和动态库

1 库的概念库是一种可执行代码的二进制文件,可以被操作系统载入内存执行。2 库的分类库可以分为两种:静态库和动态库静态库:静态库就是一些目标文件的集合,以.a结尾。静态库在程序链接的时候使用,链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中。一旦链接完成,在执行程序的时候就不需要静态库了。由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大。

2015-11-13 19:16:42 3662 1

原创 Linux编程——信号

1 信号概述信号:就是软件中断。信号提供了一种处理异步事件的方法:终端用户键入中断键,则会通过信号机构停止一个程序。所以,信号可以说是进程控制的一部分。信号的名字都以三个字母开头:SIG信号是异步事件的经典实例。 2 信号的产生条件l  当用户按某些终端键时,产生信号。l  硬件异常产生信号:除数为0、无效的存储访问等等。l  进程用kill函数可将信号发送给另一个进程

2015-11-13 19:08:28 2341

原创 SecureCrt中文乱码解决办法图解

SecureCrt中文乱码,并出现如下警告的解决办法图解。perl: warning: Setting locale failed.perl: warning: Please check that your locale settings: LANGUAGE = "zh_CN:zh:en_US:en", LC_ALL = (unset), LANG = "en" are supported and installed on your system.

2015-11-10 19:31:23 6396

原创 Python编程入门——基础语法详解

一、基本概念1.内置的变量类型:Python是有变量类型的,而且会强制检查变量类型。内置的变量类型有如下几种:#整型integer_number = 90 #浮点float_number = 90.4 #复数complex_number = 10 + 10j #lis

2015-11-07 10:07:09 16810

原创 手把手教你写shell脚本——shell循环结构

shell脚本之循环结构的学习,通过学习for循环、while循环,switch循环等常用的循环结构及在循环中经常使用的各种比较符号,不如数字的比较的,字符串的比较等,达到快速掌握shell脚本的目的!

2015-11-02 18:14:53 17720 1

原创 坏的解释器: 没有那个文件或目录/bin/sh

坏的解释器: 没有那个文件或目录/bin/shshell脚本运行时,提示“坏的解释器: 没有那个文件或目录/bin/sh”,经过排查,原因为: shell脚本是在windows环境下编辑的(编辑软件为:notepad++),到Linux下后成为了杂乱的文本.

2015-10-28 10:19:15 14162 1

原创 shell三件利器——管道,重定向和backtick

shell重要的三个概念:管道,重定向和backtick首先说明,这三个东西不是UNIX系统命令,但是他们的在shell编程中真的很重要,要经常用到。管道 “|” 将一个命令的输出作为另一个命令的输入 例如: grep "hello" file.txt | wc -l 在file.txt中搜索包含有“hello”的行并计算其行数 在这里grep命令的输出作为w

2015-10-27 16:51:38 6999

原创 程序员必备知识——fork和exec函数详解

在学习UNIX编程时,必须要学习的一个函数为fork函数。fork函数也为面试中必定要问的一个问题,尤其是在BAT的面试中,fork函数相关问题更为面试笔试必考知识点。究其原因:该函数为UNIX中派生新进程的唯一方法。不熟悉fork,就不可能熟悉多线程编程。因此掌握好fork函数,为程序员和准程序员必备技能。1 fork函数原型#includepid_t fork(void);

2015-10-23 18:59:22 21192 1

原创 SecureCrt自动生成log 设置图解

2015-10-16 19:29:21 10227 1

原创 shell编程之——cat /dev/null作用

在学习shell编程的过程中,都会看到这条命令:cat /dev/null > messages相信初学者很多都很困惑这是什么意思,为什么要这么用,现解释如下,虽然很基础,但是任何高手都是从最基础的东西开始慢慢积累的。言归正传这条命令的意思是:清空messages文件。可以把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢

2015-10-15 11:31:21 43447

原创 assert函数浅析

assert函数为编程中常用的函数,但是有些程序员仍然不熟悉,再次小结下,以方便大家查阅。

2015-10-14 13:57:41 6612

原创 程序猿白话之——const的妙用

const的一件奇妙的事情是,它允许你指定一个语义约束(即“不可被改动的对象”),而编译器会强制实施这项约束。它允许你告诉编译器和其他程序员某值应该保持不变。const多才多艺,它可以用来修饰常量、文件、函数或者区块作用域中被声明为static的对象。

2015-10-14 13:48:07 3981

原创 多线程编程——prctl()函数介绍

今天在看项目代码时,发现了一个以前没有用过的函数:prctl()。查阅相关资料有所得,现总结如下>>>>>>>>>>>>>>>>>>>>>不求面面俱到,但求言简意赅1 》》函数原型《《#include int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned

2015-09-28 17:20:26 53794 9

原创 程序员经典面试题之——数组指针与指针数组

1 概述指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针2 用法int* a[N]     指针数组                      表示:数组a中的元素都为int型指针                     元素表示:*a[i]

2015-09-23 11:00:40 7332

原创 ioctl函数

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的参数个数如下:int ioctl(int fd, int cmd, …);其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和c

2015-09-22 10:11:09 4155

原创 #if 0/1 #endif 的作用

1 #if 02 3    code4 5 #endif  1第一它允许嵌套(层数上限由预处理器决定)、第二你随时可以把“#if0”改成“#if 1”来取消对某段代码的“屏蔽”——很卓越的特性,快抛弃笨拙的“/**/”吧!它唯一的缺点就是在编辑器中没有“注释”该有的文本显示样式。 2(1)code中定义的是一些调试版本的代码,此时code完全被编译器忽略。如

2015-09-18 16:02:14 3486

原创 #if defined #ifdef #ifndef 的区别

1 #if defined可以实现复杂的预编译判断条件如:#if defined A && B || C && D ........................#endif2 #ifdef不能组成复杂的预编译判断条件在只有一个预编译条件的情况下,#ifdef 和 #if defined 是一样的3

2015-09-18 15:43:40 3999

原创 滚动显示升级进度的程序

#include#includevoid display(int num){ int i = 0; for(i=0;i<num;i++) { printf("="); } for(i=100-num;i>0;i--) { printf(" "); } }int main(){ int a = 0; for(a=1;a<101;a++) { print

2015-09-14 11:42:54 2194

原创 C语言实现的百分比加进度条的显示程序

项目中需要设计一个远程设备升级程序,程序优化时想在数字显示升级进度的同时用类似wget的进度条的形式显示升级进度,于是写了一个简单的数字+进度条显示升级进度的程序,但求读者举一反三,以达到抛砖引玉的效果。为了禁止复制粘贴党省事,贴上程序的截图,程序毕竟多写才能熟能生巧!运行结果如下图所示:

2015-09-11 20:01:26 6837

原创 判断输入的字符串是否为合法IP地址的程序

判断输入的字符串是否为合法IP地址的程序今天写一个IP地址冲突检测程序的时候,写完之后用测试用例测试,发现所写程序没有判断所输入的ip地址是否为合法的IP地址,因此自己写了一个判断输入字符串是否为合法IP地址的程序,程序思路为:判断字符串中点的个数,如果点的个数不等于3或者第一个就为’.’,即为非法IP地址,程序结束。格式符合规范后,判断每个数的范围是否在【0——255】范围内。程序写的有点简单,反

2015-08-27 11:38:47 5463 1

原创 pow函数gcc编译提示 undefined reference to `power' 的解决办法

今天写了一个程序,用了pow函数,头文件中也包含了文件,但是在编译时,gcc -o ippanduan ippanduan.c  一直提示如下错误:/tmp/ccARJLRg.o: In function `main':ippanduan.c:(.text+0x180): undefined reference to `power'collect2: error: ld

2015-08-27 10:09:25 21549 6

转载 快速排序

voidQuickSort(inta[],intnumsize)/*a是整形数组,numsize是元素个数*/{inti=0,j=numsize-1;intval=a[0];/*指定参考值val大小*/if(numsize>1)/*确保数组长度至少为2,否则无需排序*/{while(i<j)/*循环结束条件*/{/*从后向前搜索比val小的元素,找到后填到a[i]中并跳出循环*/

2014-09-12 16:50:40 356

转载 字符串倒置

int main(){ char str[]="i come from tian jin."; char temp; int j=strlen(str)-1,i=0; printf("string= %s",str); //先将整个句子逆序 while(j>i) { temp=str[i]; str[i]=str[j]; str[j]=temp; j--; i+

2014-09-03 14:11:50 406

原创 字符串循环右移

void loopMove(char *p, int n){ int i=strlen(p)-n; char tmp[100]; strcpy(tmp,p+i); strcpy(tmp+n,p); *(tmp+strlen(p))='\0'; strcpy(p,tmp);}int main(){ char str[]="goodstudent"; loopMove(str

2014-09-02 18:14:31 418

转载 ifndef define endif的作用

给你举个例子,再顺便分析一下:假设你的工程里面有4个文件,分别是a.cpp,b.h,c.h,d.h。a.cpp的头部是:#include "b.h "#include "c.h "b.h和c.h的头部都是:#include "d.h "而d.h里面有class D的定义。这样一来,编译器编译a.cpp的时候,先根据#include "b.h "去编译

2014-08-19 15:09:29 11109 4

转载 C语言运算符优先级

C运算符优先级完整口诀C语言常用运算符的优先级口诀是:“单算关逻条赋逗”;如果加入位运算符,完整口诀是:“单算移关与,异或逻条赋”。■“单”表示单目运算符:逻辑非(!),按位取反(~),自增(++),自减(--),取地址(&),取值(*);■“算”表示算术运算符:乘、除和求余(*,/,%)级别高于加减(+,-);■“移”表示按位左移(>);■“关”表示关系运算符:大小关系(

2014-08-19 10:17:39 894

空空如也

空空如也

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

TA关注的人

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