一个无处不在的集成开发环境, 用于移动设备上的C编程外文翻译资料

 2022-01-11 09:01

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


一个无处不在的集成开发环境,

用于移动设备上的C编程

Tyng-YeuLiang Hung-Fu Li Yu-Chih Chen

摘 要

C语言是一种流行的编程语言,因为它具有高可移植性和简单的语法。因此,它是大多数主修计算机、电子、电气工程等专业的大学生的第一门课程。为了取得良好的学习成绩,学生通常需要把他们的努力和时间尽可能多的编程。因此,无处不在的集成开发环境有助于学生随时随地进行编程实践。为了实现这一目标,本文开发了一种基于Clang和LLVM的用于C编程的新型集成开发环境ubic。使用这个IDE,用户可以直接在基于Android的智能手机或平板电脑上编写、编译、执行和调试C程序。此外,该IDE还提供了多媒体编程API,并与Dropbox等云服务集成,用于存储用户程序和数据。因此,用户可以在移动设备上使用C语言轻松开发多媒体应用程序,并可以在Dropbox的支持下在移动设备和固定电脑之间切换工作环境。

关键词:C编程;安卓系统;移动设备;Clang;LLVM

I.介绍

C是一种高级编程语言。它不仅允许用户定义自己的数据类型和操作,还允许用户通过位或字节创建寄存器变量和访问内存。此外,它还支持指针变量直接访问内存和I/O控制以及汇编语言,允许用户将汇编代码嵌入到程序中,以提高关键程序块的性能。与JAVA和c#相比,C程序运行得更快,因为C程序被编译为汇编代码和二进制代码,而不是字节代码。由于上述优点,C语言被广泛应用于许多不同领域的开发,包括系统软件、科学计算和硬件驱动等。因此,它通常是计算机科学与工程系大学生学习的第一种编程语言。在过去的几十年里,大多数学生不得不呆在电脑前练习C语言编程。换句话说,他们的编程环境是固定在学校或家里的。因此,除非他们使用笔记本电脑,否则他们不可能随时随地练习编程。幸运的是,移动设备如智能手机和平板电脑最近已经成为用户处理日常事务的主要IT设备,因为它的硬件能力,包括计算能力,内存能力和电池能力都得到了极大的提升,并且它们有大量不同的应用。因此,移动设备支持用户在移动性较高的情况下像pc或笔记本电脑一样完成工作。

因此,最近提出了几个IDE应用程序,如Online Compiler[1]、C4droid[2]、CCtools[3]和CppDroid[4],用于基于android的移动设备上的C/ c 编程。在线编译器必须使用远程编译器进行程序编译,而其他编译器是完整的ide,不支持任何远程硬件或软件。然而,这些ide为用户提供了一个嵌入式终端来编辑、编译、执行和调试他们的程序。显然,它们的用户界面非常不友好。此外,它们大多将gcc、libc和gdb移植到移动设备上,用于程序的编译和调试。这种实现方法导致这些ide在移动设备中消耗大量内存资源,而生成的代码是不可移植的。

为了克服前面描述的问题,提出了一种名为Ubi-C的新型IDE应用程序,用于在移动设备上进行C编程。使用Ubi-C,学生和程序员可以分别练习C编程并随时随地开发C应用程序。与其他APP相比,Ubi-C可以提供友好的用户界面。此外,Ubi-C支持多媒体API,供用户控制移动设备的音频,视频和触摸板。因此,Ubi-C将C和Android多媒体编程结合到同一个IDE中。这对于用户在移动设备上开发C应用程序很有吸引力,也有助于丰富移动C应用程序。另一方面,Ubi-C是基于Clang和LLVM开发的[5]。因此,由Ubi-C生成的生成的可执行文件是可移植的。换句话说,Ubi-C支持编译一次并在任何地方运行。此外,Ubi-C的资源需求低于其他资源。 Ubi-C还可以与Dropbox合作存储用户程序和数据。这便于用户在移动设备和固定计算机之间切换工作环境。

本文的其余部分安排如下。 第2节是相关工作。 第3节是ubi-c的框架和实现。第4节通过性能评估将Ubi-C与其他IDE进行了比较。 最后,第5节给出了本文和我们未来工作的简短结论。

II.相关工作

目前已经提出了几种APP,包括Online Compiler,CCTools,C4droid和CppDroid,让用户可以在移动设备上开发C程序。 以下讨论这些APP。

