查看: 4317|回复: 5

使用AS6和ASF创建项目

[复制链接]
  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-1-5 21:50:53 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 shaoziyang 于 2015-1-5 23:28 编辑

    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


    然后就是写代码了。下面是简单的测试程序:
    1. #define F_CPU 16000000UL
    2. #include <asf.h>

    3. #define LED    IOPORT_CREATE_PIN(PORTB, 5)

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

    7.         board_init();
    8.        
    9.         delay_init();
    10.         ioport_init();
    11.        
    12.         ioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT);

    13.         // Insert application code here, after the board has been initialized.
    14.         while(1)
    15.         {
    16.                 ioport_toggle_pin_level(LED);
    17.                 delay_ms(500);
    18.         }
    19. }
    复制代码
    为了使用Delay函数,需要先调用delay_init()。同样使用GPIO也需要先调用ioport_init()。然后就是设置IO的输入输出,最后就是翻转LED和延时了。这些函数看起来还是很直观的,看函数名就知道大概的功能了。

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

    13.jpg

    12.jpg

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

    DelayDemo_ASF.zip (75.06 KB, 下载次数: 14)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-7-21 12:58
  • 签到天数: 907 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2015-1-6 08:47:03 | 显示全部楼层
    写的挺好 顶啊!!!!!!!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-12-13 17:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-1-6 10:15:53 | 显示全部楼层
    ATMEL STUDIO把AVR和AVR32以及XMEGA再加上ARM都整合进来了,还用了MS Shell,尺寸大是一方面,容易和其它软件出现运行库冲突是另外一方面。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-6 16:55:42 | 显示全部楼层
    多谢楼主分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-9-9 14:42
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-1-20 18:58:14 | 显示全部楼层
    这个好像是和vs2010冲突的,我当初就是因为这个装不上去ATMEL STUDIO 6.2
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

     楼主| 发表于 2015-1-20 20:32:47 | 显示全部楼层
    试试安装最新的AS6.2sp1。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-23 06:34 , Processed in 0.165008 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.