Fresh IDE 是一个内置的 Flat
汇编编译器(FASM)的可视化汇编语言集成开发环境。它完全兼容与FASM可以在编译时FASM的每一个版本。Fresh
IDE
的主要目标是使编程,组装快速,高效,高层次的语言,没有牺牲小应用程序的大小和汇编语言的原始动力。它是一个Windows应用程序,但它可非常好的运行在
Wine
环境,可以创建,编译,调试和运行Windows和Linux的应用程序在Windows和Linux主机。

引言

为了了解自己在校内建立的编程讨论群里学长学姐学弟学妹的大致比例,在群里做了一个小调查,根据结果来看,处处都恰到好处地映射了我们学校男女的比例——
2:1 。投票参与人数比例约为 1/8 ,还是有很大的发展空间哈。

图片 1

群内年级性别调查表

好了切入技术正题,本文我们来浅谈一下编辑器,编译器和集成开发环境(IDE)的区别,并介绍几款常用的编辑器和
IDE,提前掌握开发环境搭建前的知识储备。

交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86
CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86
CPU平台上是不能运行的,必须放到ARM
CPU平台上才能运行,虽然两个平台用的都是Linux系统。
交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小
libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc
和 newlib。
分类和说明
从授权上,分为免费授权版和付费授权版。

图片 2

编辑器

编辑器的概念很简单,百度百科上这么写道:

编辑器是软件程序,一般是指用来修改电脑档案的编写软件,但也有人称
PE2、HE4(汉书)……等文书软件为编辑器。常见的编辑器有文本编辑器、网页编辑器、源程序编辑器、图像编辑器,声音编辑器和视频编辑器等。

当然在这里我们主要讲的是代码编辑器,一个好的编辑器可以节省开发时间,提高工作效率,它们都能提供非常方便易用的开发环境。你可以用它们来编写代码,查看源文件和文档等,简化你的工作。

以下是一些常用的代码编辑器,每个不同的编辑器都有不尽相同的目标用户群体。

免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是
Codesourcery,第三是Linora。

该版本更新了 IDE 和 FreshLib 库,FASM 编译器更新到 1.71
版本,新编译器带来的改进包括:

NodePad++

Notepad++ 是一款免费但优秀的代码编辑器,运行在 Windows
环境下,可以支持多种编程语言。它在 50
多种程序、脚本和标记语言上都有着语法高亮、代码折叠等功能。用户可以人为设置当前语言,它还支持实现一些编程语言的API。

图片 3

NodePad ++

收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。

  1. a new “text” macro has been created which
    creates only one copy of the duplicated strings.
  2. Procedure call macros allow directly calling string constants as an
    arguments, improving readability of the sources.
  3. The DLL imports system has been changed to allow custom user
    imports.
  4. All libraries, examples, and templates have been updated
    accordingly.
  5. Several longstanding bugs and misbehaviors have been fixed.

Vim

Vim 是从 vi
发展出来的一个文本编辑器,在程序员中被广泛使用。它支持语法高亮、显示行号,这都是对程序员重要的辅助功能。用户还可以更换界面的主题颜色,减缓长期编程的疲劳感,让代码更加清晰。它可以自动检查你的拼写错误,提高你的工作效率,对于开发者是一个非常好的选择。

图片 4

Vim

arm-none-linux-gnueabi-gcc:是 Codesourcery
公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux
kernel、filesystem和App应用程序。
arm-linux-gnueabihf-gcc:是由 Linaro
公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux
kernel、filesystem和App应用程序。
aarch64-linux-gnu-gcc:是由 Linaro
公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8
64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
arm-none-elf-gcc:是 Codesourcery
公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM
MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM
MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

(文/开源中国)    

GNU Emacs

Emacs
是一个轻便、可扩展、免费的编辑器,它比其它的编辑器要更强大,是一个整合环境,或可称它为集成开发环境。它可以处理文字,图像,高亮语法,将代码更直观地展现给开发者。Emacs
可以运行在大多数的操作系统上,而且它支持大多数常用的编程语言,可以自动对代码排版布局。Emacs用户可以根据自身的需要和偏好对编辑器进行定制。

