摘要: 我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论。(1)全局变量:如果程序中定义了全局变量,而且初始值不是0。此时,在程序调到main()函数执行前,除了要进行内存清零、初始化堆栈外,还需要将全局变量的初始值加载到内存的指定区域(编译过程中为全局变量分配的空间)。(2)局部变量:局部变量通常使用那些缓冲内存(用作保存运算过程的中间数据)。初始化的局部变量,通常程序中都会对用到的缓冲内存重新赋值。但是,对于没有初始化的局部变量需要注意“无知情的情况下被赋了值”。下边的子函数中定义了变量,但是并未初始化。按照标准C语言的准则,未初始化的变量的初值默认是0,. 阅读全文
posted @ 2013-09-28 21:00 amanlikethis 阅读(1746) 评论(0) 推荐(0) 编辑
摘要: gcc/g++在执行编译的时候,只要分四个阶段 :1、预处理阶段,完成宏定义和include文件展开等工作; [预处理器cpp] 2、根据编译参数进行不同程度的优化,编译成汇编代码,生成.s的文件; [编译器egcs]3、用汇编器把汇编代码进一步生成目标代... 阅读全文
posted @ 2013-09-28 20:29 amanlikethis 阅读(269) 评论(0) 推荐(0) 编辑
摘要: C++对于关键字“inline”的处理大家都知道,C++编译器对于内敛函数就是把它当做一个宏展开。这样可能会增加程序的代码量,却可以减少程序入栈和出栈的此处,从而影响程序的执行速度。但是,C语言中扩展了C++的这个关键字,不同的编译器对它的处理还不一样。ADS的C编译器对“inline”还不支持,而本文主要谈arm-linux-gcc对“inline”的处理。 下边是对“arm-linux-gcc的C编译器对 inline处理”的测试。无关键字的程序inline的程序代码:staticvoidwait(volatileunsignedlongdly){for(;dly>0;dly--); 阅读全文
posted @ 2013-09-28 19:23 amanlikethis 阅读(1621) 评论(0) 推荐(0) 编辑
摘要: 书本上都说ARM是哈佛结构,但是我总感觉好像看不出来。后来针对S3C2440的ARM9核进行分析,我有了自己的见解。 我的结论是“ARM9被称为是哈佛结构是从它拥有指令cache和数据cache”来说的。 原来,我怀疑S3C2440的ARM9核不是哈佛结构,是冯诺依曼结构。我的理由如下。哈佛结构要求,能同时访问指令和数据,所以我认为一个哈佛结构要求处理器的总线是复杂的,应该包括程序的地址总线、程序的数据总线、数据的地址总线、数据的数据总线。但是,观察S3C2440核发现,程序和数据最终都会被加载到RAM中运行,所以它也就只有两条总线,FLASH、RAM,包括外设都是公用这两条线。 但... 阅读全文
posted @ 2013-09-28 19:18 amanlikethis 阅读(5841) 评论(0) 推荐(1) 编辑
摘要: 链接三要素:链接顺序,链接地址,加载地址1.连接顺序的问题 倘若没有链接脚本,例如:arm-linux-ld –Ttext 0x00000000 -o nand_elf $^,那么链接顺序就是$^的顺序,即makefile中依赖的顺序。 倘若有链接脚本,则会按照链接脚本的规则进行链接。例如:SECTIONS { firtst 0x00000000 : {head.o init.o nand.o} second x30000000 : AT(4096){ main.o}} 这个规则中定义了两个大段,first和second。first的链接顺序为head.o init.o nand.o. ... 阅读全文
posted @ 2013-09-28 18:25 amanlikethis 阅读(1605) 评论(0) 推荐(0) 编辑
摘要: 很多人都知道安装"VMware Tools"可以实现与windows共享,但是其实它的功能远不止此。安装了"VMware Tools"后,虚拟机的网络、显示、鼠标等等功能都可以改善。对于咱们初学者,用的最多的还是文件共享。为了实现这个目标,我们开始以下工作。 首先声明软件版本问题,这是一个必须慎重考虑的问题,安装过程中出现的问题通常都是由于版本导致的。本人用的是"VMware 6.5+redhat 9.0",出于好奇对于"VMware 6.5+ubuntu 12.0.4"也有测试,下面我们分开讨论。VMware 6 阅读全文
posted @ 2013-09-28 16:28 amanlikethis 阅读(1060) 评论(0) 推荐(0) 编辑
摘要: 一、概述 S3C2440的LCD控制器支持虚拟显示,说的容易理解一点就是,可以显示比实际显示器大的图像。可以这样想象,有一个大的图片,但是显示器(显示串口)比较小,但是我们可以相对于大图片(即大图片不动)移动显示器的位置,从而实现观察大图片的其他部分的内容。芯片手册上对这部分内容用一个图片来生动展示 阅读全文
posted @ 2013-09-28 11:07 amanlikethis 阅读(1432) 评论(0) 推荐(0) 编辑
摘要: 1、#include <>与#include ""的区别 #include <>只在标准库中搜索头文件,而#include ""首先在用户工作目录(指的是当前被编译源文件所在目录)搜索,搜索不到再到标准库中搜索头文件(注意其他目录是不会搜索的)。也就是说#include ""搜索的范围比#inclu 阅读全文
posted @ 2013-09-24 15:32 amanlikethis 阅读(976) 评论(0) 推荐(0) 编辑
摘要: 时钟设置是一个非常重要的环节,如果系统没有合适的时钟,根本无法工作。 S3C2440的时钟复杂,分为FCLK,HCLK,PCLK。 在程序测试中,曾出现这样一个错误。系统当前FCLK为400MHz,分频比是1:4:8,并且为同步工作模式。现在,欲重新设置时钟,把FCLK设置为200MHz,分频比设置 阅读全文
posted @ 2013-09-22 09:37 amanlikethis 阅读(871) 评论(0) 推荐(0) 编辑
摘要: 程序在nor flash中可以运行,但是是有限制的,它不能像RAM那样随意的写(尽管它可以随意的读)。在norflash上,不能运行写存储器的指令,不过排除写的地方是RAM类。实验中的三个文件如下所示:Makefile如下: led_on.bin : crt0.S leds.c arm-linux- 阅读全文
posted @ 2013-09-22 09:05 amanlikethis 阅读(3736) 评论(0) 推荐(1) 编辑