大家好:我好久没回来写文章了,去了国外进修了2年,感觉沈阳变化好大
我从一个嵌入式的菜鸟渐渐变成一个国际嵌入式控制系统公司的开发主力,感受很深,我其实是一个很笨的人,做软件可以说是我唯一的兴趣,哈哈。希望大家以后都热爱这个行业,在技术研发上超英赶美。
首先,嵌入式什么是最难实现的?我个人认为是通信,通信看不到,没不见,也没有好的介质可以验证通信是否正常,所以,在处理通信协议的问题上,一定要先细化在明确,最后在发布,硬件上的电磁兼容问题,信号线,地线的处理学问很大,还有就是不要忽略滤波器。
目前我做的项目中我就负责通信的协议编写,用到了strstr函数,这个是我们中国人不总用的C语言固有函数,在C语言标准库中有这个函数的定义:
用这个函数可以检索你要用的字符串,我们以前做通信发送/接收的数据都是简单的16进制数据,很多情况下如果设置的接收缓冲区过大,那么数据就会出现偏差,有时候接收到的数据就会窜数,不知道大家遇到没有,用这个函数可以有效的避免这个问题,因为可以发送一窜字符串来代替数字,这样无论哪个字符先到单片机都会完整的接收到这个命令
再用strncmp函数进行比较字符串的运算,就可以安全的接到数据
char * strstr ( const char *s1, const char *s2) { int n; if (*s2) { while (*s1) { for (n=0; *(s1 + n) == *(s2 + n); n++) { if (!*(s2 + n + 1)) return ( char *)s1; } s1++; } return NULL; } else return ( char *)s1; } |
#include #include int main( void ) { char *buf1 = "aaabbb" , *buf2 = "bbbccc" , *buf3 = "ccc" ; int ptr; ptr = strncmp (buf2,buf1,3); if (ptr > 0) printf ( "buffer 2 is greater than buffer 1\n" ); else if (ptr<0) printf ( "buffer 2 is less than buffer 1\n" ); ptr = strncmp (buf2,buf3,3); if (ptr > 0) printf ( "buffer 2 is greater than buffer 3\n" ); else if (ptr<0) printf ( "buffer 2 is less than buffer 3\n" ); return (0); } |
DiracFatCat 2013-12-27 16:45
用户523683 2013-10-23 10:51
用户448719 2013-10-22 09:26
用户403664 2013-10-21 09:38