Online Compiler是一个能够支持CC,C ,JAVA,JavaScript,Python,C#和Ruby的APP。 这个APP的内存需求非常小(差不多2.36MB),因为用户程序是由远程服务器编译和执行的,而不是本地移动设备。 由于它不支持交互式I / O操作,因此用户必须在执行程序之前将数据输入缓冲区。 当他的程序打算通过调用scanf()输入数据时,将从缓冲区中取出数据,将其视为scanf()的输入数据。 此外,它不支持本地文件访问,因为用户程序在远程服务器上执行。

CCTools是Android设备的原生IDE。 这个APP可以支持C,C ,GNU Makefile,Lua和FORTRAN。 它采用基于Android的gcc工具链将用户程序编译为ARM,MIPS或X86设备上的可执行文件。 虽然安装这个APP只需要2.1MB,但如图1所示,有必要下载并安装诸如Clang for C程序编译之类的额外软件,或者这个APP无法正常工作。 显然,这不方便和友好,因为没有任何用户或程序员熟悉UNIX的工作环境。

图1- CCTools Add-onsamp; Compiler

C4droid是C / C IDE的收费APP。这个APP采用TCC [6](Tiny C Compiler)和uClibc来编译C程序,同时需要插入gcc来编译C 程序。它支持标准C库的代码自动完成,以及通过下载Native Activity,Qt,SDL和SDL2的GUI。在BusyBox的支持下,它可以允许

用户编辑和执行Makefile。由于Android限制应用程序只能在应用程序目录中执行,因此C4droid编译的应用程序无法从目录中启动。为了在不升级用户权限的情况下解决此问题,C4droid打包带有终端和可执行文件的APK文件。因此,当用户想要将他们的程序分发到其他设备上时,除非他们在他们的移动设备中安装APK文件,否则其他用户无法执行程序。因此,它必须花费很长时间来安装用户程序,并且还需要更大的存储空间来在移动设备上执行用户程序。

CppDroid是一个专门面向C / C 编程初学者的APP。除了IDE之外,它还为用户提供了许多程序示例。它需要190MB的内存空间。与以前的APP不同,它支持功能导航器,如果用户在程序中犯了一些错误,则会向用户提供警告和错误的在线消息。它还自动修复用户程序中的简单拼写错误。

图2. Executer of C4droid amp;CppDroid

基本上,如图1和图2所示,CCTools,C4droid和CppDroid的执行监视器是嵌入式终端。 它们不提供断点和变量监视功能,供用户调试程序。 因此,他们的用户界面不够友好。 相比之下,Ubi-C支持一个简单而友好的IDE来开发C程序。 此外,它还支持用户使用C开发多媒体应用程序,并与云存储服务集成,以便用户在移动设备和PC之间切换工作环境。

III. UBI-C

