自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 volatile关键字

就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如

2014-01-24 08:59:37 663

原创 基于中断的LED驱动程序

1.linux中程序切换到后台去运行,第一种办法是在输入命令的时候在末尾加上&符号:# ./test &如果测试程序已经在运行了,这个时候可以按ctrl+z将程序切换到后台去运行。将后台运行的程序切换到前台:# fg如果有多个后台程序,可以先使用jobs命令,然后使用fg+数字来指定将某个程序切换到前台。# top这个命令可以查看各个进程使用CPU的比例(类似于wind

2014-01-23 22:03:40 888

原创 第七章 驱动开发_第一个字符型设备(LED)驱动

1.下图是驱动的基本示意图应用程序调用open,read,write等函数,open等函数是在c库中是实现的(通过swi + value指令就会触发一个异常),这个异常进入内核空间,内核空间就会根据不同的值调用sys_open,sys_read,sys_write等函数,这些函数根据打开的不同的文件的属性找到更为底层的驱动程序。2.对于一个最为简单的字符型驱动程序,最简单的做法就是让上

2014-01-11 09:30:27 1009 1

原创 文件系统制作&NFS

1.内核怎样启动第一个应用程序(1)打开一个设备open("/dev/console");sys_dup(0);sys_dup(0);注释:open函数打开一个文件(第一个文件标号为0),sys_dup(0)表示复制第一个文件,所以printf,scanf,err三个都指向终端/dev/console。(2)通过run_init_process来启动程序,这个函数如果传入的

2014-01-08 21:59:24 883

原创 第三课 protel学习系列——protel功能拓展

第三课1.     将99做的元件库导入到AD中:选中两个Lib文件→单击右键→选择导出→新建一个文件夹→将导出的东西放到这个文件夹中→AD的元件库在右边栏中→点击出现→点击元件库之后→选择Libraries→Installed→选择刚才导出的再点击Install→文件类型记得选为所有文件。2.     新建一个工程:file→new→Project→PCB Project→在左边出现的工

2014-01-08 09:56:50 2130

原创 第二课 protel学习系列——原理图的绘制&PCB绘制基础

1.     File→new→双击Documents→新建Schematic Document→更改名字。2.     Design→Options→将设计纸的大小改为A4(Standard选项)→上方(Organization)→添加信息→上方(Sheet Options)→Title Blo→修改样式→添加样式之后需要将此改为ANSI。3.     修改鼠标:Tools→Prefer

2014-01-08 09:55:27 2486

原创 第一课 protel学习系列——原理图库和封装库的制作

1.       运行protel时可以先运行 ENprotel软件,会让protel设计变得非常简单。2.       建立一个新的工程:file→new(此时可以为项目设置密码)→对Database File Name重新命名→点击Browse选择目录→找到目录后点击保存。3.       工程建立完成之后→双击Documents→在空白处单击右键→选择new来新建一个元件库。4.

2014-01-08 09:53:16 3728

原创 WORD学习笔记

1.  工具栏的显示和隐藏。在菜单栏点击右键,即可出现需要显示的工具栏。2.   保存文档时可以设置密码,在另存为界面时,点击工具→安全选项。3.   编辑→清除→格式:完成对所选内容的格式的清除。4.   如果有语法错误的地方,可以选择有错误的位置,点击鼠标右键,选择忽略错误。5.   点击视图→web版式:这样选择之后每行的内容刚好放满就会自动换到下一行。6.   视图→显

2014-01-08 09:50:37 1280

转载 C语言文件操作

c语言文件操作13.3 文件的打开与关闭 文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。在C语言中,文件操作都是由库函数来完成的。在本章内将介绍主要的文件操作函数。13.3.1 文件的打开(fopen函数)

2014-01-08 09:45:23 1424

原创 第四章 裸机_裸机开发知识补充

原理图部分:1.芯片内部上拉功能的使用,在外接按键或者用作中断功能的时候可以将内部上拉功能使能,这样就避免了在外部电路需要接一个上拉电阻。2.2440的内存控制器会根据CPU发出的地址范围自动将对应芯片的片选端使能,能实现的原因是各个外设映射的地址不一样。3.协议:(1)你说的别人能听懂:双方约定信号的协议。(2)你说的语速要让别人接受:双方满足时序要求。4.UART:Un

2014-01-08 09:42:20 908

原创 s3c2440的2440init.s详解_补充

1.S3C2440支持两种启动方式:NAND FLASH和NOR FLASH。网上有很多文章分析TQ2440的启动文件2440init.s。介绍的很详细,我这里只是把S3C2440上电后的程序流程描述下。不管在哪种启动方式下,ARM上电启动都是从0X00000000开始运行。下面是复位程序入口。AREA Init,CODE,READONLYENTRYResetEntryb

