自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 自己学驱动6——uboot代码阅读一(start.S)

uboot中的start.S文件开头的这段代码:对应的反汇编的结果:    00000000 [0xea000012] b 0x50    00000004 [0xe59ff014] ldr pc,0x00000020 ; = #0x33f80140    00000008 [0xe59ff014] ldr pc,0x00000024 ; = #0x33f801a0   

2014-09-30 16:09:19 1192

原创 自己学驱动5——uboot&linux源代码目录结构

●Board:和一些已有开发板相关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。●Common:与体系结构无关的文件,实现各种命令的C文件。 ●CPU:CPU相关文件,其中的子目录都是以u-boot所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c和s

2014-09-30 12:44:24 1350

原创 自己学驱动4——SourceInsight代码阅读工具

使用SourceInsight阅读Linux源码1.启动SourceInsight,启动之后因为默认环境没有支持.S汇编代码的阅读,所以需要添加对.S汇编语言的支持。添加方法:Options->Document Options->Document Type选项卡中在File filter中添加.S类型。2.新建一个SourceInsight的项目新建方法:Project->New

2014-09-30 11:43:42 2767 1

转载 自己学驱动3——ARM-THUMB子程序调用规则ATPCS

ARM-THUMB子程序调用规则ATPCS    为了使C语言程序和汇编程序之间能够互相调用,必须为子程序间的调用制定规则,在ARM处理器中,这个规则被称为ATPCS(ARM-THUMB procedure call standard:ARM-Thumb过程调用标准):ARM程序和Thumb程序中子程序调用的规则,基本的ATPCS规则包括寄存器使用规则、数据栈使用规则、参数传递规则、子程序结果

2014-09-29 11:20:14 1783

原创 C语言指针——指针和数组

先看一个常用的例子:#include int main(void){    int a[3] = {1,2,3};    int *p = a;    printf("%d ", p[0]);    return 0;}    这段代码编译和运行都没有任何问题,程序会打印出1这个值,但是为什么可以这样用呢?p明明是一个int类型的指针,这里怎么可以使用p[0]这

2014-09-26 09:35:14 1620

原创 C语言指针——指针的运算

说指针之前,先说两个比较不相关的东西,也当做是一种知识的补充。看下面的代码:#include int main(void) {        char *s = "Hello world.";    printf(s);}运行这段代码,会出现错误吗?如果出现错误,是什么错误?    分析:printf一种常规的用法就是printf("Please input a

2014-09-25 22:31:57 1786

原创 习题五——逻辑智力题

1. 飞机飞行问题    每架飞机只有一个油箱,一箱油可供一架飞机绕地球飞半圈,空中没有加油机,但飞机之间可以相互加油。 问:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? (所有飞机从同一机场起飞,不允许中途降落,必须全部安全返回机场)分析:3架飞机A、B、C同时起飞,同向而行。飞至1/8航程(绕地球一周)处,正好耗去1/4燃油,其中1架飞机A将2×1/4油箱燃油分加至...

2014-09-23 19:26:00 3317 2

转载 网络编程中设计并发服务器,使用多进程与多线程有什么区别?

网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答案一:1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小

2014-09-23 19:07:11 5153

转载 linux进程调度方法简述

在 Linux2.6 中,仍有三种调度策略: SCHED_OTHER、SCHED_FIFO 和 SCHED_RR。  SCHED_ORHER:普通进程,基于优先级进行调度。  SCHED_FIFO:实时进程,实现一种简单的先进先出的调度算法。  SCHED_RR:实时进程,基于时间片的SCHED_FIFO,实时轮流调度算法。    前者是普通进程调度策略,后两者都是实时进程调度策略

2014-09-22 11:10:55 1230

转载 Linux内核态与用户态数据交换方式(二)

本系列文章包括两篇,它们文详细地地介绍了Linux系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与sysfs、 sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使 用。本文是该系列文章的第二篇,它介绍了procfs、seq_file、debugfs和relayfs,并结合给出的例子

2014-09-22 09:55:49 1249

转载 Linux内核态与用户态数据交换方式(一)

在Linux下用户空间与内核空间数据交换的方式一    本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数、模块参数与sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,并给出具体的例子帮助读者掌握这些技术的使用。     本文是该系列文章的第一篇,它介绍了内核启动

2014-09-22 09:27:43 5126

原创 ping命令和tracert命令

ping命令        当我们在使用ping命令测试网络是否连通的时候,输出的最后一项一般都是TTL=XX这样的形式,那么TTL到底代表什么呢?TTL是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减1,反复这样操作,

