4.2 C语言程序设计
C/ C++语言是一种高级语言,使用它能够快速地
编写应用程序。用C/ C++语言编写的程序,一条语句
可以代替多条汇编语言语句。使用高级语言进行程序
设计有以下优点:
■ 有丰富的程序库支持。
■ 程序容易编写,具有结构化特点。
■ 程序可读性强,容易修改。
■ 便于调试和维护。
■ 可移植性好。
对于大中型项目来说,用C/ C++语言编写软件其
开发周期和开发成本通常要小于汇编语言。所以在做
项目时,一般会提 用C/ C++语言编写代码。但C
言程序设计的思想与方法不是本节重点,本节只讨论
以下3方面的内容:
■ 使用Semihosting服务建立C语言调试环境。
■ 移植ADS1.2 中的C语言函数库。
■ C程序编写规范。
如对ADS1.2集成开发环境不太熟悉,请参阅相关
章节做辅助阅读。
4.2.1 使用Semihosting 的服务(1)
在C程序设计中,经常要用到C标准库中提供的一
些输入/ 输出函数,如printf ()、scanf ()、putchar()、
getchar()等函数。这些I/O 函数能显示程序运行结果,
接收按键输入,极大方便了程序的运行与调试。在
ADS1.2环境中,利用Semihosting服务功能,可以很方
便地调用ADS1.2 中的C语言函数库,包括基本的输入/ 输
出函数。
在ADS 的C语言函数库中,某些ANSIC 的功能是由
主机的调试环境来提供的,这套机制有一个专门术 叫
Semihosting。例如,Semihosting技术能将应用程序中
的I/O 请求通过一定的通道传送入主机的调试环境,由
主机的调试环境来实现数据的输入/ 输出。
4.2.1 使用Semihosting 的服务(2 )
Semihosting 的服务功能是通过一组软件中断(SWI
)指令来实现的。 一个Semihosting软中断被执行时,
调试系统先识别这个SWI 请求,然后挂起正在运行的程
序,调用Semihosting 的服务,完成后再恢复原来的程序
执行。因此,主机执行的任务对于程序来说是透明的。
下面介绍一个使用Semihosting 的C语言程序示例,
并对Semihosting 进行简单的分析。
C语言程序示例(1)
(1)启动ADS1.2,使用ARM Executable Image 工程模
板建立一个工程Semihosting。
(2)建立源文件UseLib.c,编写实验程序,如图4.5所
示,然后添加到工程Semihosting 中。
图4.5 建立源文件UseLib.c
C语言程序示例(2 )
图4.5 建立源文件UseLib.c
C语言程序示例(3 )
(3)编译链接工程,选择Project→Debug命令,启动
AXD 进行仿真调试。
(4)在AXD调试环境中选择Option→Configure Target
命令,弹出Choose Target对话框,如图4.6所示,选择
ARMUL仿真环境。
图4.6 选择ARMUL仿真环境
C语言程序示例(4 )
(5)选择File→Load Image命令,找到Semihosting工
程中的映像文件Semihosting. axf ,把映像文件加载到
AXD环境中,加载后如图4.7所示。
图4.7 把映像文件加载到AXD环境中
C语言程序示例(5 )
图4.7 把映像文件加载到AXD环境中
C语言程序示例(6 )
(6)按F5键运行,程序会在main()函数断点处停止,
如图4.8所示。
图4.8 按F5键运行
C语言程序示例(7 )
(7)继续运行,输出第一条语句的结果,如图4.9所示
。
图4.9 输出第一条语句的结果
(8)输入一个大写字符H,输出结果如图4.1