初尝Linux下的AVR单片机开发

初尝linux下的avr单片机开发 posted on2009/04/02bypt—7 comments ↓
原帖地址:
此前接触过avr单片机,发现无论是书店里面的教材,还是网上一大堆的中文资料,无一例外都是说windows下使用winavr、iccavr之类的,linux方面的简直只字不提,难道这就是传说中的中国国情?外国情况可很不一样,玩单片机的geek一般都很哈linux,做单片机开发的软件一应俱全,当然还是开源的。
昨天从淘宝重新买了条usb的下载线,回来一看是usbasp的设计,附送的光盘当然也是win下的驱动和说明了,忽略。
插上下载器,lsusb,认倒是认出来了,叫做voit,那怎么用呢?上网一搜,原来usbasp是德国人的设计,gpl的,其中提到avrdude支持usbasp,当然也有源码下载。不过我用的是ubuntu,发挥超级牛力的时候到了:sudo apt-get install avrdude,恩,几秒钟搞定,让他们去编译吧!
linux下做单片机开发当然首选gcc,就如这些英文教程说的,下载源码?no,no,apt has super cow powers,继续sudo apt-get install gcc-avr binutils-avr avr-libc
几分钟装完,很好,估计那些下载源码回来编译的同学要去喝两个小时茶才能用了。
万事俱全,先写个单片机的helloworld,借用micahcarrick的源码:
#define f_cpu 1000000ul /* 1 mhz cpu clock */ #include #include intmain (void){ ddrc = _bv (pc0); /* pc0 is digital output */ while (1) /* loop forever */ { /* set pc0 on portc (digital high) and delay for 500ms */ portc &= ~_bv(pc0); _delay_ms(500); /* pc0 on portc (digital 0) and delay for 500ms */ portc |= _bv(pc0); _delay_ms(500); } return (0);}
....保存为toggle_led.c
命令时间:
avr-gcc -mmcu=atmega48 -wall -os -o toggle_led.o toggle_led.c 是不是似曾相识?平时用gcc就这么用的,这里除了把gcc改成avr-gcc,没多大区别。-mmcu定义了目标cpu的类型,我用的是atmega48;-os是优化选项,减少程序的大小。这就是传说中的交叉编译。
接着把目标代码翻译成可以烧录到芯片上的hex文件:
avr-objcopy -j .text -j .data -o ihex toggle_led.o toggle_led.hex avr-objcopy的-j参数限定转换的程序段,-o设定hex的输出格式,ihex即intel hex file
[update: 本例子中,-j .data这个选项没作用,因为.data区根本没有数据;.data是存放初始化数组、字符串等数据的段,如果程序用到了,记得加上]
搞定,开烧:
sudo avrdude -p m48 -c usbasp -e -u flash:w:toggle_led.hex 因为直接读写usb接口,所以不给权限的话会提示找不到编程器,当然配置usb权限最好,这里暂时用sudo。avrdude的-p指定目标cpu,-c指定下载器,如果不知道所用的下载器是什么型号,敲avrdude -c会列出所有支持的下载器型号及其描述。-e即烧录前清空,-u参数指定刷写类型以及刷写文件。
[update:可参考virtualbox使用usb的配置,把当前用户加入usbfs组,就可以直接使用avrdude了]
回车后下载器的指示灯闪了下,跟着单片机上的小灯开始闪烁,hi, hello world.
当然问题不是完全没有,我用avrdude下载完后默认的校验老是无法通过,说读取错误,只好加个-v来跳过校验。可能跟个别机器有关。
当然实际开发很少这样敲一大堆命令来编译程序,一般都用make搞定。
对比起win下满是gui的程序,我第一次接触winavr都搞了半天,如何如何配置一个project,哇那个属性窗口真让人眼花缭乱,使用gcc来开发,则可以循序渐进,未了解到的参数就不用,简洁,明了,但不失其功能强大。
资源:
usbasp主页:
avr-gcc programming guide:
linux atmel avr tutorial:
micah carrick -- avr(非常推荐,但是需要翻墙) :
avr libc user manuallib reference:

超小PMIC,视觉算法“芯”动力!
Brilliant Sole推出了一款VR外设,致力于将VR世界中的移动操作带到你的脚底
基于T5L1芯片的可调功率LED电源设计方案
恒温恒湿培养箱有什么作用
聚酰亚胺薄膜材料异向性导热行为研究进展
初尝Linux下的AVR单片机开发
一文深入Redis主从复制的原理详解
造成监控视频卡顿的有哪些主要原因?
人脸识别争议背后:如何保护个人信息
最大胆的设计!诺基亚S8 edge = 华为P9+三星S7
瞄准传感器等产业链,长沙300亿产业基金注册成立
三星更新国行系列手机Android 11正式版更新时间计划
行业案例 | 加速升级!助力药品产能收放自如
IQE与MICLEDI合作开发大规模商用于AR产品的microLED
两大机构预测2019全球手机销量下降3.3% 华为超苹果成第二
土壤墒情检测仪的工作原理以及应用范围
爱立信已证实软件问题是导致英国和日本出现网络中断的主要原因
异方性导电膜(ACF)的新应用
浅析G120变频器的F08502故障的原因及其处理办法
锁定混合云与AI,IBM还有什么“大招”?