注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

The Bloom of Youth

本博客已搬家至http://kuangqi.me

 
 
 

日志

 
 

电子积木开发手记7  

2013-02-25 00:03:37|  分类: 软硬兼施 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
汇总一下最近遇到的挠头的问题

我要先吐个槽!!!我真的觉得我够到了我的智商上限。。。我已经很努力的思考一些问题了,但是一定要经过足够长的时间,我才能找到正确的思路

1. 代码尺寸问题
这个问题不再详谈了,已经写了一篇两三千字的文章了。那段时间实在是郁闷。。。动不动代码尺寸就爆了。。。Hello world就要90KB。。。完全不知道如何下手。。。一天晚上跟MM聊天,突然迸发出一个灵感,逆向思维。删代码,直到删到代码尺寸降下来为止。这个思路很有效,后来发现那次代码尺寸暴增是由纯虚函数导致的。导致代码膨胀的原因还有很多,我基本都碰上了,详情去看《如何在嵌入式C++开发中缩减代码尺寸》这篇文章吧~完全是一部血泪史。。。
2. EEPROM驱动,一个调了一天的问题。。。结果是因为时钟线的频率太高了,超过了EEPROM芯片的最高速度。。。随手加了个循环浪费时间,频率降下来了,驱动就通了。很庆幸我能按照Datasheet一次性的时序逻辑写对,否则调试起来就真蛋疼了。。。
3. USB虚拟串口移植,又是一部血泪史。没得说,就是看官方的example代码。开始想偷懒,打算把程序拿过来随便改改整合进去,完全行不通,官方的文档又很学术,没啥具体的东西。只能看代码。。。有几个细节记录一下,首先就是拙计的英语。。。有个词组叫correct transfer,我以为这是一种特殊的传输,就像Control transfer、Bulk transfer等等这些词组,都是USB标准里规定的一种传输方式,有特定的工作模式。可是我翻遍了USB标注也没找到到底什么叫correct transfer。。。我那个郁闷啊。。。由于对correct transfer的理解错误,还导致了很多bug。。。终于,有一天,我意识到我SB了。。。correct transfer就是字面意思,就是正确传输。。。就说这次传输数据没发生错误,对方也收到了,这就叫正确传输了,correct transfer。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
再有就是一个芯片或者USB库的一个bug了(不知道算不算bug。。。),就是EPx_OUT_Callback会收到长度为0的包。。。如果这时你闭着眼把Endpoint置为NAK状态,你就别想回来了。。。因为处理数据的函数无事可做,就不会重新将Endpoint置为ACK,当然又不会有新的数据发来,于是就歇菜了。。。解决方法,只能自己判断一下,长度是0的话就不要置为NAK。。。哦,好像系统会自动给你置为NAK,你必须手动置为VALID才行!!!我真的很幸运,第一个思路就是怀疑是数据包的长度出了问题,否则按照程序员“一定是我哪里搞错了”的思路,我无论如何也不会想到把断点加到Endpoint的callback里。。。
4. bootloader。。。。。。血泪史啊!!!!
我觉得核心库做的差不多了,通过虚拟串口复位也加上了,打算加上bootloader,走一下流程了。结果,傻逼了!!!
首先是Maple的bootloader太2B了,编译居然不能开优化!!!一个-O1的优化就会导致其不能运行。。。估计是哪儿该加volatile的地方没加,被优化坏了。。。决定先不管bootloader,先用着O0,改天有空再研究优化的问题。
接着就是最2B的事件了。。。加上bootloader之后,程序居然不能运行了!!!没有bootloader的时候好好的啊~连接脚本已经把起始地址改成相应的bootloader跳转的地址了,后来发现是中断向量表的位置没有在代码中设置。。。但设置了之后,程序还是不对劲。程序就是最简单的闪烁LED,但是LED闪烁64次后程序就会挂掉。。。我至今都非常不明白我是怎么发现是64次的。。。总之我神奇的发现了这个神气的现象,但我不能解释。。。
64是个比较特殊的数字,很多常量都设置成了64. 后来随手把串口rx队列长度改成了32,发现闪烁32次后停机。我就觉得闹鬼了,闪烁led是死循环,跟串口队列长度有毛线关系啊!终于,,,经过几个小时的思考和艰苦查找,我发现!!!闪烁的LED居然就是串口RX的指示灯!!!于是闪一下,串口就收到一个数据,数据就被放到队列里。。。然后64下之后,队列满了,程序就挂了。。。。。实在是太!二!了!!!!
  评论这张
 
阅读(794)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018