使用Atmel Sudio6和ASF创建项目

作者: shaoziyang
上传时间为: 2015-01-06 10:17 AM
2015-01-06
阅读:

AS6的一个特色是比较慢,这是因为它集成了太多功能,特别是ASF(Atmel Software Framework)。前面介绍过在AS4中使用传统的方法开发ATmega328p,所以这一篇就介绍使用ASF的方法。

首先,在AS6中创建一个新项目。创建时,选择GCC C Executable Project或者GCC C++ Executable Project。如果直接选择Atmel Studio Solution,那么还需要在添加项目文件,麻烦了一些。

01.jpg


选择好项目文件的位置后,就是选择芯片的型号,这里当然选择ATmega328P。选择芯片时有个小技巧,在右上角的过滤栏输入芯片型号的几个字符,就能快速过滤,比从列表中慢慢找要方便多了。

02.jpg


选择芯片并确定后,就会自动创建项目,并打开主程序文件。这时项目中只有一个程序源文件,其它都是项目配置文件。

03.jpg


如果直接在这里开始写代码,就和AS4中差不多。除了编辑器功能强了,速度却慢了很多,这样是不能发挥出AS6的优势的。所以下面就是使用ASF了。先按下快捷键Alt+W选择ASF Wizard(ASF向导),这时会提示需要先选择板卡。

04.jpg


确定选择后,选择User Board Template - megaAVR,因为也只有这一个选择。

05.jpg


再就是一路next,最后Apply。

06.jpg


到这里,就会生成基本的ASF框架,下一步就是选择需要的模块了。

07.jpg


我们先做一个延时加LED闪烁的简单程序,正好和AS4下的程序做个对比。因此选择了Delay routnes和GPIO - General purpose Input/Output两个模块。

08.jpg


点击Apply,确定选择的模块。这时会先提示将添加的模块和文件,然后就会自动添加选择的文件。同时会在项目目录下添加src目录,src目录中还有ASF目录,里面就包含了ASF库文件。

09.jpg

10.jpg


到了这里,就需要将原来项目文件中的主程序给删除,因为ASF在src中又自动添加了一个main.c。如果不删除原来的主程序,就会有两个main函数了。删除后,所有的程序文件就都在src目录下。src目录下有ASF目录,存放系统文件,不要随意添加删除文件;还有一个config目录,通常存放系统配置文件;用户文件可以存放在src下和另外的子目录中。

11.jpg


然后就是写代码了。下面是简单的测试程序:

#include <asf.h>

#define LED    IOPORT_CREATE_PIN(PORTB, 5)

int main (void)
{
	// Insert system clock initialization code here (sysclk_init()).

	board_init();
	
	delay_init();
	ioport_init();
	
	ioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT);

	// Insert application code here, after the board has been initialized.
	while(1)
	{
		ioport_toggle_pin_level(LED);
		delay_ms(500);
	}
}

为了使用Delay函数,需要先调用delay_init()。同样使用GPIO也需要先调用ioport_init()。然后就是设置IO的输入输出,最后就是翻转LED和延时了。这些函数看起来还是很直观的,看函数名就知道大概的功能了。

使用ASF后,对程序的效率影响有多大?会不会浪费很多程序空间。先看看编译的结果:

13.jpg

12.jpg

AS4下编译结果是占用Flash空间164字节,AS6加ASF的结果是168字节,比想象中要小。虽然可以想象到随着更多ASF模块的添加和用户程序复杂度的增加,这个差距还会增大,但是ASF的效率还是不错的。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示