自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (2)
  • 收藏
  • 关注

原创 关于C语言中内嵌汇编指令的一个小细节

今天修改u-boot时,在编译的过程中,老是提示内嵌汇编指令处有语法错误,我仔细检查一下,才发现我将汇编指令写成了:_asm_ ("####一些指令####")/* error */asm两端的下划线应该是一边两条:__asm__("####一些指令####")/* correct */

2014-01-18 16:11:06 661

原创 File `Makefile' has modification time 1.8e+06 s in the future这种警告的原因分析及解决方法

移植uboot时,一般都会先在windows下修改,然后在LInux环境下编译,往往在Linux下使用命令行进行配置时:$make wqh2440_config会出现如下错误信息:make: Warning: File `Makefile' has modification time 1.8e+06 s in the future通过这个错误提示信息我们可以知道,Makefil

2014-01-18 13:51:53 21330

转载 DECLARE_GLOBAL_DATA_PTR、gd_t、bd_t及uboot中 start_armboot 代码分析

一、Uboot中DECLARE_GLOBAL_DATA_PTR 只是一个定义的宏,这个宏定义了一个gd_t全局数据结构的指针,这个指针存放在指定的寄存器中(386体系结构没有放到指定寄存器中)。这个宏定义在\include\asm-arm\globe_data.h文件中#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd

2014-01-18 12:20:43 3610

转载 __asm__ __volatile__("": : :"memory")

memory 强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。    The GCC manual says using 'asm volatile' prevent

2014-01-17 17:32:26 870

原创 汇编语言中出现#include, #define的问题

U_boot源文件中,一些 .S文件中出现了#include, #define,如board\smdk2410目录下的lowlevel_init.S文件:#include #include /* some parameters for the board *//* * * Taken from linux/arch/arm/boot/compressed/head-

2014-01-14 20:57:20 4100

原创 ARM指令集——状态寄存器访问指令

ARM中有两条指令用于状态寄存器和通用寄存器之间传送数据。程序不能直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换。通常修改状态寄存器时通过“读取-修改-写回”的操作序列来实现的。状态寄存器访问指令包括以下两条指令:MRS 状态寄存器到通用寄存器的传送指令MSR 通用寄存器到状态寄存器的传送指令下面一一介绍之:1、MRS指

2014-01-10 21:37:12 2298

原创 ARM指令集——乘法指令

ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类位64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条:MUL 32位乘法指令MLA 32位带加数的乘法指令SMULL 64位有符号数乘法指令SMLAL 64位带加数的有符号乘法指令UMULL 64位无符号数乘法指令UMLAL 64位带加数的无符号数乘法指令下面一一介绍之:1、MU

2014-01-10 00:54:24 2981

原创 ARM指令集——数据处理指令篇

输出传送指令包括以下指令:MOV 数据传送指令MVN 数据求反传送指令CMP 比较指令CMV 基于相反数的比较指令TST 位测试指令TEQ 相等测试指令ADD 加法指令SUB 减法指令RSB 逆向减法指令ADC 带位加法指令SBC 带位减法指令RSC 带位逆向减法指令AND 安位与指令BIC 为清零指令EOR 逻辑异或指令ORR 逻辑或指令下面分别作详细介绍:1、MOV

2014-01-10 00:14:12 2268

转载 8位单片机中一个容易被忽视的溢出问题

8位单片机中一个容易被忽视的溢出问题例:uint16 wTmp ;  uint8 x ;x=2;wTmp = (uint16)(x*150);各位,以上这个乘法有没有问题?wTmp的值是多少?相信有很多人都会不加思考的说,没问题啊!wTmp=300 。好,问题来了!告诉你,其实结果是 wTmp=44。这里不作具体解释,请读者自已思考,

2014-01-08 00:26:52 1833 1

转载 linux中ctime,mtime,atime的区别

