历史上的今天
返回首页

历史上的今天

今天是:2024年11月18日(星期一)

正在发生

2019年11月18日 | 对编译器的选择

2019-11-18 来源:51hei

一般来说,单片机的使用要从基础的汇编语言开始讲起,即使使用C语言进行开发,也必须对内部的机器码实现非常熟悉,才能应付设计和调试中可能出现的各种情况。WINAVR是个免费的AVR 开发程序集,它以著名的自由软件GCC 为C/C++编译器。之所以选用WINAVR,是因为它是一组开放源代码的程序集,也是目前最好的自由软件之一。   下面是关于WINAVR的使用要点,更详细的情况建议参考芯艺的《AVR 单片机GCC 程序设计》。开发工具:

更适合采用高级语言开发是AVR 单片机最初设计时的目的之一。目前AVR 单片机高级语言发发工具主要有IAR C、WINAVR、ICCAVR、CodeVision、BASCOM-AVR(BASIC 语言)。IAR 是与AVR 内核协同开发的,很多对AVR 更适合C 语言开发方面的改进是根据IAR开发过程的,它也是ATMEL 公司推荐的C 语言编译器,但它的价格几呼让人难以接受,达到上万元人民币。ICCAVR 是国内AVR 主要推广单位双龙公司代理的C 编译器,它价格低廉,友好的界面把很多烦琐的项目管理和编译设置隐藏了起来,为此它受部分开发人员的欢迎。


CodeVision 也是个很不错的C 编译器,目前在国内也有一定数量的用户。Winavr 是个免费的AVR 开发程序集,它以著名的自由软件GCC 为C/C++编译器。下面所有章节我都会介绍如何使用WINAVR 开发AVR 单片机。GCC 编译器UNIX 上最原始的C 编译器叫CC(C Compiler C 编译器),源于此GNU 的C 编译器叫作GCC(GNU C Compiler),然而,随着GCC 支持语言的增加GCC 这个缩写的意义已演变成了GNU 编译器集合(GNU Compiler Collection),它是GNU 项目的一个产品,是个开放源代码软件。GCC 可编译多种语言,目前支持的语言有C、C++、Objective-C、Fortran、java 和Ada。这些高级语言程序通过编译程序前端(front-end)后产生解析树,之后与器件相关的后端(back-end)程序将它们解释成实际的可执行指令集。前端与后端是完全分开的,解析树是它们中间的产物。GCC 这样的设计使得任何一种语言只要通过合适的语法解析器产生符合格式的解析树,就可以产生GCC 后端程序所支持的所有器件上的可执行指令集。同样的,任何一种器件只要将树结构翻译成汇编,就可以使用GCC 前端所支持的所有语言。要承认的是,以上描述是理论化的,便于理解,实际操作并没有想象的那么简单。事实上前端和后端都不是孤立的。幸运的是AVR 的确得到了GCC 的支持,它也是GCC 支持的唯一一种8 位处理器。不仅如此,我们还可以在WINDOWS 平台上安装程序包WINAVR 来使用GCC 的AVR C/C++编译程序。


WINAVR 是一组开放源代码的程序集,用于ATMEL 公司 AVR 系列单片机的开发,它主要包含:

1. GNU 程序包Binutils

GNU Binutils 非常庞大,WINAVR 仅包含与AVR 相关的部分,有AVR 汇编器、连接器以及与机器指令相关的一些工具

2. GNU GCC 的C 和C++编译器。

3. AVR-LIBC

AVR-LIBC 是AVR 单片机C 运行时库, 它是为应用程序提供标准C 函数的连接时定位库。

          

另外WINAVR 还包含软件调试器、器件编程软件、文件格式转换工具等多个有用工具,这里不一一列出, 请参考WINAVR 说明文档。WINAVR 项目的WEB 地址是http://sourceforge.net/projects/winavr ,这里可以下载最新的版本,并可订阅邮件组。 邮件组是获取WINAVR 相关帮助信息的重要途径。一个简单的例子文件demo1.c :#i nclude

int main( void )

{

unsigned char i, j, k,led=0;

DDRB=0xFF;

while (1)

{

if(led)

PORTB|=0X01;

else

PORTB&=0XFE;

led=!led;

//延时

for (i=0; i<255; i++)

for(j=0; j<255;j++)

k++;

}

}

这是一个使接在PB0 口的LED 发光管闪烁的程序。使用Mfile 生成合适的makefile然后运行make all即可生成hex文件。


推荐阅读

史海拾趣

Esc Electronics Corp公司的发展小趣事

Esc Electronics Corp(简称Esc)在成立的初期,以其独特的技术突破在电子行业中崭露头角。公司研发出一款高效能、低成本的电子元件,成功吸引了市场的注意。随着产品的不断迭代和技术的持续创新,Esc的产品线逐渐丰富,市场份额也逐步扩大。公司凭借技术优势和敏锐的市场洞察力,成功开拓了多个新的市场领域。

