三星6410裸机程序开发2:建立eclipse裸机程序工程

发布时间:2023-05-05  

网上关于S3C6410裸机程序开发都是基于RealView RVDS。也有一些是基于eclipse的,但都没有详细介绍在eclipse中如何建立S3C6410裸机程序工程。

尽管友善之臂提供的6410裸机程序示例使用了eclipse工程,然程序的编译却还是基于makefile的。那怎样建立6410的eclipse裸机程序工程呢?本文就此进行详细介绍。有了这个工程,可以简化裸机程序的开发过程,把精力专注于功能实现。

设置eclipse字体

因为友善之臂提供的裸机程序示例使用的是UTF-8编码,为正常使用这些源码,把eclipse的字体编码设为UTF-8格式。Windows—>Preferences中,选择General—>Workspace,如下图所示。

设置eclipse字体

设置eclipse字体

建立C工程

在eclipse中建立一个C工程,假设工程名称为6410App。Project Type和Toolchains如下图所示。

建立eclipse C工程

建立eclipse C工程

Cross GCC Command设置如下。交叉编译器使用上一节所介绍的编译器。

设置eclipse编译器

设置eclipse编译器

添加源文件

建立工程后,往工程添加源文件。工程结构如右图所示。image虽然是裸机程序开发,但在程序构思设计上,还是力图把底层驱动、上层应用程序分开来,体现一个成熟系统设计思路。

common文件夹

工程中公共头文件。

driver文件夹

所有和底层驱动实现。其中,clock.c、drv_common.h、nand.c、sdram.c都是从友善之臂提供的裸机示例程序中拷贝过来的。

src文件夹

相对于底层驱动的源文件。实现用户应用程序功能。

script文件夹

链接脚本文件。用于控制程序的链接行为。如果没有指定链接脚本,编译时默认使用交叉编译器的链接脚本文件。

配置工程

在工程导航中,选中工程,右键选择Properties。在弹出的对话框中,选择C/C++ Build—>Setting。主要的配置内容有:

preprocessor配置

点击Cross GCC Compiler—>Proprocessor,勾选右边窗口的Do not search system directories(-nostdinc)。相当于编译程序时加上选项:-nostdinc。该选项的含义为:编译程序时不要在标准系统目录中搜索头文件。裸机程序没有用到交叉编译器提供的库函数,故不需要去搜索这些头文件。

4_设置eclipse的Preprocessor属性

添加包含路径

点击Cross GCC Compiler—>Includes,在右边窗口中添加common文件夹为包含路径。如下图所示。添加包含路径的目的是:包含common文件夹下的头文件时可以不用带路径。

设置eclipse包含路径

设置eclipse包含路径

链接选项

点击Cross GCC Linker—>General,勾选右边窗口前面三个选项,相当于添加三个链接标志:-nostartfiles、  -nodefaultlibs、-nostdlib。这三个链接标志的含义为:

-nostartfiles

连接时不使用标准系统的启动文件。标准系统库通常被使用,除非选项“-nostdlib”和“-nodefaultlibs”被使用。

-nodefaultlibs

连接的使用不使用标准系统库。只有你指定的库才能够传递给连接器。与系统库有关的特定的连接选项(例如-static-libgcc 和 -shared-libgcc )将会被忽略。标准的启动文件通常会被使用,除非-nostartfiles选项被使用。

编译器可能会生成memcmp,memset,memcpy和memmove的调用,这些entries通常会被标准库libc中的相关的entries解决。当这个选项被使用的时候,这些入口点应该通过其他的方法被提供。

-nostdlib

链接的时候不使用标准的系统启动文件和系统库。 没有启动文件和只用你指定的库可以被传递给连接器。与系统库有关的特定的连接选项(例如-static-libgcc 和 -shared-libgcc )将会被忽略。编译器可能会生成memcmp,memset,memcpy和memmove的调用,这些entries通常会被标准库libc中的相关的entries解决。当这个选项被使用的时候,这些入口点应该通过其他的方法被提供。

设置eclipse一般链接选项

设置eclipse一般链接选项

指定链接脚本

点击Cross GCC Linker—>Libraries,在右边下半窗口Library search path(-L)中,指定链接脚本的路径。在GNU链接选项中,-L用来指定要链接的库的搜索路径。

设置eclipse链接库路径

设置eclipse链接库路径

点击Cross GCC Linker—>Miscellaneous,在右边的Linker flags中加入-Tlink_script.lds。在GNU链接选项中,-T用来指定链接脚本文件。

设置eclipse链接选项

设置eclipse链接选项

设置编译步骤

点击Setting窗口Build Steps标签,在Post-build steps中加入如下命令:

arm-none-eabi-objcopy -O binary ${ProjName}.elf ${ProjName}.bin; arm-none-eabi-objdump -D ${ProjName}.elf > ${ProjName}.dis

交叉编译器默认编译输出的镜像格式为elf格式。上述命令就是把这elf格式转换为bin格式,并输出dis文件(汇编格式的程序文件)。

设置eclipse的Build Steps

设置eclipse的Build Steps

点击Setting窗口Build Artifact标签,设置输出镜像的后缀。在Artifact extension中输入elf。表示输出的镜像后缀为.elf。

设置eclipse的Build Artifact

设置eclipse的Build Artifact

编译工程

经过上述步骤,完成工程配置后,就可以编译工程了。使用友善之臂提供的Minitools工具,把工程Debug目录下把6410App.bin烧写到tiny6410开发板的DDR中。

总结

通过这个工程,让我进一步理解和熟悉了一些之前不明白的eclipse工程配置选项,具体来说,是理解了一些GNU编译链接选项的含义和使用方法。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>