2014-09-21 11:41:39 3479

原创 C语言中的零长度数组使用说明

C语言中的零长度数组用法详解    在C语言中允许在结构体和联合体中定义零长度的数组,写法可以是以下两种:char p[]或者char p[0],这个数组定义在结构体或者联合体中,不占用空间大小。这是个广泛使用的常见技巧,常用来构成缓冲区。比起指针,用空数组有这样的优势:  1.不需要初始化,数组名直接就是所在的偏移;  2.不占任何空间,指针需要占用int长度空间,空数组不占

2014-09-20 23:35:35 3102

原创 C语言中宏定义使用方法详解

C语言中的宏替换详解首先看一个问题:#include #define    PRINT_CLINE()    printf("%d", ______)int main(void) {        PRINT_CLINE();    PRINT_CLINE();    return 0;}在横线处填上适当的代码,使得上面这段代码的输出为34。

2014-09-20 21:56:45 3461 1

原创 习题四——数字智力题

1.找出规律并填写:16 96 12;10 () 15分析:这个题网上搜了,但是感觉有一种还是比较靠谱的,就是16*12/2=96,所以10*15/2=75。答案:752.   235 711 131 719 () 931 374 143分析:题目中数字分开来看。2.3.5.7.11.13.17.19……都是是质数,并且括号中应填三位数,那么接下来的应该是23.29,所以答案是

2014-09-18 18:34:02 1460

原创 习题三——C语言笔试题

1.下面的程序片段的输出为?#include #include int main(void){    char str[]="h\t\"\\/\012\00034";    printf("%d", strlen(str));}分析:主要考察的是转义字符和strlen库函数的使用。\t和\"以及\\分别是用\符号表示其后的为转义符,这三个转义符分别为报警符、"和

2014-09-17 11:00:11 2325

原创 C语言中main函数的参数详解

main函数的定义形式        main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。所以C99标准中规定只有以下两种定义方式是正确的:    int main(void) //无参形式    int main(int argc, char *argv[]) //有参形式

2014-09-17 09:33:55 6305 1

原创 面试题&笔试题:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)

题目:求1+x+x^2+x^3+...+x^n的和(尽可能少的使用乘法运算)。分析:可以使用折半的方式,每次计算两个的和,比如首先计算出1+x的值保存,然后用保存的这个值乘以x^2可以得到后面两项的值再保存,依次类推直到计算结束。需要注意的是如果n是奇数或者偶数的情况是不同的,当n为奇数的时候就完全按照前面的方法计算即可,但是n为偶数的时候比较麻烦,因为最后一项的计算比较困难,所以当n为偶数的

2014-09-16 20:36:34 21534 1

转载 网络端口号说明

端口号从0~65535一共65536个被分为三类:1) 公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。2) 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的

2014-09-15 15:49:10 925

原创 OSI七层网络结构详解

OSI模型的分层结构    OSI(Open System Interconnection),开放式系统互联参考模型 ,它把网络协议从逻辑上分为了7层。这7层分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,每一层都有相关、相对应的物理设备,比如常规的路由器是三层交换设备,常规的交换机是二层交换设备。OSI七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网

2014-09-15 12:05:32 3504

转载 网络攻击——流量劫持

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由器配置就会被暗中修改。互联网一夜间变得岌岌可危。攻击还是那几种攻击,报道仍是那千篇一律的砖家提醒,以至于大家都麻木了。早已见惯运营商的各种劫持,频繁的广告弹窗,大家也无可奈何。这么多年也没出现过什么损失,也就睁只眼闭只

2014-09-15 10:34:17 2453

原创 TCP、UDP、IP报头结构体分析

TCP、UDP、IP报头结构体分析  TCP数据段格式          TCP是一种可靠的、面向连接的字节流服务。源主机在传送数据前需要先和目标主机建立连接。然后,在此连接上,被编号的数据段按序收发。同时,要求对每个数据段进行确认,保证了可靠性。如果在指定的时间内没有收到目标主机对所发数据段的确认,源主机将再次发送该数据段。 下图为TCP头部结构:  ●源、目标端口号字段:各

2014-09-14 12:51:28 15908

原创 动态路由和静态路由

静态路由    静态路由是由管理员在路由器中手动配置的固定路由,路由明确地指定了包到达目的地必须经过的路径,除非网络管理员干预,否则静态路由不会发生变化。静态路由不能对网络的改变作出反应,所以一般说静态路由用于网络规模不大、拓扑结构相对固定的网络。静态路由特点 1、它允许对路由的行为进行精确的控制; 2、减少了网络流量; 3、是单向的; 4、配置简单。在所有的路由中