2014-01-08 09:37:51 1391

原创 s3c2440的2440init.s详解

;=========================================; NAME: 2440INIT.S; DESC: C start up codes;       Configure memory, ISR ,stacks;        Initialize C-variables; HISTORY:; 2002.02.25:kwtark: ver 0

2014-01-08 09:36:35 2161

转载 RO、RW和ZI段详解

要了解RO,RW和ZI需要首先了解以下知识:     (1)    ARM程序的组成此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。一个ARM程序包含3部分:RO,RW和ZIRO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是

2014-01-08 09:34:20 2300

转载 ubuntu常用命令

查看软件xxx安装内容#dpkg -L xxx查询软件xxx依赖哪些包#apt-cache depends xxx查询软件xxx依赖哪些包#apt-cache depends xxx查看内核#uname -a查看Ubuntu版本#cat /etc/issue查看内核加载的模块#lsmod查看PCI设备#lspci查看USB设备#lsusb

2014-01-08 09:32:22 682

转载 环境变量和防火墙

1.修改系统环境变量(1)把编译器路径加入系统环境变量,运行命令#gedit /root/.bashrc编辑/root/.bashrc 文件,在最后一行添加:export PATH=$PATH:/usr/local/arm/4.3.2/bin重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入arm-linux-gcc –v,会出现如下信息,这

2014-01-08 09:31:04 847

原创 第三章 裸机_第一个裸机程序(中)

1 使用ADS 创建LED 工程本节通过一个简单的具体实例,介绍如何使用 ADS集成开发环境。包括如何创建一个新的工程,如何配置编译选项,并编译生成可以直接烧写到Flash中的bin 格式二进制可执行文件。1.1 建立一个工程在 ADS 集成开发环境中,点File->New,打开如图所示窗口:可以看到有 7 种工程类型可以选择:ARM Excuteable Im

2014-01-08 09:25:29 832

原创 内核启动之内核启动流程

1.创建一个sourceInsight工程将Linux-2.6.22.6_jz2440中的所有代码加入,然后移除掉Arch,然后将Arch中的Boot、Common、Configs、Kernel、Lib加入,Mach-s3c2410、Mach-s3c2440加入,将Mm、Mwfpe、Oprofile、Tools、Vfp加入,将plat-24xx加入;去掉include目录,然后将include

2014-01-06 21:36:13 840

原创 内核启动makefile分析

1.子目录下的makefilea.c和b.c要编译进内核:obj-y+=a.o b.oa.c和b.c要联合组成一个模块:obj-m+=ab.o(ab.o是一个名字)ab-objs:=a.o b.o(objs是固定的)执行时:a.c-->a.o b.c-->b.o a.o&b.o-->ab.ko2.顶层的makefile顶层的makefile中并没有找到uImage,

2014-01-06 16:03:57 1053

原创 内核启动过程的配置

1.制作内核的几个步骤A.解压缩B.打补丁C.配置(3种方法):make menuconfig、使用默认的配置,在上面修改(推荐)、使用厂家提供的配置文件D.编译注:查找默认配置文件:find -name "*defconfig*"2.配置内核的第二种方法详解在arch/arm/configs里面找到s3c2410与2440比较类似,所以选择使用这个来修改。执行ma

2014-01-05 11:19:23 708

原创 第六章 驱动开发_JTAG接口和supervivi

1.BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。2.JTAG接口可以用来烧写程序,除此之外,JTAG接口在开发中最常见的用途是单步调试,不管是市面上常见的JLINK还是ULINK,以及其他的仿真调试器,最终都是通过JTAG接口连接的。标准的JTAG 接口是4 线:TMS、TCK、TDI、TD

2014-01-03 21:50:31 1100

原创 第五章 驱动开发_Nand flash启动 & Nor flash启动 & 时钟倍频

1.开发板通过配置的时钟一般较低,通过倍频器倍频得到高频率?这是因为CPU的主频是通过外频乘以倍频得来的,而外频是整个系统的基准频率,当外频提高时,如不作任何调整,PCI频率、内存频率、前端总线或HT总线频率等都会随之提升,因此有时就会出现超频后硬盘不正常的现象,在超频时往往锁定PCI频率并设置内存异步,就是这个原因。而对于倍频来说它与周边其它部件无关,提升倍频不会对它们造成影响,从另一方面

2014-01-03 21:50:29 1315

原创 第四章 驱动开发_vivi、uboot、eboot的区别

