有必要整理一下了

xiaozhang 发表于 2008-03-12 21:32:24

 好久没有更新BLOG了,有点懒了^_^。既然这样,就来写一下自己的工作情况吧。
去年7月来单位。闲了2个月后,开始做项目了。是用C做51方面的开发,实现调制解调器的固件下载及配置的功能。把POWERPC上的框架移植到了51体系上来,在添加了SPi功能(固件放在外接FLASH中)就OK了。调试的时候遇到一堆问题。没有仿真器,我就用串口通过FLASH MON51方法来调试,它默认的波特率是9600(不初始话串口),用起来太慢了,索性把串口初始话到115200,可以用!快多了。
这种方法也有一些缺点,每次想重新调试时,必须重新把配置程序烧到51指定地址上。我遇到最麻烦的就是单步调试时,用结构指针传递参数,指针地址经常出错。然而把程序烧进去确可以运行。后来小心分配那几K内存,为每个参数指定内存类型 ,试了很久,终于单步不会错了。具体原因,没搞懂。。。
延时在程序中也是比较重要的。刚开始程序调完了,下载不到200K的固件要10多分钟(心理汗啊),问题就出在延时函数上面,我开始用的是FOR循环来延时,改为用几个NOP后,下载变得只要1分钟左右。又换了高频的晶振,又缩短了三分之一。
   最近又在FREERTOS+UIP的基础上做了个SNTP客户端,本来想用UCOS+LWIP的,可是调了一个星期连WEB服务器都没搞通,郁闷的。UIP的UDP功能还不完善。没有校验和。它的接收跟发送数据都放在一起(UIP_BUF),还不知道会不会影响整个软件的性能。其实进行UDP链接时,UIP_SEND 以及UIP_UDP_SEND都可以用来发送数据(UIP参考手册说UIP_SEND 用于TCP链接),虽然前一个用UIP_SAPPDATA,而后一个用UIP_APPDATA指针,但他们都是指向UIP_BUF的同一处的。

要注意一个很简单的问题,就是发送和接受数据最好用判断语句隔离开来,因为发送和接受不是一起被执行的,如下面,
udp_appcall(){
if(!uip_newdata()){
send_data();}
if(uip_newdata()){
do _something();
}
}

发送完后,可能暂时uip_newdata=0,下次发现有数据时,调用UDP_APPCALL时,又一次调用了send_data,这样UIP_BUF中接收的数据就会被覆盖。所以应该在前也+个判断语句,如:
udp_appcall(){
if(!uip_newdata()){
send_data();}
if(uip_newdata()){
do _something();
}
}

现在正在做ARM SPI口的通讯。等各个模块集成在一起再整理吧^_^
关键词(Tag): 调试 arm sntp 8051 uip


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

  • 2008-03-16 14:40:03

    同志 你在说什么 都学了这么东西了 不错

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定