2014-09-14 11:02:42 5783

原创 TCP和UDP的传输过程以及二者之间的区别

TCP和UDP的区别TCP    TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP和UDP协议属于传输层协议,而IP协议属于网络层协议。    TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须

2014-09-12 23:34:17 7958

原创 习题二——C语言笔试题

1.打印一个整型数据,要求这个数为负数前面输出负号,这个数为正数前面输出正号。printf("%+d", n);注:在printf输出控制中+表示输出符号(正号或负号)。-表示结果左对齐,右边填空格,如果不加则表示右对齐。例如:printf("%-8+d", n);  //宽度为8左对齐带符号输出2.下面代码的输出结果为?    #include      #incl

2014-09-12 22:36:57 1299

原创 指针数组和数组指针详解

指针数组和数组指针1.定义int *p[4]; //定义了一个指针数组p,p一共有4个单元,每个单元都是一个int型的指针int (*p)[4]; //定义了一个数组指针p,p可以指向一个拥有4个单元的int型数组2.指针数组的用法#include int main(){    int *p[4];    int a=1, b=2, c=3, d=4;

2014-09-12 16:14:03 1066

原创 如何减少缺页异常

如何减少换页错误?()1. 进程倾向于占用CPU2. 访问局部性(localilty of reference)满足进程要求3. 进程倾向于占用I/O4. 使用基于最短剩余时间(shortest remaining time)的调度机制5. 减少页大小    换页错误,一般称为缺页异常。每个进程都有一段自己的独立的虚拟内存空间(在32位的linux系统中为3G),但

2014-09-07 15:09:42 4413

原创 Linux空间划分 & MMU

Linux内核地址空间划分    通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。32位的Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。    内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占

2014-09-06 21:13:52 3381

转载 自旋锁

自旋锁    自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。    何谓自旋锁?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只

2014-09-06 17:16:44 730

原创 多层循环嵌套结构的设计

在很多编程的书籍中会给出这样的建议:    在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数。    这个“跨循环层”的概念本身是说,由外层循环进入内层循环是要重新初始化循环计数器的,包括保存外层循环的计数器和加载内层循环计数器,退出内层的时候再恢复外层循环计数器。把长循环放在里面可以显著减小这些操作的数量。看下面两个循环结构:

2014-09-05 16:07:32 3132

原创 优先级翻转

uCos是一个典型的按照优先级调度的操作系统,优先级高的任务先运行,优先级低的任务后运行,然而在任务的调度过程中可能会出现优先级翻转的情况。在嵌入式系统的应用中,实时性是一个重要的指标,而优先级翻转是影响系统实时性的重要问题。例如:有优先级为A、B和C三个任务,优先级A>B>C,任务A,B处于挂起状态,等待某一事件发生,任务C正在运行,此时任务C开始使用某一共享资源S。在使用中,任务A等待事件

2014-09-05 12:12:39 862

原创 死锁

死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁。”    上面是比较学术的解释,通俗一点的理解可以这

2014-09-05 11:25:26 780

原创 数组名的理解

数组名的再理解先看下面的这段代码,程序会输出什么结果?#include int main(){    int a[5] = {1, 2, 3, 4, 5};    int *p = (int *)(&a+1);    printf("%d %d\n", *(a+1), *(p-1));    return 0;}答案详见本文的最后。先来一步步

2014-09-04 23:03:10 686

原创 volatile关键字

volatile关键字前半部分内容摘自百度百科:http://baike.baidu.com/view/608706.htm?fr=aladdinvolatile关键字的英文意思是易变的,不稳定的。一般用于修饰变量。volatile的使用场合:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量

2014-09-04 20:22:21 560

原创 n的阶乘结果中末尾有多少个零?

题目:n的阶乘中一共有多少个零?解答:产生零的结果只能有一种可能性那就是2*5=10,然而n的阶乘本质上是可以拆解为很多2和5以及其他不包含2和5的乘数的积,例如5的阶乘:1*2*3*4*5=1*2*3*2*2*5。按照这个思路,将n的阶乘乘积的每一项进行拆解,看看可以拆解出多少个2和多少个5,然后取2的个数和5的个数中最小的即可。程序代码如下:#include int compu

2014-09-03 21:38:43 1518 5

空空如也

空空如也

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

TA关注的人

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