<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>apt-blog.net   无证程序员的PT桑 &#187; 单片机</title>
	<atom:link href="http://apt-blog.net/tag/%e5%8d%95%e7%89%87%e6%9c%ba/feed" rel="self" type="application/rss+xml" />
	<link>http://apt-blog.net</link>
	<description>潜逃中。</description>
	<lastBuildDate>Fri, 18 May 2012 11:25:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>明年的毕业设计的初步设想</title>
		<link>http://apt-blog.net/graduate_design</link>
		<comments>http://apt-blog.net/graduate_design#comments</comments>
		<pubDate>Sat, 20 Jun 2009 08:07:15 +0000</pubDate>
		<dc:creator>PT</dc:creator>
				<category><![CDATA[民工技术]]></category>
		<category><![CDATA[分布式]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[毕业设计]]></category>
		<guid isPermaLink="false">http://apt-blog.net/archives/439.html</guid>
		<description><![CDATA[最近给我们上《分布式系统概论》的老师找我在学校实验室哪里部署一套运算集群，说这个题目以后你还可以弄成毕业设计什么的，大有文章可做；了解了集群系统的一些资料后，最终知道集群计算的核心是算法。算法决定了整个集群系统的架构网络的架构，至于MPI、Cluster OpenMP之类的东东，只是无关要紧的小工具而已。 说实话，我个人对纯粹的算法学的不是很感兴趣。算法是基于问题而产生，但是因为没有问题而要创造问题来研究算法，感觉是吃饱了撑着的人干的事——比如那帮搞数学的人就是……当然这是个人感觉，我知道历史上一般都是理论上获得了突破，最终推动业界发展（又或者其实是相互促进的？不讨论了……不专业）。也就是说如果让我糊里糊涂搭一个貌似强大的环境然后跑个不知道干吗的算法，再做一系列糊弄老师们的文字，确实不大愿意。 桌面上还摆着之前玩单片机时候用面包板插的板子，后来作成了能够显示从串口发送过来的字符的小玩意。似乎这个没什么技术含量，但如果拿这个来做毕业设计，应该兴致会高一点。 主要是想做成一个显示主机系统运行状态的小玩意，就如罗技G19键盘上面的屏幕那样（当然暂时还没有这么漂亮的屏幕），实时现实系统状态、cpu温度占用内存占用网络带宽占用等，当然这还不够特色，不过主要是看上位软件怎么设计吧，可以弄成是libnotify的硬件版，呵呵。 单片机硬件上，现在单1602屏幕就占了10多个IO口，其中的8位数据线好像有点浪费，要是配上一些按键，一堆LED什么的，作成真正意义上的数据总线，似乎颇有可玩性。 另外呢现在跟主机通迅是通过串口的，我用了一条PL2302的USB串口线来连接，要是自己实现一个USB的协议呢？ =。=越说越复杂了，这时候有技术含量了吧！哈！感觉这样做毕设比较有趣，至少不会像有些人做个xx管理系统，或者一个asp，单纯在UI代码上面就花了一大番功夫。]]></description>
			<content:encoded><![CDATA[<p>最近给我们上《分布式系统概论》的老师找我在学校实验室哪里部署一套运算集群，说这个题目以后你还可以弄成毕业设计什么的，大有文章可做；了解了集群系统的一些资料后，最终知道集群计算的核心是<span style="font-weight: bold;">算法</span>。算法决定了整个集群系统的架构网络的架构，至于MPI、Cluster OpenMP之类的东东，只是无关要紧的小工具而已。</p>
<p>说实话，我个人对纯粹的算法学的不是很感兴趣。算法是基于问题而产生，但是因为没有问题而要创造问题来研究算法，感觉是吃饱了撑着的人干的事——比如那帮搞数学的人就是……当然这是个人感觉，我知道历史上一般都是理论上获得了突破，最终推动业界发展（又或者其实是相互促进的？不讨论了……不专业）。也就是说如果让我糊里糊涂搭一个貌似强大的环境然后跑个不知道干吗的算法，再做一系列糊弄老师们的文字，确实不大愿意。</p>
<p>桌面上还摆着之前玩单片机时候用面包板插的板子，后来作成了能够显示从串口发送过来的字符的小玩意。似乎这个没什么技术含量，但如果拿这个来做毕业设计，应该兴致会高一点。</p>
<div id="attachment_441" class="wp-caption alignright" style="width: 344px"><a href="http://apt-blog.net/wp-content/uploads/2009/06/avr-lcd.jpg" rel="lightbox[439]" title="avr-lcd"><img class="size-full wp-image-441" title="avr-lcd" src="http://apt-blog.net/wp-content/uploads/2009/06/avr-lcd.jpg" alt="avr-lcd" width="334" height="250" /></a><p class="wp-caption-text">avr-lcd</p></div>
<p>主要是想做成一个显示主机系统运行状态的小玩意，就如<a href="http://www.ite68.cn/newview.asp?nid=19713" target="_blank">罗技G19</a>键盘上面的屏幕那样（当然暂时还没有这么漂亮的屏幕），实时现实系统状态、cpu温度占用内存占用网络带宽占用等，当然这还不够特色，不过主要是看上位软件怎么设计吧，可以弄成是libnotify的硬件版，呵呵。</p>
<p>单片机硬件上，现在单1602屏幕就占了10多个IO口，其中的8位数据线好像有点浪费，要是配上一些按键，一堆LED什么的，作成真正意义上的数据总线，似乎颇有可玩性。</p>
<p>另外呢现在跟主机通迅是通过串口的，我用了一条PL2302的USB串口线来连接，要是自己实现一个USB的协议呢？ =。=越说越复杂了，这时候有技术含量了吧！哈！感觉这样做毕设比较有趣，至少不会像有些人做个xx管理系统，或者一个asp，单纯在UI代码上面就花了一大番功夫。</p>
]]></content:encoded>
			<wfw:commentRss>http://apt-blog.net/graduate_design/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>为AVR写的1602A液晶屏幕驱动程序</title>
		<link>http://apt-blog.net/1602_lcd_driver_under_avr_chip</link>
		<comments>http://apt-blog.net/1602_lcd_driver_under_avr_chip#comments</comments>
		<pubDate>Sun, 12 Apr 2009 13:09:38 +0000</pubDate>
		<dc:creator>BOYPT</dc:creator>
				<category><![CDATA[单片机]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[LCD]]></category>
		<category><![CDATA[液晶]]></category>
		<category><![CDATA[驱动]]></category>
		<guid isPermaLink="false">http://apt-blog.net/?p=238</guid>
		<description><![CDATA[为1602ALCD屏幕实现的基本驱动功能，8位数据线，3位控制线，可自定义端口，可从LCD_Init函数设定工作方式，实现发送单字符和字符串的基本功能，带busy_wait。使用avr-gcc 编译。 代码下载：http://code.google.com/p/ptcoding/source/browse/trunk/AVR 更新：SVN目录内还有串口通讯的模块，以及串口和LCD驱动结合起来的一个试验性程序 参考资料：lcd1602a_398762.pdf（英文） ourAVR （注意两份资料的出入，前者更详细） 开发手记： 之前从天河赛格买了个1602的液晶屏，折腾了两天，终于让ATmega48驱动起来。 1602本来是一个挺简单的器件，8位数据线和3位控制线，其工作时序图初看起来挺复杂，但其实也就E端使能脉冲的事情，但是折腾下来，再一次验证了“简体中文”资料的不可靠，还有就是“这就是传说中的‘驱动程序’”。 首先我是从ourAVR网站提供的1602B液晶使用范例提供的资料入手（1602A、B好像没太大区别），借鉴了人家用ICCAVR写的代码（虽然代码是我敲的，但是基本上还是抄的），当LCD上显示出第一个字母时，还挺兴奋的，然而，这只是刚刚开始……（才100多行代码，加上看资料个把小时什么都好了。） 接下来才是噩梦般的调试，要么给黑方块，要么乱码，不稳定，这次能显示，重启就不行……还是ourAVR那篇资料提醒了我，初始化工作做的不够，写个循环发20次初始化信号，果然稳定了…… 奇怪阿，我明明按照Datasheet的数据来写的，怎么初始化不够呢？……说起1602的Datasheet，ourAVR那里提供了一份中文版，由“长沙太阳人电子有限公司”整理的，区区5页PDF，我另外Google了一份英文版的，顶，80多页，仔细一看，时序图居然有出入！转念一想，1602作为一种标准产品，一般的厂商只是兼容罢了，有多少出入还是正常的吧？不能全相信网上的Datasheet... 也从网上找了其他人写的1602驱程，51的、汇编的什么都来，有些的E使能脉冲居然是下降沿的，如此借鉴来借鉴去，折腾了两天。 最后还是被编译器“跹”了一回，比如把字符串写在发送函数的参数里就给我显示黑方块、乱码，又看了半天AVR的Flash空间、SRAM空间、EEPROM空间等的一大堆，最后才确定，是因为我使用之前《初尝Linux下的AVR单片机开发》里面的avr-objcopy -j .text参数，导致被放在.data段的字符串根本没有放到烧录文件内。 最后还有时序问题。一开始我使用了Busy Wait（读LCD的D7），认为以后就不用考虑命令时序了（LCD接受的命令有us级的一般命令ms级的两条清屏命令），结果还是乱的一团糟，最后往Busy Wait里面放了个死循环，发现程序根本都不绕进去，原来AVR芯片太快的，输出E信号后等不及LCD输出。 其他人写的驱动中，有些根本不考虑Busy标志的问题（干脆R/W接地），只要等候的时间足够，就可以保证写入的正常。在我最后写好的驱动中，我尝试把调用LCD_Busy_Wait的地方换成_delay_ms(5)，把整个LCD_Busy_Wait注释掉，这样工作起来是完全正常的，而且还省了36字节的程序，只是感觉上屏幕的反应就有那么一点的拖滞感。也可以把这个delay换成_delay_us(100)，这样没有拖滞感，但注意0x01这样的复位命令要注意要加个ms级的延时，但如果这样的延时语句多几条，程序在延时上膨胀的体积就远不止36字节了（别小看_delay_ms()，延时越久代码就越大），还不如用上Busy_Wait，这就需要应用在的来衡量了。]]></description>
			<content:encoded><![CDATA[<p>为1602ALCD屏幕实现的基本驱动功能，8位数据线，3位控制线，可自定义端口，可从LCD_Init函数设定工作方式，实现发送单字符和字符串的基本功能，带busy_wait。使用avr-gcc 编译。</p>
<p>代码下载：<a href="http://code.google.com/p/ptcoding/source/browse/trunk/AVR">http://code.google.com/p/ptcoding/source/browse/trunk/AVR</a></p>
<p>更新：SVN目录内还有串口通讯的模块，以及串口和LCD驱动结合起来的一个试验性程序</p>
<p>参考资料：<a href="http://cn.ic-on-line.cn/iol_lcd-1602a/pdfview/917106.htm" target="_blank">lcd1602a_398762.pdf（英文）</a> <a href="http://www.ouravr.com/download_file.jsp?FileName=app_1602B_lcd_using_sample_pdf.raramp;DownloadPath=./bbs/bbs_upload/download/app_1602B_lcd_using_sample_pdf.raramp;FileSize=363K" target="_blank">ourAVR</a> （注意两份资料的出入，前者更详细）</p>
<h4>开发手记：</h4>
<p>之前从天河赛格买了个1602的液晶屏，折腾了两天，终于让ATmega48驱动起来。</p>
<div id="attachment_240" class="wp-caption alignright" style="width: 266px"><img class="size-full wp-image-240" title="AVR-LCD" src="http://apt-blog.net/wp-content/uploads/2009/04/avr-lcd.jpg" alt="AVR-LCD" width="256" height="192" /><p class="wp-caption-text">闪着“PT from Mars”的LCD(手机照相太差了)</p></div>
<p>1602本来是一个挺简单的器件，8位数据线和3位控制线，其工作时序图初看起来挺复杂，但其实也就E端使能脉冲的事情，但是折腾下来，再一次验证了“简体中文”资料的不可靠，还有就是“这就是传说中的‘驱动程序’”。</p>
<p>首先我是从ourAVR网站提供的<a href="http://www.ouravr.com/app_1602B_lcd_using_sample.html" target="_blank">1602B液晶使用范例</a>提供的资料入手（1602A、B好像没太大区别），借鉴了人家用ICCAVR写的代码（虽然代码是我敲的，但是基本上还是抄的），当LCD上显示出第一个字母时，还挺兴奋的，然而，这只是刚刚开始……（才100多行代码，加上看资料个把小时什么都好了。）</p>
<p>接下来才是噩梦般的调试，要么给黑方块，要么乱码，不稳定，这次能显示，重启就不行……还是ourAVR那篇资料提醒了我，初始化工作做的不够，写个循环发20次初始化信号，果然稳定了……</p>
<p>奇怪阿，我明明按照Datasheet的数据来写的，怎么初始化不够呢？……说起1602的Datasheet，ourAVR那里提供了一份中文版，由“长沙太阳人电子有限公司”整理的，区区5页PDF，我另外Google了一份英文版的，顶，80多页，仔细一看，时序图居然有出入！转念一想，1602作为一种标准产品，一般的厂商只是兼容罢了，有多少出入还是正常的吧？不能全相信网上的Datasheet...</p>
<p>也从网上找了其他人写的1602驱程，51的、汇编的什么都来，有些的E使能脉冲居然是下降沿的，如此借鉴来借鉴去，折腾了两天。</p>
<p>最后还是被编译器“跹”了一回，比如把字符串写在发送函数的参数里就给我显示黑方块、乱码，又看了半天AVR的Flash空间、SRAM空间、EEPROM空间等的一大堆，最后才确定，是因为我使用之前<a href="http://apt-blog.net/archives/220.html" target="_blank">《初尝Linux下的AVR单片机开发》</a>里面的avr-objcopy -j .text参数，导致被放在.data段的字符串根本没有放到烧录文件内。</p>
<p>最后还有时序问题。一开始我使用了Busy Wait（读LCD的D7），认为以后就不用考虑命令时序了（LCD接受的命令有us级的一般命令ms级的两条清屏命令），结果还是乱的一团糟，最后往Busy Wait里面放了个死循环，发现程序根本都不绕进去，原来AVR芯片太快的，输出E信号后等不及LCD输出。</p>
<p>其他人写的驱动中，有些根本不考虑Busy标志的问题（干脆R/W接地），只要等候的时间足够，就可以保证写入的正常。在我最后写好的驱动中，我尝试把调用LCD_Busy_Wait的地方换成_delay_ms(5)，把整个LCD_Busy_Wait注释掉，这样工作起来是完全正常的，而且还省了36字节的程序，只是感觉上屏幕的反应就有那么一点的拖滞感。也<strong>可以把这个delay换成_delay_us(100)，这样没有拖滞感，但注意0x01这样的复位命令要注意要加个ms级的延时，但如果这样的延时语句多几条，程序在延时上膨胀的体积就远不止36字节了（别小看_delay_ms()，延时越久代码就越大），还不如用上Busy_Wait，这就需要应用在的来衡量了。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://apt-blog.net/1602_lcd_driver_under_avr_chip/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>初尝Linux下的AVR单片机开发</title>
		<link>http://apt-blog.net/developing_avr_under_linux</link>
		<comments>http://apt-blog.net/developing_avr_under_linux#comments</comments>
		<pubDate>Thu, 02 Apr 2009 08:49:36 +0000</pubDate>
		<dc:creator>PT</dc:creator>
				<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">http://apt-blog.net/archives/220.html</guid>
		<description><![CDATA[此前接触过AVR单片机，发现无论是书店里面的教材，还是网上一大堆的中文资料，无一例外都是说windows下使用WinAVR、ICCAVR之类的，Linux方面的简直只字不提，难道这就是传说中的中国国情？外国情况可很不一样，玩单片机的Geek一般都很哈Linux，做单片机开发的软件一应俱全，当然还是开源的。 昨天从淘宝重新买了条USB的下载线，回来一看是USBasp的设计，附送的光盘当然也是win下的驱动和说明了，忽略。 插上下载器，lsusb，认倒是认出来了，叫做VOIT，那怎么用呢？上网一搜，原来USBasp是德国人的设计http://www.fischl.de/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的源码： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #define F_CPU 1000000UL /* 1 MHz CPU clock */ &#160; #include &#60;util/delay.h&#62; #include &#60;avr/io.h&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>此前接触过AVR单片机，发现无论是书店里面的教材，还是网上一大堆的中文资料，无一例外都是说windows下使用WinAVR、ICCAVR之类的，Linux方面的简直只字不提，难道这就是传说中的中国国情？外国情况可很不一样，玩单片机的Geek一般都很哈Linux，做单片机开发的软件一应俱全，当然还是开源的。</p>
<p>昨天从淘宝重新买了条USB的下载线，回来一看是USBasp的设计，附送的光盘当然也是win下的驱动和说明了，忽略。</p>
<p>插上下载器，lsusb，认倒是认出来了，叫做VOIT，那怎么用呢？上网一搜，原来USBasp是德国人的设计<a target="_blank" href="http://www.fischl.de/usbasp/">http://www.fischl.de/usbasp/</a>，GPL的，其中提到AVRDUDE支持USBasp，当然也有源码下载。不过我用的是Ubuntu，发挥超级牛力的时候到了：sudo apt-get install avrdude，恩，几秒钟搞定，让他们去编译吧！</p>
<p>Linux下做单片机开发当然首选GCC，就如这些<a target="_blank" href="http://paul.graysonfamily.org/thoughts/avrlinux/">英文教程</a>说的，下载源码？No，No，APT has Super Cow Powers，继续sudo apt-get install gcc-avr binutils-avr avr-libc</p>
<p>几分钟装完，很好，估计那些下载源码回来编译的同学要去喝两个小时茶才能用了。</p>
<p>万事俱全，先写个单片机的HelloWorld，借用micahcarrick的源码：</p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define F_CPU 1000000UL  /* 1 MHz CPU clock */</span>
&nbsp;
<span style="color: #339933;">#include &lt;util/delay.h&gt;</span>
<span style="color: #339933;">#include &lt;avr/io.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span>
main <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        DDRC <span style="color: #339933;">=</span> _BV <span style="color: #009900;">&#40;</span>PC0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>               <span style="color: #808080; font-style: italic;">/* PC0 is digital output */</span>
&nbsp;
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>                       <span style="color: #808080; font-style: italic;">/* loop forever */</span>
        <span style="color: #009900;">&#123;</span>
                <span style="color: #808080; font-style: italic;">/* set PC0 on PORTC (digital high) and delay for 500mS */</span>
                PORTC <span style="color: #339933;">&amp;=</span> ~_BV<span style="color: #009900;">&#40;</span>PC0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                _delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #808080; font-style: italic;">/*  PC0 on PORTC (digital 0) and delay for 500mS */</span>
                PORTC <span style="color: #339933;">|=</span> _BV<span style="color: #009900;">&#40;</span>PC0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                _delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>
<p>....保存为toggle_led.c</p>
<p>命令时间：</p>
<blockquote>
<pre>avr-gcc -mmcu=atmega48 -Wall -Os -o toggle_led.o toggle_led.c</pre>
</blockquote>
<p>是不是似曾相识？平时用gcc就这么用的，这里除了把gcc改成avr-gcc，没多大区别。-mmcu定义了目标CPU的类型，我用的是atmega48；-Os是优化选项，减少程序的大小。这就是传说中的交叉编译。</p>
<p>接着把目标代码翻译成可以烧录到芯片上的hex文件：</p>
<blockquote>
<pre>avr-objcopy -j .text -j .data -O ihex toggle_led.o toggle_led.hex</pre>
</blockquote>
<p>avr-objcopy的-j参数限定转换的程序段，-O设定hex的输出格式，ihex即Intel Hex file</p>
<p>[Update: 本例子中，-j .data这个选项没作用，因为.data区根本没有数据；.data是存放初始化数组、字符串等数据的段，如果程序用到了，记得加上]</p>
<p>搞定，开烧：</p>
<blockquote>
<pre>sudo avrdude -p m48 -c usbasp -e -U flash:w:toggle_led.hex</pre>
</blockquote>
<p>因为直接读写USB接口，所以不给权限的话会提示找不到编程器，当然配置USB权限最好，这里暂时用sudo。avrdude的-p指定目标CPU，-c指定下载器，如果不知道所用的下载器是什么型号，敲avrdude -c会列出所有支持的下载器型号及其描述。-e即烧录前清空，-U参数指定刷写类型以及刷写文件。</p>
<p>[Update：可参考virtualbox使用usb的配置，把当前用户加入usbfs组，就可以直接使用avrdude了]</p>
<p>回车后下载器的指示灯闪了下，跟着单片机上的小灯开始闪烁，Hi, Hello World.</p>
<p>当然问题不是完全没有，我用avrdude下载完后默认的校验老是无法通过，说读取错误，只好加个-V来跳过校验。可能跟个别机器有关。</p>
<p>当然实际开发很少这样敲一大堆命令来编译程序，一般都用Make搞定。</p>
<p>对比起Win下满是GUI的程序，我第一次接触WinAVR都搞了半天，如何如何配置一个Project，哇那个属性窗口真让人眼花缭乱，使用gcc来开发，则可以循序渐进，未了解到的参数就不用，简洁，明了，但不失其功能强大。</p>
<p>
资源：</p>
<ul>
<li>USBasp主页：<a target="_blank" href="http://www.fischl.de/usbasp/">http://www.fischl.de/usbasp/</a></li>
<li>AVR-GCC Programming Guide：<a target="_blank" href="http://electrons.psychogenic.com/modules/arms/art/3/AVRGCCProgrammingGuide.php#asmwithtavrasm">http://electrons.psychogenic.com/modules/arms/art/3/AVRGCCProgrammingGuide.php</a></li>
<li>Linux Atmel AVR Tutorial：<a target="_blank" href="http://paul.graysonfamily.org/thoughts/avrlinux/">http://paul.graysonfamily.org/thoughts/avrlinux/</a></li>
<li>Micah Carrick -- AVR（非常推荐，但是需要翻墙） ： <a href="http://www.micahcarrick.com/category/avr-microcontrollers" target="_blank">http://www.micahcarrick.com/category/avr-microcontrollers</a></li>
<li>AVR Libc User ManualLib Reference： <a href="http://www.nongnu.org/avr-libc/user-manual/index.html" target="_blank">http://www.nongnu.org/avr-libc/user-manual/index.html</a></p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://apt-blog.net/developing_avr_under_linux/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

