文章分类 -  linux

Tiny6410裸机编程-----WatchDog
摘要:1. What & Why WatchDog (看门狗) 本质上是一个定时计数器,当该计数器递减到0时会产生一个通知(中断或复位),主要用于解决嵌入式系统意外跑飞等运行不正常的问题。开发板一般在默认的情 况下都会开启WatchDog, 这样当计数器递减到0时系统就会复位。因为出现异常的可能性几乎可以忽略,所以bootloader在开始执行时就会关掉开门狗。所以,对 WatchDog的最经典操作就是:关闭。2. Principle (1) WatchDog只使用PCLK时钟 (Tiny6410在没有初始化时钟时,整个开发板由一个12MHz的外部晶振提供频率,PCLK工作频率也是12MHz 阅读全文
posted @ 2013-02-21 18:42 爱哎唉 阅读(180) 评论(0) 推荐(0)
自己写个简单的ARM启动代码,了解C语言程序运行前的那点小动作
摘要:通过这个例子应该可以明白两个问题 1、 在做单片机和arm程序的时候,都会遇到启动代码。在单片机编程中,很多时候启动代码都是已经由集成开发环境准备好了,并不要我们自己去写。但是在arm中,因为ram啊,flash啊,还有各种设备是根据电路设计来的,所以启动代码不自己写都得自己修改。2、为什么不用C语言来写启动代码而必须是汇编?为什么不能在程序一开始就使用C语言的程序?C语言程序运行所需要的基本环境是什么?其实C语言程序并不一定要从main函数执行,也可以用自己定义的函数名,在例子后就会明白。 其实上面的两个问题对于用汇编来写程序的人来说,都是理所当然的,但是更多的人是从C语言开始学习编程的,其 阅读全文
posted @ 2013-02-21 18:09 爱哎唉 阅读(729) 评论(0) 推荐(0)
ARM汇编视频
摘要:国嵌ARM系统精讲班 http://v.youku.com/v_show/id_XMjg3MDQxNzgw.htmlhttp://v.youku.com/v_show/id_XMTg0MTM5MzUy.htmlhttp://v.youku.com/v_show/id_XMTg0MTM5MzUy.htmlhttp://v.youku.com/v_show/id_XNTAzNTk5NTAw.htmlhttp://v.youku.com/v_show/id_XMjA5NTEwNDcy.html 阅读全文
posted @ 2013-02-21 10:00 爱哎唉 阅读(162) 评论(0) 推荐(0)
ARM汇编--寻址方式
摘要:ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集。ARM指令集效率高,但是代码密度高Thumb指令集具有较高的代码密度,却仍然保持着ARM的大多数性能上的优势,它是ARM的子集。所有的ARM置零都是可以条件执行的,而Thumb置零仅有一条指令具备条件执行的功能。ARM和Thumb程序可以相互调用,相互之间状态切换开销几乎为零。首先我们来看一下分类:一、数据处理指令操作数寻址方式 1、立即数寻址方式 2、寄存器寻址方式 3、寄存器移位寻址方式二、存储器访问指令操作数寻址方式 1、寄存器间接寻址 2、基址变址寻址 3、相对寻址 4、多寄存器寻址(块拷贝寻址) 5、堆栈寻址下面 阅读全文
posted @ 2013-02-21 09:34 爱哎唉 阅读(198) 评论(0) 推荐(0)
ARM程序设计
摘要:什么是嵌入式系统?ARM特点:1、体积小、低功耗、低成本、高性能2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件3、大量使用寄存器,指令执行速度更快4、寻址方式灵活简单,执行效率高工作状态:从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令。第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。当 ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。在程序的执行过 程中,微处理 阅读全文
posted @ 2013-02-20 22:14 爱哎唉 阅读(183) 评论(0) 推荐(0)
ARM伪指令
摘要:在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。在ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。符号定义伪指令:符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪指令有如下几种:定义全局变量的GBLA、GBLL和GBLS定义局部变量的LCLA、LCLL 阅读全文
posted @ 2013-02-20 22:11 爱哎唉 阅读(441) 评论(0) 推荐(0)
ARM汇编伪指令介绍.
摘要:在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称 为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。 符号定义( Symbol Definition )伪指令 符号定义伪指令用于定义 ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。 常见的符号定义伪指令有如下几种: —... 阅读全文
posted @ 2013-02-20 22:06 爱哎唉 阅读(197) 评论(0) 推荐(0)
嵌入式linux入门六步曲
摘要:由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意 到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面 比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或 者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux 进行开发。我读研究生的 阅读全文
posted @ 2013-02-20 08:50 爱哎唉 阅读(169) 评论(0) 推荐(0)
Linux下增加系统调用的方法
摘要:1.linux系统调用的基本原理 linux的系统调用形式与POSIX兼容,也是一套C语言函数名的集合。然而,linux系统调用的内部实现方式却与DOC的INT 21H相似,它是经过INT 0X80H软中断进入后,再根据系统调用号分门别类地服务。 从系统分析的角度,linux的系统调用涉及4个方面的问题。 (1)与系统调用有关的数据结构和函数 函数名以“sys_”开头,后跟该系统调用的名字。例如,系统调用fork()的响应函数是sys_fork()(见Kernel/fork.c),exit()的响应函数是sys_exit()(见kernel/fork.c)。 文件include/as... 阅读全文
posted @ 2013-02-19 23:27 爱哎唉 阅读(271) 评论(0) 推荐(0)
linux时间函数
摘要:1.clock函数clock_t start,end;start = clock();end = clock();(end - start)/CLOCKS_PER_SEC;2.times函数struct tms start_tms,end_tms;clock_t start,end;start = times(&start_tms);end = times(&end_tms);long clktck = sysconf(_SC_CLK_TCK);(end - start) /clktck;struct tms {clock_t tms_utime;clock_t tms_sti 阅读全文
posted @ 2013-02-19 22:39 爱哎唉 阅读(568) 评论(0) 推荐(0)
SDIO总线 驱动
摘要:SDIO卡 SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。 SDIO协议是由SD卡的协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。由于这个,SDIO和SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开始来支持低速I/O能力。低速卡支持类似调制解调器,条形码扫描仪和GPS接收器等应用。高速卡支持网卡,电视卡还有“组合”卡等,组合卡指的是存储器+S 阅读全文
posted @ 2013-02-19 16:36 爱哎唉 阅读(410) 评论(0) 推荐(0)
Linux设备驱动子系统- SD卡
摘要:1. 总论2. 主控制器3. 协议层4. 块设备1. 总论1.1 概念MMC - MultiMedia CardSD - Secure Digital Card1.2 分类按存储大小,普通SD卡(<=2GB,支持FAT12/FAT16),HCSD卡(>2GB,<=32GB,支持FAT32)按体积大小,普通SD卡,mini-SD卡,micro-SD卡(TF卡)1.3 速度默认模式: 12.5MB/s高速模式: 25MB/s1.4 子系统代码结构 Linux源码里/drivers/mmc下有三个文件夹,分别存放了SD块设备,核心层和SD主控制器的相关代码,可以通过Kconfig和 阅读全文
posted @ 2013-02-19 16:31 爱哎唉 阅读(1022) 评论(0) 推荐(0)
linux-2.6.26内核中ARM中断实现详解
摘要:看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解。先从函数注册引出问题吧。一、中断注册方法在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)irq是要申请的硬件中断号。handler是向系统注册的中断处理函数,是一个 阅读全文
posted @ 2013-02-19 16:00 爱哎唉 阅读(140) 评论(0) 推荐(0)
Linux MTD层次
摘要:MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱 动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。我将CFI接口的MTD设备分为四层 (从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。 一、Flash硬件驱动层:硬件驱动层负责在init时驱动Flash硬件,Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程.. 阅读全文
posted @ 2013-02-19 15:59 爱哎唉 阅读(134) 评论(0) 推荐(0)
Linux内核中的同步机制
摘要:本文详细的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例一、引言在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量 (rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brl 阅读全文
posted @ 2013-02-19 15:58 爱哎唉 阅读(177) 评论(0) 推荐(0)
Linux设备驱动的分层设计思想
摘要:1.1 设备驱动核心层和例化在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数。如果对于继承的这个事物而言,其某函数的实 现与基类一致,那它就可以直接继承基类的函数;相反,它可以重载之。这种面向对象的设计思想极大地提高了代码的可重用能力,是对现实世界事物间关系的一种 良好呈现。Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计思想。在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核 心层则实现了该设备通用的一些功能。同样的,如果具体的设备不想使用核心层的函数,它可以重载之。举个例子:return_type core_ 阅读全文
posted @ 2013-02-19 15:52 爱哎唉 阅读(234) 评论(0) 推荐(0)
Linux内核中常见内存分配函数
摘要:1. 原理说明Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示。四级页表分别为:l 页全局目录(Page Global Directory)l 页上级目录(Page Upper Directory)l 页中间目录(Page Middle Directory)l 页表(Page Table) 页全局目录包含若干页上级目录的地址,页上级目录又依次包含若干页中间目录的地址,而页中间目录又包含若干页表的地址,每一个页表项指向一个页框。Linux中采用4KB大小的页框作为标准的内存分配单元. 阅读全文
posted @ 2013-02-18 16:58 爱哎唉 阅读(273) 评论(0) 推荐(0)
中断处理
摘要:工 作队列(work queue)是另外一种将工作推后执行的形式,它和前面讨论的tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个 下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。那 么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需要睡眠,那么就选择工作队列。如果推后执行的任务不需要睡眠,那么就选 择tasklet。另外,如果需要用一个可以重新调度的实体来执行你的下半部处理,也应该使用工作队列。它是唯一能在进程上下文运行的下半部实现的机制, 也 阅读全文
posted @ 2013-02-18 10:25 爱哎唉 阅读(230) 评论(0) 推荐(0)
内核同步方法总结
摘要:Linux中内核同步方法总结如下:1、原子整数操作:原子操作可以保证指令以原子的方式运行--执行过程不能被打断.原子操作把读取和改变变量的行为包含在一个单步中执行,从而避免了竞争. 定义:atomix_t t; Atomic_t u = ATOMIC_INIT(0); 操作函数定义在中,原子操作是内联函数.通过内嵌汇编指令来实现.Int atomic_read(atomic_t v)Void atomic_set(atomic_t *v,int i)Void atomic_add(int i,atomic_t *v)Void atomic_sub(int i,atomic_t *v);Void 阅读全文
posted @ 2013-02-18 10:22 爱哎唉 阅读(141) 评论(0) 推荐(0)
linux中断处理原理分析
摘要:Linux中断下半部处理有三种方式:软中断、tasklet、工作队列。曾经有人问我为什么要分这几种,该怎么用。当时用书上的东西蒙混了过去,但是自己明白自己实际上是不懂的。最近有时间了,于是试着整理一下linux的中断处理机制,目的是起码从原理上能够说得通。一、最简单的中断机制最简单的中断机制就是像芯片手册上讲的那样,在中断向量表中填入跳转到对应处理函数的指令,然后在处理函数中实现需要的功能。类似下图:这种方式在原来的单片机课程中常常用到,一些简单的单片机系统也是这样用。它的好处很明显,简单,直接。二、下半部中断处理函数所作的第一件事情是什么?答案是屏蔽中断(或者是什么都不做,因为常常是如果不清 阅读全文
posted @ 2013-02-18 10:18 爱哎唉 阅读(205) 评论(0) 推荐(0)