从ICCAVR到WinAVR的过渡指南:差异与技巧
5星 · 超过95%的资源 需积分: 10 15 浏览量
更新于2024-09-27
2
收藏 386KB PDF 举报
"这篇文章主要介绍了从使用ICC编译器过渡到GCC编译器时的一些关键差异,特别是针对AVR微控制器的开发。作者通过对比ICC AVR和WinAVR的头文件、延时函数、函数声明以及中断处理等方面的差异,帮助开发者理解和适应GCC的语法和编程习惯。"
在AVR嵌入式开发中,ICC(IAR Embedded Workbench for AVR)和GCC(GNU Compiler Collection)是两种常用的编译器。 ICC以其强大的调试工具和优化能力受到很多开发者的青睐,而GCC则因其开源、免费的特性被广泛使用。以下是两者之间的一些主要区别:
1. 头文件:
ICC中常使用`#include <iom16v.h>`来包含设备相关的头文件,而GCC中则需要改为`#include <avr/io.h>`。此外,根据具体的程序需求,可能还需要参考WinAVR的手册来选择其他的头文件。
2. 延时函数:
GCC提供了`<util/delay.h>`头文件,其中包含了`_delay_us()`和`_delay_ms()`函数来实现延时。这两个函数都接受double类型参数,但实际应用中通常使用整数参数。需要注意的是,这些延时函数存在最大延时限制,具体可在头文件中查看详细信息。
3. 函数声明:
在WinAVR中,即使没有参数的函数也需要明确声明为`void`,例如`void LED_on(void)`。否则,编译器会发出警告,提示函数声明不是原型,或者没有返回类型。
4. 源代码格式:
WinAVR的源程序文件末尾必须有一个空行,否则编译器会给出“nonewline at end of file”的警告。
5. 中断函数:
当涉及到中断处理时,GCC需要引入`<avr/interrupt.h>`头文件,并且中断服务函数的定义方式也与ICC有所不同。在GCC中,中断服务函数的定义需要使用`ISR()`宏,例如`ISR(TIMER0_OVF_vect)`。
除了以上几点,还有一些其他细节需要注意,例如变量定义和初始化、内存模型的差异、编译选项等。在从ICC转向GCC的过程中,开发者需要熟悉GCC的编译选项,如-Ox级别的优化设置,以及如何使用GCC的调试工具,如GDB。此外,理解GCC的内存模型对于高效地使用堆栈和全局变量也至关重要。
虽然ICC和GCC在语法和库函数上有一定差异,但它们都是用于AVR开发的强大工具。理解并适应这些差异,可以帮助开发者顺利地完成从ICC到GCC的过渡,充分利用GCC的开放性和灵活性。
2013-11-25 上传
2022-10-27 上传
2022-09-24 上传
2022-09-20 上传
2022-09-14 上传
2022-09-21 上传
2009-04-10 上传
御剑
- 粉丝: 27
- 资源: 6
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南