图片 5

Emacs

命名规则
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

Sublime Test

Sublime Text
是具有漂亮的用户界面、强大功能和优良性能的一款代码编辑器,你可以在
Windows、OS X 和 Linux 等主流操作系统上安装并使用。

图片 6

Sublime Text

arch –
体系架构,如ARM,MIPS(通过交叉编译工具生成的可执行文件或系统镜像的运行平台或环境)
vendor – 工具链提供商
os – 目标操作系统(host主要操作平台,也就是编译时的系统)
eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface)
根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如

Atom

Atom是免费开源的文本和代码编辑器,它是运行在 Atom Shell
上,底层依赖的架构是 Chromium(Google
Chorome的开源项目)。没有人想浪费大量的时间在配置编辑器上,而在 Atom
上几乎所有的设置都可以通过设置面板来更改配置,简单易用,上手很快。

图片 7

ATOM

arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。

编译器

之前的三种程序设计语言概要介绍过机器语言、编译语言和高级语言的区别,而编译器所做的就是进行这三种语言的互相转换。大多数情况下,编译是从更高级的语言(高级语言、汇编语言)编译成低级语言(汇编语言、机器语言)。

另一种情况是,从他人的可执行程序(低级语言)编译成高级语言,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。这个过程叫做反向编译。

图片 8

一个现代编译器的主要工作流程

这里使用 GCC 编译器的相关概念作出探讨。

arm-none-linux-eabi:用于Linux的,使用Glibc
实例
1、arm-none-eabi-gcc

GCC 编译器

GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C
语言。后来 GCC 通过很快地扩展变得可以处理 C++ 甚至
Fortran、Pascal、Objective-C、Java、Ada、Go
以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler
Collection)。

由于 gcc 是命令行程序,没有特定的 UI 界面,我们在命令行可以用 GCC
进行一个简单的 C 语言编译测试,输出一个 “Hello GCC!”。

图片 9

命令行的 GCC 编译过程测试

(ARM architecture,no vendor,not target an operating system,complies
with the ARM EABI)
用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译
Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R
内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是
newlib 这个专用于嵌入式系统的C库。

集成开发环境( IDE )

可以看到,编辑器是用来让程序员优雅的敲代码,编译器是用来将这些高级语言或汇编语言编译成计算机能直接识别并运行的机器语言。如果我们每次编辑完源程序都要在命令行依托编译器进行函数、模块的链接和编译的话岂不是很麻烦,于是集成开发环境的出现很快的完善了开发效率问题。

集成开发环境(IDE,Integrated Development Environment
)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

由于每个 IDE
的针对性不同,承载的编译器不同,不同的语言有时需要不同的IDE,这里介绍几个常用
IDE。

2、arm-none-linux-gnueabi-gcc

Dev C++

Dev-C++是一个 Windows 环境下开发 C/C++
语言的集成开发环境(IDE),它是一款自由软件,遵守 GPL
许可协议分发源代码。它集合了 MinGW
等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。Dev-C++
是 NOI、NOIP 等比赛的指定工具,缺点是调试(Debug)功能弱。由于起初开发
Dev-C++ 在开发完 4.9.9.2
版本后停止开发,所以现在正由其它公司更新开发,但都基于 4.9.9.2。Dev-C++
的最新版是 5.11 版本。

图片 10

DEV C++

(ARM architecture, no vendor, creates binaries that run on the Linux
operating system, and uses the GNU EABI)

Visual Stdio

Microsoft Visual
Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如
UML
工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括
Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET
Compact Framework 和 Microsoft Silverlight 及 Windows Phone。

图片 11

Visual Stdio

主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的
u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过
Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx
交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有
Linux 操作系统的会用到。

Eclipse

