搜索
bottom↓
回复: 30

winavr20050214+avrstudio4.12.452 结合起来应该更好用吧!

[复制链接]

出0入0汤圆

发表于 2005-10-15 00:17:04 | 显示全部楼层 |阅读模式
看论坛里大家都说WINAVR, 我也看看了。

我的前提是以下2个都装了:winavr20050214,avrstudio4.12.452

我开始使用的是winavr20050214 的PN 功能,再使用OURAVR 介绍的MFILE, 一切正常,但实在不知道如何将编译好的文件与avrstudio4.12.452 结合仿真,试了好久,都没解决,但无意中发现avrstudio4.12.452 创建project wizard 中可以直接创建winavr 的工程,且是已plug-in 方式加载的,看了其有关的路径,竟然有winavr20050214 的路径,看来是直接调用了。想想,这样多好!加个小程序看看,发现一切都很全。



另外,我刚用AVR及C,请问如何去看到编译出来的代码大小,我在avrstudio4.12.452 中编译的不知道在哪看,但winavr20050214 的PN 可以看到?



以下是一些抓图,大家看看效果,好像还是很多人没用最新的版本,也许就不知道了!


















-----此内容被li2587于2005-10-15,00:19:10编辑过

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2005-10-15 00:55:56 | 显示全部楼层
使用WINAVR自带的MAKEFILE,注意点:

1. Target name must equal project name.

2. Clean/rebuild support requires  "clean" target.

3. Makefile and target must exist in the same folder

出0入0汤圆

发表于 2005-10-15 12:49:58 | 显示全部楼层
不会用!

出0入0汤圆

发表于 2005-11-18 20:44:49 | 显示全部楼层
Delette file问题

出0入0汤圆

发表于 2005-11-18 20:48:21 | 显示全部楼层
其他问题






-----此内容被hotpower于2005-11-18,20:55:29编辑过

出0入0汤圆

发表于 2005-11-18 21:00:17 | 显示全部楼层
Studio4.12如何强搞C++???

出0入0汤圆

发表于 2005-11-19 19:28:24 | 显示全部楼层
我也只会"winavr20050214 的PN 功能,再使用OURAVR 介绍的MFILE",



刚才操作了一遍,发现不知道如何正确设置对头文件的引用。

编译时对 #include <avr/io.h> 那里报错。不知道楼主是如何设置的?(暂时屏蔽掉,以及注释掉PORTA,DDRA后可以编译和Debug)

