永远的白身 » 日志 » 有必要整理一下了
有必要整理一下了
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口的通讯。等各个模块集成在一起再整理吧^_^
去年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口的通讯。等各个模块集成在一起再整理吧^_^
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