Android [7]是基于Java开发的,大多数APP都是在JVM上执行的[8]。如果用户想要在Android执行本机C程序,必须将C程序与JNI(Java Native interface)创建的动态链接库链接,或者将他们的C程序与Android NDK交叉编译,以生成可在ARM上执行的程序。使用交叉编译的方法,gcc [9]也可以移植到移动设备上。但是,gcc对于移动设备来说太大了。另一方面,应用程序必须存储在管理员权限目录中,例如数据/数据,以便在Android上可执行。因此,在Android中编译的所有程序必须存储在BusyBox中,或者它们必须打包为APK并在执行之前安装。与这两种方法相比,Clang [10]是一种更好的解决方案。 Clang的内存需求仅为gcc的20%,执行速度是gcc的三倍。它可以输出AST(IDE的抽象语法Tee来分析源代码并自动完成编码。此外,Clang可以将用户程序编译成LLVM的Bitcode,然后用户可以在任何支持LLVM的平台上执行程序而无需使用终端软件进行安装他们的程序首先是APK。换句话说,用户可以编译一次程序并在任何地方运行它们。

图3. Ubi-C 的框架

Ubi-C的框架由图形用户界面(GUI),Clang编译器和修改后的LLVM解释器组成,如图3所示。用户界面由四个页面组成:编辑器,编译器,执行器和调试器。编辑器页面由RichEditText组成。它提供了一个工作区和基本功能,如复制,粘贴,关键字高亮,用于编辑程序。当用户想要编译他们的程序时,他们可以切换到编译器页面。该页面可以自动获取当前编辑的程序的完整路径名,并为程序编译分叉Clang进程。之后,Clang将编译该程序以生成LLVM的IR代码。最后,他们可以在程序编译成功后切换到执行程序页面来执行程序。执行程序页面将创建一个执行修改后的LLVM解释程序的进程。 LLVM解释器将程序的IR代码解析为一系列指令和基本块。之后,它将遍历每条指令以供执行。当调用外部函数时,LLVM解释器将加载并调用一个外部函数,该函数缓存在表中,并通过外部函数接口(ffi)以“_llx_”前缀命名。例如,stdio.h中的printf,scanf和sprintf等函数将在此表中重写和缓存。在该层的支持下,LLVM解释器能够捕获外部函数的调用并用我们的自定义函数替换它们。在LLVM解释器的支持下,可以轻松实现功能重写和UI功能。

图4. Stdout的重定向过程

图5.scanf()的用户界面

当程序执行中出现一些错误时,stderr消息将显示在执行程序页面的TextView中。但是,stdout消息不能以相同的方式显示,因为stdout消息(如libc的printf()的输出默认输出到缓冲区,并且在程序执行之前无法显示缓冲区的内容。终止。这导致基于管道的I / O重定向机制无法工作,因为它无法实时接收消息。为解决此问题,我们修改LLVM解释器以将stdout消息定向到文件中,并发出信号以触发UI(用户界面)程序读取文件并使用stdout消息重新刷新显示。该过程的控制流程如图4所示。另一方面,Ubi-C也修改了scanf()的过程。调用scanf()时,LLVM接口将扫描scanf()的输入编号并将编号发送到UI层。这将导致打开弹出窗口供用户输入数据,如图5所示。这种方法比要求用户在嵌入式终端中输入数据的其他IDE更友好。

调试器页面的目的是为用户提供一个GUI来调试他们的程序。为了减少内存空间的使用,我们在LLVM解释器中增加了调试器的功能。因为LLVM解释器可以翻译用户程序的所有指令,所以它可以跟踪必要的信息,比如代码行数、变量的名称、类型和值,以及用于编程调试的函数名。虽然用户并不总是提供用于程序调试的源代码,但幸运的是,Clang可以在编译用户程序时将DWARF-3[11]格式的必要调试信息插入可执行文件中。当调试模式执行用户程序时,LLVM解释器将使用插入的信息执行用户发出的调试指令。由于页面的限制,我们简单描述了单步、断点和变量的实现。

图6. 调试重定向的过程

对于单步,传统调试器通常在用户程序中的每条指令之前插入3号中断。发出中断时,将存储执行的用户程序的上下文。因此,在程序执行期间可以观察到变量和寄存器值的变化。但是,Ubi-C不采用这种中断方法。它控制LLVM解释器的执行流程,以实现单步功能。当LLVM解释器收到单步命令时,它将暂停当前指令的执行,并将当前指令的行号和监视变量的当前值传递给前端接口程序,以便在调试器中显示信息页。除了单步之外,用户还可以在其程序中插入断点。所有插入的断点都存储在断点表中。每当LLVM解释器完成一条指令时,如果它发现完成的指令存储在断点表中,它将暂停执行下一条指令。然后,它将做与单步相同的事情。用户按下“继续”按钮后,LLVM解释器将继续执行用户指令,直到它到达下一个断点。先前描述的过程如图6所示。

另一方面,LLVM解释器使用符号表来跟踪变量的地址和值。 当用户程序的执行进入函数时,LLVM解释器将在程序堆栈中构造局部变量的符号表。 只要LLVM解释器使用Alloca或Store为程序堆栈中的局部变量分配内存空间,它就会将Alloca或Store指令返回的内存地址存储在符号表中,以便将变量映射到内存地址。 使用此表,LLVM解释器可以动态检索监视变量的值,并将检索到的值发送到UI程序以在调试器页面中显示。

Ubi-C的一个特征是支持多媒体API。用户可以在他们的C程序中使用Android软件包来绘制图片,播放音乐以及在移动设备上创建游戏。基本上,Ubi-C执行基于RPC的多媒体API。调用多媒体功能时,此功能将被捕获到运行时客户端。运行时客户端将向多媒体服务器发送带有功能名称和参数的请求以供执行。在接收到请求后,多媒体服务器将调用Android的多媒体API来执行用户程序调用的功能。表I中列出了Ubi-

全文共8045字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[1698]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。