http://blog.sina.com.cn/xdlovecanon[订阅]
个人资料
音乐播放器
图片幻灯
Friends
婧婧

厨艺呈指数曲线增长

晓阳

给俺在德国好好混!

沈小牛

口头禅——烦死了!

娇娇

逛街逛

访客
读取中...
博文

    前天总算是把板子画完了。博创那块44B0的板子小师弟最近一直在用,说是下载程序不正常了。具体表现为:从十几天之前起,有时候就下不进程序。拔下来放一段时间就又可以下。他怀疑是哪儿接触不良或者虚焊了,把CPU,FLASH,SDRAM通通加焊了一遍,还是没用,最近就完全没反应了。我的PCB也完成了,就决定查查原因。


    仿真器是博创的UArmJtag,代理软件是UArmJtag2.0。我通过JTAG向BOOT FLASH里面烧BOOTLOADER,UArmJtag2.0显示无异常。但是下载完成后通过UArmJtag2.0读取FLASH中的数据,为全F,也就是说根本就没烧进去。一直就觉得UArmJtag2.0这个代理软件做得有些不太完善,交互性不好。怀疑会不会是这块BOOT FLASH出问题了。于是用ADS+UArmJtag2.0进行仿真,在SDRAM中调试。加载完成后通过AXD查看反汇编代码,根本对不上。也就是说在SDRAM中程序也没有正常下载。总不可能FLASH和SDRAM都同时坏了吧!于是就怀疑会不会是JTAG有问题。换了个仿真器,还是不行。


    继续找原因。网上有很多人有类似的问题,大家众说纷纭,但都没有得出结论。


    测了下44B0

