加载中…
个人资料
老徐
老徐
  • 博客等级:
  • 博客积分:0
  • 博客访问:839,567
  • 关注人气:157
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
博文
标签:

大小端

网络字节流

it

分类: C/CPlusPlus
文章以32位整数为输入,采用两种方法进行大小端转换,一个是宏定义,一个是函数形式;
#include 'stdio.h'
#define T(x) (((x&0xff)<<24)|((x&0xff00)<<8)|((x&0xff0000)>>8)|((x&0xff000000)>>24))       //1.四个字节的排放顺序要弄清楚
void transfer(int x)
{
    char a,b,c,d;
    a=(char)(x&0xff);
    b=(char)((x&0xff00)>>8);                          //   2. 字符类型转换的优先级高于移位,所以用括号把移位操作括起来~
    c=(char)((x&0xff0000)>>16);
    d=(char)((x&0xff000000)>
标签:

网络

面试

it

分类: Network_Simulator
问题一:两笔记本电脑连起来后拼不通,你觉得可能有哪些问题?
答:首选想到是软件问题,软件问题首选查找是否安装有防火墙程序,如否则查看驱动程序有无问题,然后如果是WINDOWS的系统,再查看TCP/IP协议IP地址是否在一个子网,如果以上都无问题,则查看硬件,顺序是网卡--网线。

问题二:我们在南京,和深圳的网络是通的,但和北京的网络不通,你以怎样的顺序检查问题?
答:首选要知道三方的网络拓朴结构与设计规划,然后确定北京地区网络内部是否畅通,网络是否是新建立了,如果不是新建的网,首先要知道以前是否通,如通,则此次不通是在做过什么操作后不通的,确定后首先排除线路故障,然后再看双方连接的路由设置。

问题三:解释什么叫“透明”?什么叫“网格”?
答:透明对用户来说是感觉不到的,也就是说不论对网络加了什么设备或软件,用户都感觉不到,这样的好处是简化了用户的操作复杂性。网络的概念,是说通过无线或有线将多种服务综合连接到一起,让用户彼此之间可以交换信息。

问题四:交换和路由的区别?vlan的特点?
答:交换
标签:

排序

k

数组

it

分类: Algorithm/DateStructure

写一段程序,找出数组中第k大小的数,输出数所在的位置。

【解法一】

我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度 都是 O(N * log2N)。然后取出前 K 个,O(K)。总时间复杂度 O(N * log2N)+ O(K) = O(N * log2N)。

你一定注意到了,当 K=1 时,上面的算法也是 O(N * log2N)的复杂度,而显然我们可以通过 N-1 次的比较和交换得到结果。上面的算法把整个数组都进行了排序,而原题目只要求最大的 K 个数,并不需要前 K 个数有序,也不需要后 N-K 个数有序。

怎么能够避免做后 N-K 个数的排序呢?我们需要部分排序的算法,选择排序和交换排序都是不错的选择。把 N 个数中的前 K 大个数排序出来,复杂度是O(N * K)。

那一个更好呢?O(N * log2N)还是 O(N * K)?

标签:

core

dump

kernel

c

it

分类: C/CPlusPlus

Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位。

 
如何产生core file?
我们可以使用ulimit这条命令对core file文件的大小进行设定。
标签:

kernel

core

dump

it

分类: C/CPlusPlus

什么是coredump?

通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和操作系统出错时会自动生成一个core文件。

如何使用coredump?

coredump可以用在很多场合,使用Linux,或者solaris的人可能都有过这种经历,系统在跑一些压力测试或者系统负载一大的话,系统就hang住了或者干脆system panic.这时唯一能帮助你分析和解决问题的就是coredump了。

现在很多应该程序出错时也会出现coredump.

分析coredump的工具

现在大部分类unix操作系统都提供了分析core文件的工具,比如 GNU Binutils Binary File Descriptor library (BFD), GNU Debugger

标签:

linux

kernel

bsp

it

分类: NSN_BspDriver
1. 引言
    嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是 嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之 间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,这种硬件相关层就是嵌入式系统中的板级支持包BSP(Board Support Package,简称BSP)。本文以PXA250处理器为硬件环境,研究了在嵌入式Linux系统中不同开发阶段BSP的设计与实现。

2. BSP及其作用
    BSP是嵌入式系统中介于硬件平台和操作系统之间的中间层软件,主要目的是为了屏蔽底层硬件的多样性,根据操作系统的要求完成对硬件的直接操作,向操作系统提供底层硬件信息并最终启动操作系统。BSP具有硬件相关性和操作系统相关性的特点,其主要作用包括:
    (1)初始化底层硬件
标签:

uboot

nand

启动

it

分类: NSN_BspDriver
                     UBOOT从NAND FLASH启动分析
在分析启动代码之前先看一下S3C2440的NAND启动:
在配置NAND启动模式之后,S3C2440上电会先将NAND中的0x0 - 0x1000共4096字节的数据拷贝到位于Bank0中的Boot Internal SRAM上
Bank0如下图:
可以看出Boot Internal SRAM为4KB大小,也正是因为Boot Internal SRAM只有4KB大小,所以只能从NAND中拷贝4K的内容 = 3= 这个Boot Internal SRAM是配置为NAND FLASH启动模式才有的
这4K内容是什么呢?~ 这就要看Uboot的镜像文件中是如何进行连接的了~
连接脚本在board/smdk2440/u-boot.lds中,如下
标签:

arm

指令集

it

分类: NSN_BspDriver

算术和逻辑指令

ADC : 带进位的加法

(Addition with Carry)

 ADC{条件}{S}  <dest>, <op 1>, <op 2>                  dest = op_1 + op_2 + carry 

ADC 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。
128 位结果: 寄存器 0、1、2、和 3
第一个 128 位数: 寄存器 4、5、6、和 7
第二个 128 位数: 寄存器 8、9、10、和 11。

 ADDS    R0, R4, R8              ; 加低端的字   ADCS    R1, R5, R9              ; 加下一个字,带进位   ADCS    R2, R6, R10             ; 加第三个字,带进位   ADCS    R3, R7, R11             ; 加高端的字,带进位 

如果如果要做这样的加法,不要忘记设置 S 后缀来更改进位标志。

 

ADD : 加法

(Addition)

 ADD{条件}{S}  <dest>, <op 1>, <op 2&g
标签:

动态编译

重定位

-fpic

got表

plt表

it

分类: NSN_BspDriver
加上-fPIC参数后,编译后的文件和没有加这个参数的文件,有什么区别呢?
没有加这个参数的编译后的共享库,也可以使用,它和加了参数后的使用起来
又有什么区别呢?

position independent(位置无关)
relocate(可重定位)

位置无关代码主要是在访问全局变量和全局函数的时候采用了位置无关的重定位方法,
即依赖GOT和PLT来重定位。


普通的重定位方法需要修改代码段,比如偏移地址0x100处需要重定位,loader就修改代码段的0x100处的内容,通过查找重定位信息得到具体的 值。这种方法需要修改代码段的内容,对于动态连接库来说,其初衷是让多个进程共享代码段,若对其进行写操作,就回引起COW,从而失去共享。

-fPIC选项告诉编绎器使用GOT和PLT的方法重定位,GOT是数据段,因此
标签:

动态编译

重定位

-fpic

got表

plt表

it

分类: NSN_BspDriver

全局偏移表(GOT)和过程链接表(PLT)

 

ELF 格式的共享库使用 PIC 技术使代码和数据的引用与地址无关,程序可以被加载到地址空间的任意位置。PIC 在代码中的跳转和分支指令不使用绝对地址。PIC 在 ELF 可执行映像的数据段中建立一个存放所有全局变量指针的全局偏移量表 GOT

 

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有