编程_汇编调用C语言及Makefile规则.docx
4_S5PV210编程_汇编调用C语言及Makefile规则今天,主要内容为S5PV210编程_汇编调用C语言及Makefile规则一、Makefile最简单的规则 二、汇编语言调用C程序注意如果前面的内容都看完了,且“没有明白”或者“操作成功”的,请回过头,人人真真的再看一看,如果还是不能够明白,就想一想其他的办法吧如百度提问、找我、找一些高手.为什么这么说因为吧,这些都是基础,基础不代表水平,但是却决定走的长度。 我现在就严重觉得自己基础不足很多东西都是建立在空中,坍塌很容加入看着、看着,突然发现我的文章写得非常差劲,或者不再需要了,我会非常开心。 我写这些的目的,根本原因就是希望“更多的朋友能够从底层还是了解嵌入式”. 现在网上关于S5PV210的资料不少,甚至学习过Arm11的几天就能够上手了。 但是,我还是认为,要学好嵌入式系统,不能够拘泥于外表。说这些,并不是要说我多么厉害,也不是为了说我多么伟大。只是在强调基础的重要 中国有句古话,“万丈高楼平地起,地基却没有打牢,塌了”. O_O哈我杜撰的。接下来文章会非常重要第一部分 Makefile最简单规则1、 说明为什么要先学习Makefile规则呢告诉你,我不远再敲那么多代码了 中国有句古话说的好,“想要成为一名优秀的程序员,就要学会偷懒.” 哈哈,当然这句是我杜撰的了不过,Makefile可不是偷懒,这个是一个高级程序员的思想的体现 像这个“流水灯似的程序”,才几行,根本不能够体现Makefile规则的伟大,更体现不出一个高级程序员的思想,其实,这个思想也是在一方面指“编程思想”了 在最前面学习Makefile也是为了强调编程思想对于程序员的重要性 可以说,“编程思想”决定一个程序员的水平以及成就。我只说,我写S5PV210程序的时候是先写Makefile,再写程序的。 如果,对这句话不理解,不会影响下面的学习O_O哈哈废话少说,开始正题。2、改装上一个程序上一篇文章我们的只有一个文件,在执行一些命令后生成了我们最后下载到开发板的程序。这篇文章,要把后期执行的命令写入一个文件。然后用一条命令去完成它,其实,这个就是传说中的最简单的Makefile了。当然,我们在以后的文章中逐渐去完善。首先,用vixx去建立一个Makefile文件,其实,这个名字可以用你任何想要的,但是需要加入-f参数,最主要的经过多年发展,Makefile这个名字已经被规范化了,所以,-f参数的使用,玩玩还行,正规程序,用于存档的还是用Makefile吧。O_O潜规则哦 arm-linux-ld -Ttext 0 -oarm-linux-objcopy -O binaryarm-linux-gcc -c -o操作方法vi Makefile直接进入的是“命令模式”,需要按“i”键进入“文本模式”。另外,这里我们再学一个“单行模式”的命令,还记得进入“单行模式”的方法吗在“文本模式”按”ESC”键,进入“命令模式”,或者直接在“命令模式”下,输入“”进入单行模式,在进入单行模式后,输入“set nu”。然后,我们将上面的命令写入进去后,保存退出还记得保存退出的方法吗 在单行模式下,输入“wq”.没有把这些常用命令一次学完,一方面是担心记不住,还有就是有的时候多的我都想不起来 而且,如果,一下子说出来,岂不是在学习Linux.我们看看这篇Makefile,看之前,首先要知道两个概念,“目标”、“依赖” 目标,写在前面,与依赖用“”隔开。如,文件是目标,文件是依赖。查看时,会确定为最终文件,依赖,然后,就会去找了。然后发现下面的三条命令,在输入命令前,要输入一个按键,不等同于多个空格哦这就完事了,想要使用Makefile,就用make一下就Ok了. 操作方法 make当然,面对这样一个小程序的时候,根本不能够体现Makefile的强大,试想一下,当你面对成千上万个程序的错综复杂关系时候,你会不会有些痛苦如果你修改一个文件后呢 当然,我们还有集成开发环境,这才是答案,O_O哈 好了,我们接下来对Makefile升级,为它添加伪指令“clean”,去删除中间文件“*.o”“*.elf”,这个同样可以用其他的名字,但是多年的使用,几乎成为规范了我虽然不喜欢墨守成规,但还是非常喜欢用这个。伪指令要如何写呢其实,就是指没有“依赖”的“目标”会去直接执行下面的命令。 如何使用伪指令用make调用即可。 操作方法make clean第二部分 汇编语言调用C程序1、说明本程序为汇编调用C程序,实现流水灯功能 创建启动文件,主要为C语言设置栈,栈的作用可以用于存储局部变量什么滴 下面给出文件内容及其功能介绍 .global _start_start ldr sp, 0 xD0037F80设置栈,以便调用c函数 栈的地址是任意选取的,但是要是一块不用的空区域这里面我们就先把它放在这个地址了,以后会有更先进的方法 bl main调用C函数, 使LED闪烁,这个是可以随便定义的,但是要在函数里面的main也修改,这个就是C程序的入口halt防止程序跑飞 b halt汇编语言部分是不是很简单的确如此,它什么都没有做,就是在为C语言开发设置栈。 下面我们看看C语言程序。建立C程序文件,我的就叫做“led_”要求,文件内部主函数必须与汇编语言函数bl跳转过来的名字相同,我的就叫做main了,强烈建议命名为main,多少年都这么过来了。define GPJ2CON *volatile unsigned long * 0 xE020XX80 define GPJ2DAT *volatile unsigned long * 0 xE020XX84define uint unsigned intvoid delayuint delay whiledelay; void gpioInitvoid GPJ2CON 0 x00001111; GPJ2DAT 1; int mainvoiduint i 1; uint j 1; gpioInit ; while1 j i; GPJ2DAT j; i ii; ifi 16i 1; delay0 x100000; C程序文件就这些了,程序很简单我就不解释了。可以对比着我们上一个的汇编语言程序看看,我把两个的操作过程写的一模一样了。 至于,volatile 的作用就是一个防止被编译器优化的命令。详细的就查一查百度. 下面我们看看Makefile文件。对比于我们前面的Makefile,没有加入什么新东西。 只是将最后的目标文件有了两个依赖。 我就不多说了。 led_ arm-linux-ld -Ttext 0 -o led_ arm-linux-objcopy -O binary arm-linux-gcc -c -oled_ led_ arm-linux-gcc -c -o led_ led_clean rm -f *.o rm -f *.elf用汇编语言调用C程序的实现就是这些了。 但是让人不满意的地方有很多,比如,我们在操作这四个LED的同时,会影响其他的IO口。 比如,我们的延时函数的函数体写在了led_文件下。所以,我们要对这个流水灯再一次进行升级,让它更漂亮一些。 这个将在下一篇文章内完成,同时对Makefile也进行一下升级,Makefile以后的变更更容易效果我就不展示了,和汇编语言的一样。这篇文章的内容不是很多,但是要学习的东西却是非常多的。尤其是Makefiel规则的使用,我会分享一个网络上的热心高手分享的资料 同时在这里表示感谢O_O哈小王发布于联系方式 QQ 1320465765TEL18745950097