(我已经在 (Edit Configration Option" 里的第二项“Include Directories”里添加了“C:\WinAVR\avr\include”。)





另外,本来.map文件应该包含“编译出来的代码大小”,但没看出来。

出0入0汤圆

发表于 2005-11-20 11:48:11 | 显示全部楼层
hotpower的意思是,现在还有很多不足?

关于c++debug的那个问题,好像是后来也没有解决办法吧?

出0入0汤圆

发表于 2005-11-20 12:47:32 | 显示全部楼层
在TestCode同志的帮助下,我以前"摸黑"搞的C++全部在studio中搞定,比PN好多了.



再也不需整天想打造什么IDE了...

出0入0汤圆

发表于 2005-11-20 22:45:22 | 显示全部楼层
呵呵,好!

那都转到AVR studio上来好了。

出0入0汤圆

发表于 2006-1-23 17:55:19 | 显示全部楼层
avrstudio 太肥了!

出0入0汤圆

发表于 2006-2-22 21:51:24 | 显示全部楼层
奇怪,用 AVRSTUDIO4.12 里调用GCCAVR生成的代码很大,比直接用GCCAVR生成代码大很多。

应该是代码优化的设置问题,请高手赐教如果在AVRSTUDIO4.12 设置代码的优化。

出0入0汤圆

发表于 2006-2-22 21:57:05 | 显示全部楼层
亲自试了下,搞明白了。

如下图操作:按照下去的设置,这样使用AVRSTUDIO4.12里调用GCCAVR的代码的优化程度 和 单独使用GCCAVR默认的优化程度一样。

谢谢大家的分享,用AVRSTUDIO4.12调试确实方便多了。





出0入0汤圆

发表于 2006-2-22 22:00:16 | 显示全部楼层
设置完优化后,两种环境下的编译结果相同,如下图:

单独使用GCCAVR的编译结果:





使用AVRSTUDIO4.12的编译结果:

出0入0汤圆

发表于 2006-3-12 10:36:37 | 显示全部楼层
好像不稳定啊,在编译的时候AvrStdio容易死掉,各位有没有碰到过?或是我的PC有问题

啊?

出0入0汤圆

发表于 2006-3-12 15:34:08 | 显示全部楼层
的确很容易死,好像是检查文件依赖性的结果,包含的头文件多了就容易死

出0入0汤圆

发表于 2006-3-13 08:31:49 | 显示全部楼层
容易死 是有这个问题. 不过去官方下载一个新的补丁后就可以了.

出0入0汤圆

发表于 2006-3-13 11:05:11 | 显示全部楼层
我的版本是:AVR Studio:【4.12.462  Service Pack 1】,还有更新的补丁吗??我都不想了,期待着用下一个新版本了。

出0入0汤圆

发表于 2006-3-13 16:35:48 | 显示全部楼层
用 AVR Studio:【4.12.462  Service Pack 1】+ WinAVR-20060125 是会死掉的,但是如果用 AVR Studio:【4.12.452 】+ WinAVR-20060125 或用 AVR Studio:【4.12.462  Service Pack 1】+ WinAVR-20050214 搭配就不会死机。

经反复摸索,用 AVR Studio:【4.12.462  Service Pack 1】+ WinAVR-20060125 搭配时,只要把 AVR Studio 文件夹下 Compilers 文件夹中的 AvrPluginavrgccplugin.dll 文件换成 AVR Studio:【4.12.452 】的相应文件就不会死了

出0入0汤圆

发表于 2006-3-13 17:19:37 | 显示全部楼层
呵呵,我用:【4.12.462  Service Pack 1】+ WinAVR-20050214



WINAVR-20060125 不知道有没有什么BUG,所以还是在用20050214 比较保险。



希望有一个功能最好,性能最稳定的组合出现。

出0入0汤圆

发表于 2006-3-13 17:21:33 | 显示全部楼层
恩,多谢各位了!感激ing

出0入0汤圆

发表于 2006-3-15 21:37:44 | 显示全部楼层
很好,但怎么生成COF文件呢?我试了很多遍都没有找到!

出0入0汤圆

发表于 2006-3-22 09:40:17 | 显示全部楼层
AvrStdio 4.12 SP2出来了,不过好像还是有Bug,大家有没有用啊

出0入0汤圆

发表于 2006-3-22 09:49:41 | 显示全部楼层
哈哈,Atmel真的有动作了,又出了SP2,现在与WinAVR-20060125搭配好像没问题了

出0入0汤圆

发表于 2006-3-22 11:07:15 | 显示全部楼层
去www.avrfreaks.net的论坛上看了看,在sp2下还是有许多bug,不知道何时能稳定,ide的梦想又要delay了

出0入0汤圆

发表于 2006-5-3 08:19:12 | 显示全部楼层
只不过是借用avrstudio的外壳,当然一样,

出0入0汤圆

发表于 2006-7-3 18:09:08 | 显示全部楼层
我按照楼主的方法一步步执行但还是不能编译OK!

出0入0汤圆

发表于 2007-2-4 01:43:08 | 显示全部楼层
这个不稳定,那个有八哥,那个好死鸡。。。

死鸡就把机器砸啦,换个好的;

不要动不动就是程序有问题。

出0入0汤圆

 楼主| 发表于 2007-7-25 00:43:46 | 显示全部楼层
这两天使用WinAVR-20070525 + avrstudio4.13.528 + UE,觉得还可以,期间碰到一个问题,就是选择了另外一个源文件,Build and RUN 无法出现程序空间使用情况及永远出现原先的源文件的编译结果,后来怀疑是文件夹为中文名及文件目录太深的原因,改过后就好了。找来一个芯艺的例程,看看编译出来的ASM 文件如何,还不错,



#include <avr/io.h>



volatile register uint8_t controller_flag0                 asm("r22");

#define        f_high_voltage                                      0

#define        f_high_voltage_sc                                   0b00000001

#define        f_super_current                                     1

#define        f_super_current_sc                                  0b00000010

#define        f_automatic_phase                                   2

#define        f_automatic_phase_sc                                0b00000100

#define        f_calibrate_limit_current                           3

#define        f_calibrate_limit_current_sc                        0b00001000

#define        f_normal_brake                                      4

#define        f_normal_brake_sc                                   0b00010000

#define        f_limit_current                                     5

#define        f_limit_current_sc                                  0b00100000

#define        f_low_voltage                                       6

#define        f_low_voltage_sc                                    0b01000000

#define        f_motor_halt_buf                                    7

#define        f_motor_halt_buf_sc                                 0b10000000



int main(void)

{

        DDRC=0X0F;

        PORTC=0X0F;

        controller_flag0 = PORTC;

        if ((controller_flag0 & f_high_voltage_sc) == 0)                //这个位判断及位操作的做法还请熟悉的朋友详细解释一下,我自己也不太确定这样写是否合适,只是不停的改,看ASM 的代码正确了就这样写了

                controller_flag0 |= (1<<f_high_voltage);

}



编译结果

Build started 25.7.2007 at 00:24:54

avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex winavr_study.elf winavr_study.eep || exit 0

c:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be copied!



AVR Memory Usage

----------------

Device: atmega48



Program:     126 bytes (3.1% Full)

(.text + .data + .bootloader)



Data:          0 bytes (0.0% Full)

(.data + .bss + .noinit)





Build succeeded with 0 Warnings...





lss 文件,我比较喜欢看这个文件,容易看出WINAVR 怎么处理成ASM 的

winavr_study.elf:     file format elf32-avr



Sections:

Idx Name          Size      VMA       LMA       File off  Algn

  0 .text         0000007e  00000000  00000000  00000054  2**1

                  CONTENTS, ALLOC, LOAD, READONLY, CODE

  1 .stab         00000378  00000000  00000000  000000d4  2**2

                  CONTENTS, READONLY, DEBUGGING

  2 .stabstr      00000071  00000000  00000000  0000044c  2**0

                  CONTENTS, READONLY, DEBUGGING

  3 .debug_aranges 00000020  00000000  00000000  000004bd  2**0

                  CONTENTS, READONLY, DEBUGGING

  4 .debug_pubnames 00000030  00000000  00000000  000004dd  2**0

                  CONTENTS, READONLY, DEBUGGING

  5 .debug_info   00000094  00000000  00000000  0000050d  2**0

                  CONTENTS, READONLY, DEBUGGING

  6 .debug_abbrev 00000066  00000000  00000000  000005a1  2**0

                  CONTENTS, READONLY, DEBUGGING

  7 .debug_line   000000cb  00000000  00000000  00000607  2**0

                  CONTENTS, READONLY, DEBUGGING

  8 .debug_frame  00000020  00000000  00000000  000006d4  2**2

                  CONTENTS, READONLY, DEBUGGING

  9 .debug_str    0000009c  00000000  00000000  000006f4  2**0

                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:



00000000 <__vectors>:

   0:        19 c0               rjmp        .+50             ; 0x34 <__ctors_end>

   2:        33 c0               rjmp        .+102            ; 0x6a <__bad_interrupt>

   4:        32 c0               rjmp        .+100            ; 0x6a <__bad_interrupt>

   6:        31 c0               rjmp        .+98             ; 0x6a <__bad_interrupt>

   8:        30 c0               rjmp        .+96             ; 0x6a <__bad_interrupt>

   a:        2f c0               rjmp        .+94             ; 0x6a <__bad_interrupt>

   c:        2e c0               rjmp        .+92             ; 0x6a <__bad_interrupt>

   e:        2d c0               rjmp        .+90             ; 0x6a <__bad_interrupt>

  10:        2c c0               rjmp        .+88             ; 0x6a <__bad_interrupt>

  12:        2b c0               rjmp        .+86             ; 0x6a <__bad_interrupt>

  14:        2a c0               rjmp        .+84             ; 0x6a <__bad_interrupt>

  16:        29 c0               rjmp        .+82             ; 0x6a <__bad_interrupt>

  18:        28 c0               rjmp        .+80             ; 0x6a <__bad_interrupt>

  1a:        27 c0               rjmp        .+78             ; 0x6a <__bad_interrupt>

  1c:        26 c0               rjmp        .+76             ; 0x6a <__bad_interrupt>

  1e:        25 c0               rjmp        .+74             ; 0x6a <__bad_interrupt>

  20:        24 c0               rjmp        .+72             ; 0x6a <__bad_interrupt>

  22:        23 c0               rjmp        .+70             ; 0x6a <__bad_interrupt>

  24:        22 c0               rjmp        .+68             ; 0x6a <__bad_interrupt>

  26:        21 c0               rjmp        .+66             ; 0x6a <__bad_interrupt>

  28:        20 c0               rjmp        .+64             ; 0x6a <__bad_interrupt>

  2a:        1f c0               rjmp        .+62             ; 0x6a <__bad_interrupt>

  2c:        1e c0               rjmp        .+60             ; 0x6a <__bad_interrupt>

  2e:        1d c0               rjmp        .+58             ; 0x6a <__bad_interrupt>

  30:        1c c0               rjmp        .+56             ; 0x6a <__bad_interrupt>

  32:        1b c0               rjmp        .+54             ; 0x6a <__bad_interrupt>



00000034 <__ctors_end>:

  34:        11 24               eor        r1, r1

  36:        1f be               out        0x3f, r1        ; 63                //SREG = 0

  38:        cf ef               ldi        r28, 0xFF        ; 255

  3a:        d2 e0               ldi        r29, 0x02        ; 2

  3c:        de bf               out        0x3e, r29        ; 62

  3e:        cd bf               out        0x3d, r28        ; 61                //SP = RAMEND = 0X2FF



00000040 <__do_copy_data>:

  40:        11 e0               ldi        r17, 0x01        ; 1                        //这一段不是太清楚,熟悉的朋友解释一下可以用来干嘛,为何只比较0x100组数据

  42:        a0 e0               ldi        r26, 0x00        ; 0

  44:        b1 e0               ldi        r27, 0x01        ; 1

  46:        ee e7               ldi        r30, 0x7E        ; 126

  48:        f0 e0               ldi        r31, 0x00        ; 0

  4a:        02 c0               rjmp        .+4              ; 0x50 <.do_copy_data_start>



0000004c <.do_copy_data_loop>:

  4c:        05 90               lpm        r0, Z+

  4e:        0d 92               st        X+, r0



00000050 <.do_copy_data_start>:

  50:        a0 30               cpi        r26, 0x00        ; 0

  52:        b1 07               cpc        r27, r17

  54:        d9 f7               brne        .-10             ; 0x4c <.do_copy_data_loop>



00000056 <__do_clear_bss>:

  56:        11 e0               ldi        r17, 0x01        ; 1                        //这一段不是太清楚,熟悉的朋友解释一下可以用来干嘛,为何只比较0x100组数据

  58:        a0 e0               ldi        r26, 0x00        ; 0

  5a:        b1 e0               ldi        r27, 0x01        ; 1

  5c:        01 c0               rjmp        .+2              ; 0x60 <.do_clear_bss_start>



0000005e <.do_clear_bss_loop>:

  5e:        1d 92               st        X+, r1



00000060 <.do_clear_bss_start>:

  60:        a0 30               cpi        r26, 0x00        ; 0

  62:        b1 07               cpc        r27, r17

  64:        e1 f7               brne        .-8              ; 0x5e <.do_clear_bss_loop>

  66:        02 d0               rcall        .+4              ; 0x6c <main>

  68:        09 c0               rjmp        .+18             ; 0x7c <_exit>



0000006a <__bad_interrupt>:

  6a:        ca cf               rjmp        .-108            ; 0x0 <__vectors>



0000006c <main>:

#define        f_motor_halt_buf                                    7

#define        f_motor_halt_buf_sc                                 0b10000000



int main(void)

{

  6c:        8f e0               ldi        r24, 0x0F        ; 15

  6e:        87 b9               out        0x07, r24        ; 7

        DDRC=0X0F;

        PORTC=0X0F;

  70:        88 b9               out        0x08, r24        ; 8

        controller_flag0 = PORTC;

  72:        88 b1               in        r24, 0x08        ; 8

  74:        68 2f               mov        r22, r24

        if ((controller_flag0 & f_high_voltage_sc) == 0)

  76:        60 ff               sbrs        r22, 0

                controller_flag0 |= (1<<f_high_voltage);

  78:        61 60               ori        r22, 0x01        ; 1

  7a:        08 95               ret



0000007c <_exit>:

  7c:        ff cf               rjmp        .-2              ; 0x7c <_exit>







可以看出程序也没有多出什么来,就是那2段__do_copy_data,__do_clear_bss。而__vectors,__ctors_end 用ASM 写也是要做的,另外就是main 变成函数了,成了

  66:        02 d0               rcall        .+4              ; 0x6c <main>







这样看来,解决了位判断及寄存器全局变量的使用问题,就可以用WINAVR 来改我的ASM 程序了,不用再反复检查及验证ASM 编写的乘除法计算程序了

出0入0汤圆

发表于 2007-8-24 15:44:27 | 显示全部楼层
26楼的,你的编译成功了,只是多定义了一个i没有使用,呵呵.
头像被屏蔽

出0入0汤圆

发表于 2007-8-29 09:27:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 21:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表