完美者(wmzhe.com)网站以软件下载为基础,改版后的网站对功能性板块进行扩充,以期能够解决用户在软件使用过程中遇见的所有问题。网站新增了“软件百科”、“锦囊妙技”等频道,可以更好地对用户的软件使用全周期进行更加专业地服务。
WinAVR是一款的AVR单片机编译软件,WinAVR的目标代码效率极高。具有编译速度快、编译准确性高的特点,支持多种数据类型。代码可读性和可移植性高。winavr还有一个很严重的缺陷就是不支持float数据类型,原因是GCC在所有环境中都把float直接定义为double。这样,对8bit环境来说,就显得负担过重了。
1、AVRGCC不能像CVAVR或ICCAVR那样把特殊I/O口当变量来用,怎么办?
其实,使用 AVRGCC 的 inp(port) 和 outp(data,port) 宏就是最好的方法,但如果真的需要延续以往的使用方式,也可以照以下方式办理:#define dPORTA (*(unsigned char *)(PORTA + 0x20))。如此,就定义了一个 dPORTA 的伪变量,可以直接用于表达式中,并且用此种方式也可以实现类似 C51 中的 sfr 变量类型……
2、AVRGCC 不能编译带浮点函数的程序,怎么办?
很简单,在工程所在目录的makefile文件中,把LDFLAGS=项目最后加上 .-lm就可以了……
3、怎么改变目标程序的优化方式?
在makefile文件的CPFLAGS=行中,加入-Ox(x=1,2,3,s)就可以了,如果已经有了-O的项目,就改变现有的,1~3 代表优化方式,s代表按代码长度优化……
4、AVRGCC 能不能为 AT90S1200、ATTiny 系列进行 C 语言编程?
答案是肯定的!首先,需要在 makefile 的项目中,把MCU=后面的内容改成avr2其次,需要在程序所在的 c 文件中,把#include 改成#include ,#include如此,即可以直接将编译后的代码用于该两类MCU上,不过,还需要注意的是,由于该两类 MCU 没有软件堆栈和 RAM,所以,程序中*禁止*使用全局变量、局部静态变量以及中断处理以外的函数(其实在 GCC 中,中断处理程序叫做“信号”,不叫函数),并且,在中断处理过程中,最好不要开放中断,否则会引起数据错误并非不可以,但需要一些技巧)。
"锦囊妙技"栏目是聚合全网软件使用的技巧或者软件使用过程中各种问题的解答类文章,栏目设立伊始,小编欢迎各路软件大神朋友们踊跃投稿,在完美者平台分享大家的独门技巧。
本站文章素材来源于网络,大部分文章作者名称佚失,为了更利于用户阅读和使用,根据需要进行了重新排版和部分改编,本站收录文章只是以帮助用户解决实际问题为目的,如有版权问题请联系小编修改或删除,谢谢合作。