简单的说它们都是bootloader,所完成的任务也大同小异。vivi是mizi开发的用于s3c241x/s3c244x 的linux bootloader, 友善之臂移植了USB下载功能后就成了现在看到的superviviu-boot是一个广泛用于ARM平台的bootloader,目前也支持s3c241x/s3c244x,可以用来启动LinuxEboot是WinCE平台下的bootlo

2014-01-03 21:50:27 1081

原创 第三章 驱动开发_fdisk命令 & cp命令 & 主次设备号

1. 使用linux下的fdisk工具进行分区。用root用户登录到你的linux系统,查看你系统的分区#fdisk -l会出现以下的信息:Device Boot Start End Blocks Id System/dev/sda1 * 1 64 512000 83 Linux/dev/sda2 64 2611 20458496 8e Linux LVM根据提示信息可以判断出此系

2014-01-03 21:50:25 772

原创 第二章 驱动开发_devfs设备文件系统详解

Devfs,也叫设备文件系统(DeviceFilesystem),设计它的唯一目的就是提供一个新的(更理性的)方式管理通常位于 /dev的所有块设备和字符设备。您也许知道,典型的 /dev树包含数百个块特殊文件和字符特殊文件,它们全都在根文件系统上。每个特殊文件都可以让用户空间进程轻松地与内核设备实现交互。举例来说,通过对这些特殊文件执行操作,您的X 服务器就能够访问视频硬件, fsck

2014-01-03 21:50:22 1054

原创 第一章 驱动开发_驱动开发基本知识

1. # 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串.例如, 命令 #define to_string( s ) # s将会使编译器把以下命令 cout 理解为 cout 使用##连结##前后的内容. 例如, 命令#define concatenate( x, y ) x ## y...

2014-01-03 21:50:20 780

原创 你必须知道的495个C语言问题整理三

1.为什么大家都说不要使用gets()?跟fgets() 不同, gets() 不能被告知输入缓冲区的大小,因此不能避免缓冲区的溢出。标准库的fgets() 函数对gets() 作了很大的改进, 尽管它仍然不完善。2. fgetops/fsetops 和ftell/fseek 之间有什么区别? fgetops()和fsetops() 到底有什么用处?ftell() 和fseek() 用长

2014-01-03 21:50:18 943 1

原创 你必须知道的495个C语言问题整理二

1.在调用malloc() 的时候, 错误“不能把void * 转换为int *”是什么意思?说明你用的是C++ 编译器而不是C 编译器。2. 我用一行这样的代码分配一个巨大的数组, 用于数字运算: double*array =malloc(300 * 300 * sizeof( double )); malloc() 并没有返回null,但是程序运行得有些奇怪, 好像改写了某些内存,

2014-01-03 21:50:16 826

原创 第三章 裸机_第一个裸机程序(下)

1.在上一讲中,已经可以用make生成我们自己的二进制文件,现在需要将二进制文件下载到S3C2440中去运行。首先需要做的就是连接J-link,然后配置AXD。2.首先启动AXD Debugger:在XP的开始菜单中选择 程序->ARM Developer Suite ->AXD Debugger. 第一个裸机程序(下)" TITLE="第三章 第一个裸机程序(下)" />启动AXD

2014-01-03 21:50:14 999

原创 第三章 裸机_第一个裸机程序(上)

第一章 裸机调试入门知识1.对于友善之臂Micro2440开发板进行裸机调试时,需要将启动FLASH选项开关拨动到NORFLASH上。这样做的原因:裸机程序里面会包含很多的初始化,这些初始化一般都是由u-boot或者vivi来完成的,而u-boot或者vivi一般都放在NORFLASH中,所以启动选项要选择到NOR FLASH上。2.H-JTAG和J-LinkH-JTAG:H-JTAG

2014-01-03 21:50:12 1414

原创 你必须知道的495个C语言问题整理一

1.在使用全局变量时,一般将定义放在.c文件中,而将声明放在.h文件中,定义变量的.c文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。2. 永远不要把外部函数的原型放到.c 文件中: 通常它与定义的一致性不能得到检查,而矛盾的原型比不用还糟糕。3. 在函数外声明的变量和有静态存储类型的变量可以确保初始值为零, 就像程序员键入了“=0”一样。因此, 这些变量如果是指针会被初始化

2014-01-03 21:50:10 1404

原创 第四章 嵌入式操作系统_u-boot常用命令

1.bootm引导启动存储在内存中的程序映像,这些内存包括RAM和Flash。# bootm [addr [arg ...]]addr为程序映像的地址,必须是U-boot的格式。第二个参数对于引导Linux内核有用,通常作为U-boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数。2.bootp通过bootp请求,要求DHCP服务器分配IP地址,然后通过TFTP

2014-01-03 21:50:08 794