关于OPENTCP的一处小bug(2009-04-24 13:37)
    OPENTCP的整个移植+调试终于完成了,ARP、ICMP、TCP、UDP、HTTP几个常见的协议都没什么问题了,并且也实现了一个简单的网口到串口转换。
 
    所谓“山重水复疑无路,柳暗花明又一村”,我可是深刻地体会到了。把OPENTCP整个搬过来,再把和44B0相关的底层驱动写了之后就扔了三个多月,从上周开始调,看那一堆乱七八糟的问题头都疼,折腾了好几天没什么头绪。再捣腾了两天终于可以PING通了,ARP包、ICMP包收发正常之后,UDP,HTTP,TCP也相继很快都解决了!
 
    不过在最后调试TCP的客户端时一直不通。找了半天原因,最终发现是因为Tcp.c中的tcp_connect函数中有点小bug:
    tcp_connect函数的最后三句是:
    tcp_sendcontrol(sochandle);
   tcp_newstate(soc, TCP_STATE_SYN_SENT);
   
    今天早上,44B0板子终于可以PING通了,我长出一口气——折腾了这么久,总算看到进展了!

    从去年12月份把OPENTCP整个搬过来之后,就大概把驱动的部分重新写了下。因为接下来的三个月是AMP最忙的一段时间,几乎天天加班,所以就没再去实验室。板子虽然在宿舍里,可是也懒得去调,一有时间我都用来补觉了。过了三个多月,板子上落了一层灰。上周回来之后,就又重新拾起来了。打算把已经移植好的协议栈好好调一下。这不调则已,一开始调就发现什么乱七八糟的问题都有,当然最明显的就是首先都PING不通。

    因为OPENTCP协议栈里涉及到定时器池的初始化和分配,硬件上我是用44B0的定时器3来实现一个10ms的中断。刚一开始在AXD环境下单步调试,定时器的中断都进不了。开始怀疑是定时器的寄存器设置的问题,对着44B0的datasheet仔细检查了一遍定时器的初始化代码,发现没有不对的地方呀,并且发现在AXD下单步调试的话代码老是跑飞,所以老进不了定时器的中断入口。于是就在定时器中断服务子程序里面加了一个串口输出的操作,然后不用AXD,直接让板子脱机运行,再用超级终端观察显示结果,果然
    之前介绍了使用ARM JTAG仿真器将映像文件加载到ARM处理器内部SRAM中进行程序调试的方法,而在实际操作中,将映像文件加载到外部SDRAM中进行调试的方式更为常见。
 
    要把映像文件加载到SDRAM中,除了要正确设置好映像文件的RO段基地址外(对于一个加载时域和运行时域相同的映像文件来说,RO段基地址实际上就是该映像文件
华为半年(2009-04-12 16:20)

    前天,我半年的实习期终于还是结束了。下班后在大家的告别声中离开了公司。从去年十月六日入部门一直到昨天离开,我在华为经历了整整半年零四天。在这半年零四天里,收获了许多,这许多许多只能用“一言难尽”来形容。

 

    过了十几年的学生生活,终于第一次体验到了工作的感觉。在学校,包括上大学前,本科一直到研究生实习前,我都是属于“好学生”的范围,感觉自己还是有点小聪明的,本科时也没有那么疯狂地上自习什么的,照样也能拿着奖学金,最后保研。并且从大三起跟着老赵做点电子设计之类的东西,动手能力还是能说得过去的。但就是感觉缺少了点什么,渐渐地我明白了,我缺少的就是社会经验和经历。

 

    去年九月份华为来学校招实习生的时候,因为知道老赵不会同意,当时只是抱着积累经验的想法去听了宣讲会,填了简历又参加了面试,可是面试通过后,我的态度开始变得坚决,急切地想要体验一下工作到底是什么样的。从面试通过后花了将近二十多天的时间终于说服了老赵,同意我去实习六个月。

 

    2008年9月29号,我们去报了到,搞

《类似爱情》(2009-04-03 23:12)

    最近没什么好听的歌,只有娇娇突然发掘出来一首萧亚轩的《类似爱情》,不是特别喜欢萧亚轩的歌,但是有一首例外,就是她的《我要的世界》,这算是第二个例外了,挺不错的!

歌词:
 我站在屋顶 黄昏的光影
 我听见爱情光临的声音
 微妙的反应 忽然想起你
 这默契 感觉像是一个谜
 心里有点急 也有点生气
 你不要放弃行不行

无题(2009-03-16 22:28)

    明天要中期答辩了——虽然对于我来说,不管中期答辩结果如何,都得回学校,不过还是挺想表现好点!

    卡农保佑我好好发挥哦!……

三八节(2009-03-08 00:50)
    前天收到了公司的三八节礼物:一瓶沐浴露、一块香皂、一把太阳伞,一束花(几朵红色康乃馨中间夹了一支粉色的百合)——平生第一次收到花,感觉不错,嘿嘿!
    一大早去打开NOTES就收到师傅发的邮件,祝“节日快乐”,我还懵了半天,问刘辰问小强今天是什么节日,最后一想:哦,今天是我生日!接下来又收到很多人发的邮件,包括很多都没有听过名字的,我还很奇怪,怎么这么多人都知道我的生日,最后总算是明白过来了。
    总之这个三八节过得还是不错!最后花给石苗带回家了,下班后和石苗、李莹我们三个破例没有挤29路,就扛着礼物走回去了。
    唉,马上就三月底了,说不定到时候我就得滚蛋回学校了,不知道下一个三八节会怎么过?……

一个由c/C++编译的程序占用的内存分为以下几个部分


一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap)—— 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放 

4、文字常量区  — 常量字符串就是放在这里的。 程序结束后由系统释放。

5、程序代码区 — 存放函数体的二进制代码。 

6、例子程序,这是一个前辈写的,非常详细:
//main.cpp
#include 'stdlib.h'
#include 'stdio.h' 
int =&

1、SDRAM的地址线

 

    在我们一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址线,然后可以算出寻址空间,比如有11根地址线,那寻址空间就是2的11次方减1。但是SDRAM是分列地址和行地址的,行、列地址线是复用的,所以有时候我们看到说寻址空间有多大多大,但是看看地址线怎么就那么几根啊,呵呵。SDRAM一般还有2根BANK的线,分成4个BANK,在有的处理器的SDRAM控制模块中,这两根线可能映射到地址线的某两根去。一般芯片常按照以下方式写芯片的配置,比如4Meg x 4 x 16,那这个芯片就是256Mbits。其中16指数据线是16根,中间一个4是只分4个BANK,每个BANK是4Meg。

 

2、SDRAM的初始化

 

SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下

A:   precharge

B:   auto-refresh

C:   Load Mode Register

D:  Normal Read/Write

 

    即一旦VDD和VDDQ同时上电和时钟CLK稳定后,在发送COMMAND INHIBIT或者NOP命令之前,SDRAM需要100