
GUN ARM汇编
文章平均质量分 81
dndxhej
这个作者很懒,什么都没留下…
展开
-
GNU ARM汇编--(一)开篇
在大学的时候,汇编就是学的很烂.一是对汇编这门语言没概念,二是那些指令集很难记清楚,用的机会也少,自然学的不好.但是现在觉得相当有必要重头学习一下汇编.部分原因我在上一篇写完设备模型的总结时提到了而.最近在看一本书《ARM:Assembly Language Programming》,作者是Peter Knaggs & Stephen Welsh.作者在开头也提出学习汇编的必要性和重要性,借他们的原创 2012-04-22 20:02:26 · 14485 阅读 · 6 评论 -
GNU ARM汇编--(十三)GNU ARM汇编下的linker script
在写GNU ARM汇编下的linker script之前,还是有必要看一下ldr指令,以及ldr和adr伪指令. ldr指令: LDR load word into a register Rd ldr伪指令: LDR Rd, =con原创 2012-08-26 23:27:13 · 3789 阅读 · 2 评论 -
GNU ARM汇编--(十四)GNU ARM汇编下做任务调度
以前工作中用过arm7,没有MMU,也没有用任何OS.现在回忆当时的代码结构,我觉得可以叫无限循环的有限状态机.arm7不跑OS,就相当于单片机,单片机跑的肯定是无限死循环.有限状态机是因为整个代码要处理很多外部的事情,那就是大的循环里面来套小循环,以轮询的方式来检查外界的变化,然后系统作出变化,系统在有限的状态中切换. OS的一个标识就是支持多任务的并发.比方说linux,我们原创 2012-09-08 23:24:25 · 3164 阅读 · 13 评论 -
GNU ARM汇编--(十五)linux下的printascii
在前面对很多s3c2440的功能模块进行学习后,已经具备了将这些模块综合起来的条件,基于此,将前面的代码综合成一个简单的bootloader.自己写的bootloader在引导kernel的时候,串口输出只有Uncompressing Linux...和done, booting the kernel。串口有这个输出,说明kernel被正确引导了,但是串口有问题。 这篇blog只原创 2012-10-04 23:09:55 · 5903 阅读 · 3 评论 -
GNU ARM汇编--(十六)bootloader与kernel之间的commandline的传递
在《GNU ARM汇编--(十五)linux下的printascii》中已经初步分析了自己写的bootloader在引导kernel时候出现的commandline在bootloader和kernel之间传递的问题,今天终于解决了,并对参数传递有一些研究: 传递的参数为: params->u1.s.page_size = LINUX_PAGE_SIZE; params->u原创 2012-10-09 00:10:58 · 13332 阅读 · 7 评论 -
GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读
自己写的bootloader可以引导kernel了,我以为曾经神秘的u-boot代码将变得毫无挑战,然事实表明u-boot作为优秀的开源代码,阅读起来还是很有挑战的,值得一读! 阅读碰到的头等问题:Makefile和shell脚本看不懂... 说起来做linux也很久了,Makefile和shell脚本都接触过,但真的都是略懂而已.因为公司的Makefile和s原创 2012-10-31 21:43:08 · 18139 阅读 · 5 评论 -
GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法
在《GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读》中分析完u-boot-2012.07的makefile以及mkconfig脚本后,发现一个现象:在makefile中少了许多xxx_config之类的目标,而在目录下多了一个boards.cfg文件.仔细看下makefile和mkconfig就明白其实也没什么实质性的变化.也就是说,我们在make xxx_原创 2012-11-26 21:09:07 · 14813 阅读 · 1 评论 -
GNU ARM汇编--(二十)总结
从这个系列第一篇开始,那是4月22号,到今天做一个总结,已经有7个多月的时间了,利用业余时间学习自己感兴趣的东西,进度比较慢,也是比较累的,但收获也是很多的. 这个系列之所以写出来,是因为自己在玩linux文件系统和驱动的时候,总是觉得自己应该回头看看bootloader到底是怎么工作的.本来只想着重新看下arm体系结构和汇编语言的,没想到一路上还学习了以前从没想过的编译链接的细原创 2012-12-01 15:13:01 · 8930 阅读 · 9 评论 -
GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析
在理解bootloader后,花些时间重新学习了开源软件的makefile和相关脚本之后,自己的u-boot移植工作也比较顺利的完成了: 移植环境: ubuntu 12.04 U-Boot 2012.07 (Nov 28 2012 - 20:05:48) arm-none-linux-gnueabi-gcc (Sourcery原创 2012-12-01 14:25:43 · 11699 阅读 · 8 评论 -
一步步玩pcDuino3--mmc下的bootloader
pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的。 我们首先介绍下SPL框架,可以先看下《GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法》和《GNU ARM汇编--(十九)u-boot原创 2014-05-19 16:23:17 · 10794 阅读 · 0 评论 -
一步步玩pcDuino3--uboot下的ping,添加命令可以接受来自host的ping
uboot是一个非常优秀的开源项目。不仅仅可以学习bootloader,嵌入式,各种总线协议。还可以了解网络协议栈。在嵌入式开发中,经常使用uboot的tftp和nfs来加快开发的效率。那么在tftp可以使用之前,我们要保证host和pcDuino3可以ping通。在uboot下可以ping通host,但是host不能ping通uboot,这是因为uboot不是操作系统,我们需要做了个命令来循环等原创 2014-05-23 16:58:55 · 8735 阅读 · 0 评论 -
GNU ARM汇编--(十二)arm汇编指令的B真的那么简单吗?
说句题外话,在输入“指令”二字的时候,就想起了google搜索时,提示“令”不能搜索,要我换词汇.如果不能说脏话,我真就无语了. 在前面对具体芯片的各个基本模块做完了学习后,在上一篇小结中自以为已经具备了自己写个bootloader的条件,但其实错了,我还有很多基本的知识不了解.比如编译链接\gnu的linker script等等.也有很多地方只懂表面,没有做深入的理解.原创 2012-08-23 23:15:15 · 7305 阅读 · 1 评论 -
I2C之知(六)--s3c2440用I2C接口访问EEPROM
在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpio.c,依然没调出来.如果有示波器,可能很快就能找到原因,现在完全不知道问题出在哪里.其实想用GPI原创 2012-08-05 20:50:28 · 5445 阅读 · 1 评论 -
GNU ARM汇编--(二)汇编编译链接与运行
GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编. 给出一个模板文件: .text原创 2012-04-26 22:28:46 · 16133 阅读 · 10 评论 -
GNU ARM汇编--(三)ARM处理器的基本原则
这一篇的知识来源全部来自《ARM System Developer's Guide》 从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示: 数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而h哈佛结构体系的arm核就原创 2012-05-06 16:25:29 · 11877 阅读 · 0 评论 -
GNU ARM汇编--(四)中断汇编之非嵌套中断处理
在写这篇blog之前,不得不感慨一句:纸上得来终觉浅,绝知此事要躬行.作为EE出身的,虽然好久好久没用汇编写单片机的中断了,但自我感觉对中断的理解还是比较深入的,本以为在GNU ARM汇编下搞个中断会很容易,谁知道断断续续花了我几周.完全用汇编写中断和用c中的_irq写中断还是有区别的,谁用谁知道.还是那句话:深入细节是必须的,也是值得的. 这一篇blog的理论知识主要来源于:《原创 2012-06-03 11:06:41 · 6296 阅读 · 1 评论 -
GNU ARM汇编--(五)中断汇编之嵌套中断处理
在上篇《GNU ARM汇编--(四)中断汇编之非嵌套中断处理》中分析了最简单的中断处理的写法,再看TQ2440启动代码中的中断向量表的写法就一目了然了.今天抽时间对嵌套中断处理的学习做下整理. 嵌套中断处理的核心代码如下:;/*; * _________________________________________________________________原创 2012-06-08 22:49:21 · 4834 阅读 · 0 评论 -
GNU ARM汇编--(六)s3c2440的时钟控制
前面几篇利用GNU ARM汇编控制LED以及ARM的中断处理的设计,对ARM汇编以及体系结构有了一定的认识.后面的汇编学习会结合具体的芯片进行,一个为了更灵活熟练的使用汇编,二也是为了通过学习一款具体芯片来提炼出一些有价值的经验.此次选择的芯片是三星的s3c2440,arm920t的核,整个板子是TQ2440的板子,这个板子放了两年多了,零散的玩过一些,但是为了建立更有体系的知识结构,还是值得把它原创 2012-06-23 00:10:26 · 4865 阅读 · 0 评论 -
GNU ARM汇编--(七)s3c2440的串口控制
在配置完s3c2440的系统时钟后,我们来控制串口.之所以将串口放在这么靠前,是因为串口会给我们带来更多的信息.在没有串口的时候,uboot启动阶段只能靠led来显示一些信息.那么有了串口,debug就方便很多了.在工作中,一般情况下,很少有机会用jtag口加上昂贵的codeviser工具进行debug,也很少用gdb进行远程debug的,用的最多的还是打开debug的define来分析确定问题.原创 2012-06-24 13:02:00 · 5185 阅读 · 0 评论 -
GNU ARM汇编--(八)s3c2440的watchdog
从单片机起,watchdog就是必不可少的.在各种应用环境中,程序很可能跑飞或死掉,这时候就需要通过watchdog来保证整个系统重新恢复到正常状态. 照旧,给出s3c2440的datasheet说明:概述: watchdog timer用于由于噪声或者系统错误引起的程序跑飞了的情况下恢复处理器的正常操作.它可以被用作一个可以请求中断服务的普通16bit的内部定时器原创 2012-06-26 22:19:06 · 3110 阅读 · 0 评论 -
GNU ARM汇编--(九)s3c2440的PWM
依旧从datasheet开始看起,锻炼下阅读英文技术手册的能力PWM TIMER概述 s3c2440有5个16bit的定时器.Timer0,1,2和3有PWM功能.Timer4是没有输出管脚的内部定时器.Timer0有一个dead-zone产生器,用于大电流设备. Timer0和1共用一个8bit的预分频器,而timer2,3,4共用另外一个8bit的预分频器.每一个定原创 2012-06-30 21:08:46 · 3755 阅读 · 0 评论 -
GNU ARM汇编--(十)s3c2440的RTC
RTC概述 在系统电源关掉时RTC可以在备份电池的支持下来工作.RTC可以使用STRB/LDRB指令传输8bit的BCD值到CPU.数据包括秒,分,时,日期,天,月和年.RTC工作在外部32.768KHz的晶振下,而且有报警功能.属性 BCD:秒,分,时,日期,天,月和年 闰年产生器 报警功能:报警中断 从power-off模式唤醒原创 2012-07-12 22:22:43 · 2996 阅读 · 4 评论 -
一步步玩pcDuino3--mmc下的裸机流水灯
第一部分是玩pcduino3下的裸机,这个过程可以让我们更好的理解嵌入式系统,熟悉我们使用的这个平台。 首先介绍下开发环境:虚拟机:VMware® Workstation 10.0.2 build-1744117系统:Linux slackware 3.2.29-smp #2 SMP 交叉编译器:arm-linux-gnueabihf- 版本号:原创 2014-05-09 18:54:17 · 14123 阅读 · 0 评论