当你同熟练的UNIX用户进行交谈时,你经常会听到他们傲慢地讲出术语“改变时间(change time)”和“修改时间(modification time)”。对于许多人(和许多字典而言),改变和修改是相同的。这里会有什么不同那?    改变和修改之间的区别在于是改某个组件的标签还是更改它的内容。如果有人说chmod a-w myfile,那么这是一个改变;如果有人说echo foo

2014-01-07 12:42:27 702

转载 关于UNIX/Linux下SUID、SGID的解析

如果你对SUID、SGID仍有迷惑可以好好参考一下!Copyright by kevintz.由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整

2014-01-07 12:37:04 663

转载 Linux DMA详解

DMA控制器硬件结构DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输。在第一种情况下,调用的步骤可以概括如下(以read为例):(1)在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的

2014-01-07 08:45:27 3350

转载 linux之fstab文件详解

/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。       当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。     文件示例一个简单

2014-01-07 00:42:26 1127

原创 ARM指令集——跳转指令篇

ARM指令集可以分为6类,即跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理指令和异常中断产生指令。跳转指令:在ARM中有两种方式可以实现程序的跳转:跳转指令和直接向PC寄存器中写入目标地址值。通过直接向PC寄存器中写入目标地址值可以实现4G的地址空间中任意跳转,称之为长跳转。ARm

2014-01-07 00:16:20 6509 1

转载 理解嵌入式开发中的一些硬件相关的概念

