下面这段代码,就是设置使用串口作为调试输入输出手段了,因为这种方式是最通用的,目前来说,所有嵌入式处理器都带有串口的,这个是基本配置,因此这种方式最通用,又不用添加什么其它的资源,使用起来非常方便,成为嵌入式软件、操作系统内核必选的调试方式。下面来细细地品读这段代码:
#else
#include<mach/debug-macro.S>
当看到这行代码时,也许你会问,为什么汇编代码里也可以使用C语言的include关键字呢?其实,这是linux下编译系统的一大特色,在汇编代码里,当把后缀名写成大写时,它不是汇编器直接可以编译的代码,而是需要使用C预处理的文件。因此,在这个汇编文件里是可以使用C的预处理指令,这样可以提高汇编代码编写的灵活性,同时也可以让代码处理更加强大的功能。比如包含这个头文件mach/debug-macro.S,就可以根据不同的目录路径来选择同样名称的文件,但这个文件里的处理方式可能不一样,不同的ARM处理器,是使用不一样的输出端口的。像我这里的内核源码目录,就有很多不同开发板,比如mach-s3c6400、mach-s3c6410等目录。具体编译时,调用那一个文件是根据makefile文件里定义的参数来决定的。在这个内核里是选择下面的目录文件:
kernel\arch\arm\mach-s3c6400\include\mach
在这个文件里主要是提供了串口的一些宏定义,比如实现怎么样输出到串口,怎么样从串口读取内容。
.macro writeb, ch,rb
senduart\ch, \rb
.endm
在这段代码里,主要就是定义一个宏,这个宏的作用是输出一个字节到某个串口上。上面也看到宏的定义,在linux的ARM汇编里,它是使用.macro和.endm来构造成一个宏的开始和结束。宏定义的具体形式如下所示:
.macro宏名 参数名列表 @ 伪指令.macro定义一个宏
宏体
.endm @.endm表示宏结束
根据这个格式,就可以知道上面的宏是这样的:宏名称是writeb,参数名列表是ch、rb。宏体就是senduart\ch,\rb了。这个宏比较简单,就是调用另外一宏senduart来实现这个功能,参数ch是调用宏输出的字节,参数rb是调用宏时选择的串口,比如串口1,还是串口2。这个宏senduart定义在那里呢?找遍整个文件也没有,其实它是定义在下面路径的文件:
arch/arm/plat-s3c/include/plat/debug-macro.S
也就是通过上面的包括的头文件来引入这个宏定义的。
在宏体里使用参数,也是需要注意的,它是在参数前面添加“\“来识别的,像上面的\ch和\rb。在宏里想要使用注释代码,只需要空格后面添加@,然后写上注释字符串,就实现一行代码的注释了。
通过这一段代码的学习,认识ARM的汇编代码的格式,包括头文件,预处理,宏的定义,以及宏参数引用,宏的注释等相关知识。因此要编写出来代码,需要学习很多知识才可以成为一个合格的开发人员,不像一般人想像的那么简单的,这种知识就是技术的实力,需要多学习,多记,还需要多练习,才会心神意会,达到“身无彩凤双飞翼,心有灵犀一点通”。
//QQ:9073204 EMAIL:9073204@qq.com
//蔡军生 2012-2-19
//培训文档100元一份
分享到:
相关推荐
Linux内核解压过程
linux 内核启动过程以及挂载android 根文件系统的过程
Android Framework精编内核解析
Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦 Android内核剖析 柯元旦
zImage内核镜像解压过程详解 zImage内核镜像解压过程详解
Android内核和驱动篇-Android内核介绍
Android Framework精编内核解析.pdf 百度网盘永久地址
Android 原生浏览器内核,包名 com.android.webview,内核版本116。 适用版本:Android API 24 及以上版本。 com.android.webview_116.0.5845.163-minAPI24.apk
Android各个版本与Linux内核的关系 获得某个内核分支的方法 获得Android某个版本的源码 查看android版本方法
《Android内核剖析》一书附带的图 附图名称如下: 附图1:Framework基本框架 附图2:Activity中创建窗口的过程 附图3:点击图标启动Activity 附图4:Activity的停止以及内存回收时机 附图5:按键消息获取流程 ...
android Framework精编内核解析
Android framework 系统编译 新版WebView浏览器内核101.0.4951.61
Android x5内核集成demo 解决webview在使用内核时跟h5混合调用时出现的白屏,加载缓慢,vue报错各种兼容问题。在x5内核加载失败时,会切换成系统本身的内核来加载h5内容。如果项目上架Google商店等海外市场运营的,...
Android内核和驱动篇-Android内核介绍.txt
Android和Linux内核版本对应关系
基于腾讯X5内核 目前已有功能: 1、文件浏览(支持pdf/ppt/doc/excel/txt) 2、文件上传(JS) 3、文件下载 4、Android与JS交互 5、自定义交互(进度条、下拉回弹) 6、视频播放 1、添加依赖和配置 根目录build....
android 内核剖析 柯元旦
这个android kernel 是google发布android4.0时的内核,其实质是kernel3.0。由于网路的限制,我把他压缩的很少,方便自己上传和大家下载。
Android4.0内核源代码,自己用Get获取的Android4.0内核源代码,需要的朋友自己拿去研究。