欧密格光电(Amicc)公司的发展小趣事

面对电子行业技术的快速迭代和市场竞争的加剧,Esc始终保持创新驱动的发展策略。公司不断加大对研发创新的投入力度,推动产品升级和产业升级。通过引入新技术、新工艺和新材料,Esc成功开发出一系列具有竞争力的新产品,并在市场上取得了显著的成绩。同时,公司还积极参与行业标准的制定和推广工作,推动整个电子行业的进步和发展。

Clever Little Box公司的发展小趣事

Clever Little Box深知,优质的客户服务是企业长期发展的关键。因此,公司始终注重提升服务质量,为客户提供专业的技术支持和售后服务。同时,公司还注重与客户建立良好的关系,通过定期沟通、反馈收集等方式,了解客户的需求和意见,以便更好地满足客户的期望。

Andigilog公司的发展小趣事

随着公司实力的不断增强,Clever Little Box开始将目光投向国际市场。公司制定了国际化战略,通过参加国际展览、建立海外销售渠道等方式,积极开拓海外市场。这一战略的实施不仅为公司带来了更广阔的市场空间,还提高了公司的国际竞争力。

需要注意的是,以上故事是基于公开信息和一般企业发展规律进行的概括和推测,并非Clever Little Box公司的真实发展历程。如需了解该公司更准确、具体的发展故事,建议查阅相关资料或访问公司官方网站。

台湾奇力(Chip)公司的发展小趣事

奇力公司的成功离不开与奇美集团的紧密合作。奇美集团是台湾知名的面板生产厂家,拥有强大的技术实力和市场份额。奇力公司作为奇美集团的子公司,得到了奇美集团在技术、资金和市场等方面的全力支持。通过与奇美集团的紧密合作,奇力公司得以快速发展,并在LED芯片市场上取得了显著的成绩。

Aborn Electronics Inc公司的发展小趣事

随着电子行业的快速发展,Aborn Electronics意识到只有不断创新才能在竞争中保持领先。公司加大了对研发的投入,引进了一批高素质的研发人才,并在多个技术领域取得了重要突破。其中,一项关于高效能电源管理技术的创新成果,不仅提高了产品的能效比,还为公司带来了可观的经济效益。这一技术的成功应用,进一步提升了Aborn Electronics在行业内的影响力。

问答坊 | AI 解惑

MPLAB C18用户指南(中文)

MPLAB C18用户指南(中文)…

查看全部问答>

求无线数传系统

求购无线数传系统,要求: 载频2.4G;传输速率1M;传输距离1千米…

查看全部问答>

AVR系列单片机C语言编程与应用实例

AVR系列单片机C语言编程与应用实例…

查看全部问答>

IRIS的相关软件工具-观察眼图

业界在用示波器进行测试的过程中存在着如何观察眼图的问题,这些问题与串行数据的特征和示波器的特性有关。本白皮书和一个叫做IRIS的相关软件工具可以帮助你了解测试中串行数据与示波器特征的相互关系。本白皮书讲述每种示波器的特征如何在频域和 ...…

查看全部问答>

ESD过不了

各位大侠,我现在有一款充电器ESD过不了 一打8KV,手机就保护了.请问是什么原因,有什么解决的办法 啊…

查看全部问答>

求助,在电脑上画电路图用什么工具?

求助,在电脑上画电路图用什么工具方便快捷啊?最好能画得像教科书上的那样。…

查看全部问答>

我的PXA270跑不起来了!请大家帮帮忙啊!

  我完全仿照PXA270开发板,做的PCB,现在出现的情况就是,板子完全能够实现BOOTLOAD的下载, 但是BOOTLOAD始终不能运行,我已经检查过了外围电压,似乎都完全正确,我现在已经没有办法了, 求大家帮帮忙 ,帮我分析下原因啊!谢谢!…

查看全部问答>

驱动开发

我刚学驱动开发。希望大虾给点建议,该看些什么书?…

查看全部问答>

移植ucosii的时候ads编译器遇到的问题

我是新手,第一次移植系统,在移植过程中遇到了以下问题,我尽量把相关的函数都贴出来: 在os_cpu.h中,我定义了函数: #define        OS_ENTER_CRITICAL()        ARMDisableInt() #define  &n ...…

查看全部问答>

扩展串口芯片16550中断问题

请教各位:     我的串口芯片16550用了外部中断EINT3     在注册表中:我需要加     \"SysIntr\"=dword:3      串口4的中断为EINT3     \"MeMBase\"=dword:0x20000000  &nbs ...…

查看全部问答>