Eclipse是一个界面友好,供各种用户使用的 IDE,它提供了一系列的工具帮助
Web 和 Java 应用程序的开发。尽管 Eclipse 是使用 Java 语言
开发的,但它的用途并不限于 Java 语言。它还支持如 C /
C++、JavaScript、Perl、PHP、Fortran、Ruby、Python,甚至 COBOL
语言。它提供很多功能来简化你的开发,内置的工具和 API
支持项目部署、运行和测试。

图片 12

Eclipse

当然,如果你有你自己最喜欢的代码编辑器这里没有提到,欢迎留言。

  • Hello,我是韩亦乐,现任本科软工男一枚。软件工程专业的一路学习中,我有很多感悟,也享受持续分享的过程。如果想了解更多或能及时收到我的最新文章,欢迎订阅我的个人微信号:韩亦乐。我的简书个人主页中,有我的订阅号二维码和
    Github
    主页地址;我的知乎主页
    中也会坚持产出,欢迎关注。
  • 本文内部编号经由我的 Github
    相关仓库统一管理;本文可能发布在多个平台但仅在上述仓库中长期维护;本文同时采用【知识共享署名-非商业性使用-禁止演绎
    4.0
    国际许可协议】进行许可。

    图片 13

3、arm-eabi-gcc

Android ARM 编译器。

4、armcc

ARM 公司推出的编译工具,功能和 arm-none-eabi
类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux
应用程序。armcc一般和ARM开发工具一起,Keil
MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc
编译器都是收费的(爱国版除外,呵呵~~)。

5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc

arm-none-uclinuxeabi 用于uCLinux,使用Glibc。

arm-none-symbianelf 用于symbian,没用过,不知道C库是什么 。

Codesourcery
Codesourcery推出的产品叫Sourcery G++ Lite
Edition,其中基于command-line的编译器是免费的,在官网上可以下载,而其中包含的IDE和debug
工具是收费的,当然也有30天试用版本的。

目前CodeSourcery已经由明导国际(Mentor
Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,但是 Sourcery
G++ Lite Edition 同样可以注册后免费下载。

Codesourcery一直是在做ARM目标 GCC 的开发和优化,它的ARM
GCC在目前在市场上非常优秀,很多 patch
可能还没被gcc接受,所以还是应该直接用它的(而且他提供Windows下[mingw交叉编译的]和Linux下的二进制版本,比较方便;如果不是很有时间和兴趣,不建议下载
src
源码包自己编译,很麻烦,Codesourcery给的shell脚本很多时候根本没办法直接用,得自行提取关键的部分手工执行,又费精力又费时间,如果想知道细节,其实不用自己编译一遍,看看他是用什么步骤构建的即可,如果你对交叉编译器感兴趣的话。

ABI 和 EABI
ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM
Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用
EABI 作为与兼容的编译器生成的汇编语言的接口。

两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc
两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf
这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm
才能支持这两种浮点运算策略)。

其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。gcc
的选项 -mfloat-abi 有三种值 soft、softfp、hard(其中后两者都要求 arm
里有 fpu 浮点运算单元,soft 与后两者是兼容的,但 softfp 和 hard
两种模式互不兼容):
soft:
不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。
softfp: armel架构(对应的编译器为 arm-linux-gnueabi-gcc
)采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
hard: armhf架构(对应的编译器 arm-linux-gnueabihf-gcc
)采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。

把以下测试使用的C文件内容保存成 mfloat.c:

#include <stdio.h>
int main(void)
{
    double a,b,c;
    a = 23.543;
    b = 323.234;
    c = b/a;
    printf(“the 13/2 = %fn”, c);
    printf(“hello world !n”);
    return 0;
}

1、使用 arm-linux-gnueabihf-gcc 编译,使用“-v”选项以获取更详细的信息:

arm-linux-gnueabihf-gcc -v mfloat.c
COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=hard’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’ -mfloat-abi=hard

可看出使用hard硬件浮点模式。

2、使用 arm-linux-gnueabi-gcc 编译:

arm-linux-gnueabi-gcc -v mfloat.c
COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=softfp’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’ -mfloat-abi=softfp

可看出使用softfp模式。