原创 第三章 嵌入式操作系统_进程及进程调度Bootloader

1.在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。程序是一个普通文件,是机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映像中,程序一般只包含正文段和用户数据段。进程是由正文段、用户数据段及系统数据段共同组成的一个执行环境,它是一个动态实体。程序是硬盘上存放的一个文件,当程序运行时,它也就成为了进程。进程的组成部分详解:正文段:存放被执行的机

2014-01-03 21:50:05 924

原创 第二章 嵌入式操作系统_autotools&vmalloc

1.对于大型的项目,Makefile文件的编写是一件比较繁琐的事情,所以现在Linux上的软件开发一般都用autotools来制作Makefiles。2.autotools的使用流程(1)autoscan   它会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查。它会搜索源文件以寻找一般的移植性问题并创建一个文件“configure.scan”,该文

2014-01-03 21:50:03 631

原创 第一章 嵌入式操作系统_基础知识

1.自从清华大学邵贝贝教授将Jean J.Labrosse的“µC/OS-II:the RealTime Kernel”翻译后,在国内掀起了µC/OS-II的热潮。2.其他的嵌入式操作系统VxWorksVxWorks是WindRiver公司专门为实时嵌入式系统设计开发的操作系统软件,为程序员提供了高效的实时任务调度、中断管理,实时的系统资源及实时的任务间通信。QNXQNX是一款实时操

2014-01-03 21:50:01 905

原创 第二章 裸机_u-boot下载裸机程序以及ARM编程基础

1.使用u-boot下载裸机程序在笔记本没有并口和串口的情况下,使用u-boot下载裸机程序到nand flash主要分为以下几步:(1)下载u-boot到nor flash。(2)需要USB转串口线。(3)需要USB下载线。(4)设置超级终端。(5)安装DNW软件(三星公司出的ARM程序下载器)。DNW 在这里是我们的.bin 文件下载软件,可实现我们向flash或者内存当中烧写

2014-01-03 21:49:59 1539

原创 第一章 裸机_ADS和使用J-Link下载u-boot

1.ADS(ARM DevelopmentSuit)是ARM公司推出的嵌入式微控制器集成开发工具。ADS集成开发环境由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)组成。初学者一般使用的都是Code WarriorIDE集成开发环境和AXD调试器,这两个软件已经可以满足开发需求。2.Code Warrior for ARM集成了ARM汇编器、ARMC/C

2014-01-03 21:49:57 1473

原创 第十一章 进程间通信

1.管道的定义当从一个连接数据流到另一个进程时,我们使用术语管道(pipe)。对于shell命令来说,命令的连接是通过管道字符来完成的,如下所示:cmd1 | cmd2shell负责安排两个命令的标准输入和标准输出。cmd1的标准输入来自终端键盘。cmd1的标准输出传递给cmd2,作为它的标准输入。cmd2的标准输出连接到终端屏幕。shell所做的工作实际上是针对标准输入和标准输出

2014-01-03 21:49:55 578

原创 第十章 POSIX线程

1.线程的定义在一个程序中的多个执行路线就叫做线程(thread)。更准确的定义是:线程是一个进程内部的一个控制序列。当进程执行fork调用时,将创建出该进程的一份新副本。这个进程拥有自己的变量和自己的PID,它的时间调度也是独立的,它的执行(通常)几乎完全独立与父进程。当在进程中创建一个新线程时,新的执行线程将拥有自己的栈(因此也有自己的局部变量),但与它的创建者共享全局变量、文件描述符、

2014-01-03 21:49:53 656

原创 第九章 调试

1.gdb是一个功能很强大的调试器,它是一个自由软件,能够用在许多UNIX平台上,它同时也是Linux系统中默认的调试器。启动gdb:# gcc –g test.c –o test# gdb testgdb本身是一个基于文本的应用程序,但它为一些重复性的任务准备了一些快捷键。gdb的许多版本都带有历史记录的命令行编辑功能,用户可以使用方向键获取历史记录。gdb的所有版本都支持空命令,即直

2014-01-03 21:49:51 618

原创 第八章 开发工具

1.makefile文件用来告诉make命令应用程序的构造。makefile文件由一组依赖关系和规则组成。每个依赖关系由一个目标(将要创建的文件)和一组该目标所依赖的源文件组成。而规则描述了如何通过这些依赖文件来构造目标。一般来说,目标是一个单独的可执行文件。make命令会读取makefile文件的内容,它先确定目标文件,然后比较该目标所依赖的源文件的日期和时间以决定该采用哪条规则来构造目标。ma

2014-01-03 21:49:48 593

空空如也

空空如也

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

TA关注的人

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