基于硬件的C(C++)语言程序设计教程2:应用Atmel Studio学习C语言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingwufeiyang12346/article/details/82809534

本系列文章希望探讨以硬件为平台讲述C(C++)知识的一个新的途径,改变目前大多数C语言教程仅注重C语言本身的语法规则,而脱离其应用环境的现状。希望读者通过本教程的学习,能够立刻学以致用,真正将所学知识应用到项目实践中。

开发环境:Atmel Studio 7.0

硬件平台:Microchip AVR ATmega168PA

参考教材:C++程序设计(第3版) 谭浩强编著,清华大学出版社

备注:教程仅适合初学者,高手请绕过

 

本文讲述使用Atmel Studio演练“C++程序设计(第3版) 谭浩强编著”教材中例程的方法,当然也可以使用其它的IDE环境去演练这些例程。写作本文的目的是使读者,在C语言学习的开始阶段,不必分心于其它IDE环境,而专注于C语言本身,在本系列教程的后半部分,将应用C(C++)语言直接针对ATmega168PA进行应用设计,这样的安排可以保证读者在整个学习过程中,使用同一种开发环境。

一、项目的建立

可以按照如下步骤建立项目。

1、启动Atmel Studio,如下图所示。

2、文件-新建-项目,如下图所示。

3、在接下来出现的对话框中,选择“GCC C Executable Project”项目类型,在“名称栏”中指明项目名称,在“位置栏”中指明项目的存储路径。在这里特别需要注意的是“名称栏”和“位置栏”中输入的内容,需遵循以下规则:只能由字母、数字和下划线构成,且不能以数字开头。如果违反上述规则,会导致计算机仿真不正常。

4、在接下来出现的对话框中,选择单片机类型,读者一定能够猜到,我们选择的单片机类型为ATmega168PA。上述设置完毕后,我们点击“OK”按钮,Atmel Studio就会为我们自动生成项目了。

二、项目的配置

如果希望使用计算机进行程序仿真,还需进一步设置,步骤如下:

1、在“解决方案资源管理器”中,用右键选择项目名称,在弹出的菜单中,选择“属性”。

2、在出现的“属性”设置文件中,选择“Toolchain(工具链)”-“Optimization(优化)”-“None(-O0)(不优化)”,如下图所示。

3、选择“Tool(工具)”-“Selected debugger/programmer(选择调试编程器)”-“Simulator(仿真)”。上述设置完毕后,需要对“属性”设置文件进行保存操作。

三、教材例程的改进

在完成上述步骤后,就可以对教材中的例程进行演练了,我们以教材P6页,例1.2为例,进行说明。先看下原始程序如下所示,程序开始包含了头文件“iostream”并使用命名空间std,这是典型的C++用法,其目的在于在后面的程序中使用cin和cout,cin和cout是标准的输入输出语句,其默认所指的标准输入设备是键盘,标准输出设备是显示器。这个程序的功能就是从键盘上输入2个数字,然后进行加法运算,最后在显示器上输出结果。

#include <iostream>
using namespace std;
int main()
{
	int a, b, sum;
	cin >> a >> b;
	sum = a + b;
	cout << "a + b = " << sum << endl;
	return 0;
}

现在的问题就来了,我们现在是仿真程序在ATmega168PA单片机上运行,即没有显示器,又没有键盘,该如何操作cin和cout呢?实际上cin和cout是可以重定向的,一般借用于单片机的串行口,这个就比较复杂了,我们将在以后探讨,现在采用避讳cin和cout是最好的方法。大家,先看一下改进的程序。

#include <avr/io.h>

int main(void)
{
	int a, b, sum;
	
    	a = 1;
	b = 2;
	
    	while (1) 
    	{
		sum = a + b;
    	}
}

通过分析程序,我们可以看出程序用AVR的标准输入和输出头文件代替“iostream”,在整个程序中不出现cin和cout,但是程序中增加了while(1)语句,我们稍微解释一下,while(1)是无限循环的意思,就是程序进入while(1)后,会反复执行while(1)中的语句,永不退出(当然,前提是需要给单片机供电的情况下)。

再看一下程序的结构,实际上非常简单,就是变量定义,变量赋值,无限循环(逻辑处理),如下图所示。

四、例程的调试

程序编写完毕后,可以按照如下步骤进行程序的调试工作。

1、保存程序文件,对程序进行编译操作,其命令按钮如下图所示。编译需要一定的时间,我们只需等待即可。

2、如果编译后,Atmel Studio提示错误,我们需要将错误改正,现在大家改正错误的方法,就是仔细和教程中的程序进行对比,查找错误的原因。

3、编译没有错误后,我们在while语句的最后的“}”括号上打上断点,如下图所示,方法很简单,就是在箭头所指的位置,用鼠标单击即可。现在解释一下断点的含义,实际上很简单,就是说程序执行到带有断点的语句后,程序会停下来,这时我们可以观察程序的各种运行状态,包括变量的取值等等。

4、上述设置完毕后,我们就可以让程序运行了,点击工具栏的“调试”按钮,如下图所示。

5、程序运行后,会停在我们设置断点的位置,此时,我们就可以通过局部变量窗口观察变量的值了,如下图所示。我们可以看到,程序已经正确计算出sum的值。

6、此时我们希望计算“2+3”的值,该如何操作呢?方法很简单,直接在“局部变量”窗口中将a的值调整为2,将b的值调整为3,然后再次点击“调试”按钮,就可以看到“2+3”的值了。

不知道大家现在感觉如何,教材中例程的功能,我们现在也都实现了,而且看上去更简单,其关键点在于我们写的程序是可以在单片机上直接运行的,这样的应用方式可以把C语言的功能发挥到极致,难道不是这样吗?这些问题还需大家慢慢体会。

 

任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。

原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。 

 

 

 

猜你喜欢

转载自blog.csdn.net/qingwufeiyang12346/article/details/82809534