理解嵌入式开发中的一些硬件相关的概念       做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。电平(Level)       在数字电路中,分为高电平和低电平,分别用1和0表示。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或者说要么1要到0(其实,还有另一

2014-01-05 23:41:09 795

转载 运行地址和加载地址

运行地址和加载地址          在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢?          加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在

2014-01-05 23:36:33 492

转载 arm-linux-ld命令 ld链接脚本

我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来;其次,这些.o文件存在相互调用的关系;再者,我们最后生成的bin文件是要在硬件中运行的,每一部分放在什么地址都要有仔细的说明。我觉得在写makefile的时候,最为重要的就是ld的理解,下面说说我的经验:首先,要确定我们的程序用没有用到标准的c库,或者一些系统的

2014-01-05 23:10:42 939

转载 接口设计

接口设计什么是接口?接口是CPU和外设之间的连接设备,用于缓存和转发数据。为什么需要接口?(1)解决主机CPU和外围设备之间的时序配合和通信联络问题         主机的CPU是高速处理器件,比如8086-1的主频为10MHz,1个时钟周期仅为100ns,一个最基本的总线周期为400ns。而外围设备的工作速度比CPU的速度慢得多。如

2014-01-05 19:51:05 642

转载 ARM汇编中的标号

ARM汇编中的标号                 标号(LABEL)是为一组机器指令所起名字,表示程序中的指令或者数据地址的符号。标号可有可无,只有当需要用符号地址来访问该语句时,才给此语句赋予标号。通过在目标地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址。标号是程序目标标志,总是和某地址相联系,供转移或循环指令控制转移使用。 标号是编译程序使用的,也就是说程序中最后生成

2014-01-05 17:10:09 731

转载 make clean、make mrproer 以及make distclean的区别

make clean、make mrproer 以及make distclean的区别解压内核源码包后, 到内核源代码目录树的顶层目录, 执行# make helpCleaning targets:  clean           - Remove most generated files but keep the config and                   

2014-01-05 16:46:59 825

转载 ARM处理器三级流水线与PC,LR的关系

ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。    PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指(从存储器装载一条指令);2.译码(识别将要被执行的指令);3.执行(处理指令并将结果写回寄存器)。而R15(PC)总是指向“正在取指”的指令,而不是

2014-01-05 13:57:05 1576

转载 工程师的发展之路(转)!

一、中长期职业发展的自我准备1、心态上随时做好准备 机会是给有准备的人的------“有准备”是你在做准备的过程中让“别人”认为你“有准备”!别人是包括你现在的老板和别的老板,以及你身边的人!他们对你的赏识程度决定了你的机会2、专注于自己的优势  70%专注于长处,25%专注于学新事物,5%专注于避免短处3、不断修正自己的技术方向,扩大自己的知识与能力的金字塔  增强自己的核心竞争力,

2014-01-05 00:14:46 661

转载 深入分析S3C2440启动代码中大小端问题

深入分析S3C2440启动代码中大小端问题一、ADS1.2中关于大小端的设置以及对编译后的代码的影响下面是一段代码在线段模式下编译,生成的二进制文件的内容大端模式下编译,生成二进制文件的内容根据上面的内容可以看出:它们的字节序是相反的,也就是说,ADS1.2中对大小端的设置会影响最终生成的二进制文件的字节序。二、S3C2440启动代码中与大小管相关的代码

2014-01-04 23:47:11 692

转载 S3C2440启动代码中应用程序执行环境的初始化

S3C2440启动代码中应用程序执行环境的初始化一、基础知识          我们编写的源文件(.c 或.s)经过ARM 编译器的编译生成ELF 格式的目标文件(后缀名为.o),目标文件经过ARM 连接器连接以后生成ELF 格式的映像文件(后缀名为.axf),此时的映像文件还包含一些调试信息,我们还需要通过fromelf 工具将其转换成适合在ROM 或RAM 中运行的二进制代码(后缀名为

2014-01-04 22:58:27 756

转载 ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析

ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析ARM汇编有ldr指令以及ldr、adr伪指令,它们都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别。[plain] view plaincopyprint?ldr r0, _start  adr r0, _start  ldr r0,

2014-01-04 22:30:56 534

转载 Bootloader的简介

Bootloader的概念一、Bootloader的引入从前面的硬件实验可以知道,系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等等。如果它能将操作系统内核(无论从本地,比如Flash;还是从远端,比如通过网络)复制到内存中运行,就称这段程序为Bootloader。简单地说,Bootloader就是这么

2014-01-04 20:26:05 889

转载 对I2C总线的时钟同步和总线仲裁的深入理解

对I2C总线的时钟同步和总线仲裁的深入理解        每一个IIC总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器[1]。这种电路具有两个特点: ①由于SDA、SCL为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑;②引脚在输出信号的同时还将引脚上的电平进行检测,检测是否

2014-01-04 13:43:22 703

转载 向FLASH中存储数据的窍门

当向FLASH中存储数据时,比如float型,可以使用union类型定义变量,可以收到意想不到的效果:union{                foat value;                signed char array[4];}temp;当存储float型数据时,先将待存储的数据赋给temp.value,然后将temp.array[0],temp.array

2014-01-03 22:33:29 1531

原创 对数组进行复制的方法

我们知道,在C语言中,数组不能够用=运算符进行复制,而结构体可以用=运算符复制。对结构体进行复制时,嵌在结构体内的数组也会得到复制,所以我们可以利用这种性质来产生“空”结构体,以封装稍后将进行复制的数组:struct (int a[10];) a1, a2;a1 = a2; /* legal, since a1 and a2 are structures */

2014-01-03 22:28:33 698

yaffs2文件系统映像制作工具

YAFFS is a log-structured filesystem. It is designed particularly for NAND (as opposed to NOR) flash, to be flash-friendly, robust due to journalling, and to have low RAM and boot time overheads. File data is stored in 'chunks'. Chunks are the same size as NAND pages. Each page is marked with file id and chunk number. These marking 'tags' are stored in the OOB (or 'spare') region of the flash. The chunk number is determined by dividing the file position by the chunk size. Each chunk has a number of valid bytes, which equals the page size for all except the last chunk in a file.

2017-09-12

《ARM体系结构与编程》杜春雷

杜春雷编写的《ARM体系结构与编程》,复印版,很给力的啊,希望对大家所有帮助吧

2014-01-13

空空如也

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

TA关注的人

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