ARM/uClinux应用程序的开发
。其实不然,首先以上说的东西一般在IDE的project菜单下的option或build option中找到,只是一般不用管罢了。另一个方面,IDE就像是傻瓜照相机,很多工作他都帮你完成了,使用简单。但如果要做摄影师的话,你就少不了要对每一个细节都了解。其实编译程序也是一样。(你可以对优化,警告级,宏定义等诸多选项进行自己的选择)。以下是几个主要步鄹:(以下有些我也不确认,如发现问题,请及时纠正。
(1) 预编译。 主要工作就是处理所有#开头的,包括头文件。以前搞不清头文件和可执行文件有没有什么联系(因为总看见两个文件名字取一样的),现在知道,他们之间没有任何联系。在预编译结束后,头文件的使命就结束了。在下一次介绍不同平台程序移植时可以看到,预编译有时非常有用。
(2) 编译。编译应该是最主要的一步,就是将源文件生成CPU能识别的语言,一般是 后缀为.o的目标文件,应该说,此时的文件就已经可以执行了。当然这个时候外部函数等外部符号都没有引入,对于被编译程序来说,这些外部符号还只是留一个倩影,压根儿不知它在不在。你可以在你的程序里调用一个不存在的函数,甚至都不用声明,在编译阶段,很多编译器只是给个警告。只有在链接时才会报错。(呵呵,够弱智!)
(3) 链接:链接才是清帐的时候,以前在程序里用到的外部符号都要把真正的东西交出来。你可以指定需要连接在一起的目标文件,也可以告诉编译器库文件的名字和路径(指定方法下次讲)。编译器会去找,需要注意的是,库的指定需要注意顺序。首先,如果不同的库里有同名函数,并且该函数被调用,那么在前面的就被链接进去了,这一点对于头文件路径的指定也适用,如果你自己的头文件和系统头文件相同,并且你的头文件路径在系统头文件路径前面,你的头文件就会代替头文件。库文件是由相应的程序(linux下是ar命令)将需要被添加到库里的目标文件(该文件是编译阶段生成的)组织起来生成档案文件,同时可以建立一个检索,检索内容为所包含的目标文件中定义的符号。也就是说,库文件并不是必须的,但它为经常使用的目标文件中的函数提供了快速的检索机制。
以上就是主要的步鄹,当然除此之外,还有一些用于格式转换的工具等。不一一介绍。知道编译器的细节对于程序的开发和移植都是很有好处的。
程序开发过程中调试也是至关重要,因为可以先在主机上调试,所以可以使用linux下的gdb,(有点像dos 下的debug)。但是只是用到了皮毛,还有一个专用于宿主机模式的调试工具gdbserver,一直没时间研究,希望用过的大侠多发些文章铺路。
另外还会遇到如何作ramdisk,如何让系统启动自己的程序,这些都太linux了,没接触过linux的人会晕,为了大家的健康,就不讲了,遇到问题可以给我email,大家一起讨论。
4.不同平台间程序的移植--简单程序的移植
研究程序移植的那两周是最痛苦的两周,没有太多可以借鉴的东西,只能摸黑向前走,于是更加坚定决心要整理些东西给后来的弟兄。不过话说回来,各位弟兄别被我前面说的吓倒,只要搞清你要作什么,程序移植其实是比较简单的事情。
首先列出一些问题:
(1) X86上运行的程序能不能在51单片机上运行,为什么,有没有可能,如果可以,应该做哪些工作才可以实现。
(2) 相同CPU平台,DOS的程序为什么可以在windows下运行,能不能在linux下运行,为什么,作什么工作可能实现。
为什么可以移植程序,为什么要移植程序?
程序可以移植首先要感谢开发出高级语言的大牛们,记住,无论多么漂亮的代码经过编译以后都要变成CPU可以识别的机器语言,而几乎一千种CPU说着一千种语言。为保证大家有共同语言,规定一种高级语言――高级语言。每一个CPU派出自己的翻译――编译器。这个翻译精通两国语言,高级语言和自己的语言。(由此已经可以看出编译工具在程序移植中的重要性)。只要程序没有硬件上的约束,可以说这种沟通是无极限的,甚至于不同操作系统平台。(操作系统也是程序,也可以移植喽)举例:在x86的windows下用VC(或TC,BC)编一个c程序实现i=i+1,丝毫不改就可以用51的C编译器重新编译并在51单片机上运行。一次小型的移植就结束了。
可以移植已有的程序还要感谢开放源代码的弟兄,没有这些C文件和H文件让你重新编译一下,怎么在你的CPU上跑?其实不止这些,后面还会看见开源组织的牛人专为程序可移植性所作的专门的工作。
那么为什么要移植程序?
问这问题就像问地上有个钱包为什么要捡一样,答案不言而喻。现成的东西为什么不要。当然,移植程序可没有捡钱包那么简单,
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)