热度 11
2013-10-18 10:12
2641 次阅读|
4 个评论
大家好:我好久没回来写文章了,去了国外进修了2年,感觉沈阳变化好大 我从一个嵌入式的菜鸟渐渐变成一个国际嵌入式控制系统公司的开发主力,感受很深,我其实是一个很笨的人,做软件可以说是我唯一的兴趣,哈哈。希望大家以后都热爱这个行业,在技术研发上超英赶美。 首先,嵌入式什么是最难实现的?我个人认为是通信,通信看不到,没不见,也没有好的介质可以验证通信是否正常,所以,在处理通信协议的问题上,一定要先细化在明确,最后在发布,硬件上的电磁兼容问题,信号线,地线的处理学问很大,还有就是不要忽略滤波器。 目前我做的项目中我就负责通信的协议编写,用到了strstr函数,这个是我们中国人不总用的C语言固有函数,在C语言标准库中有这个函数的定义: 从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。 包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 返回值:返回该位置的 指针 ,如找不到,返回空指针。 用这个函数可以检索你要用的字符串,我们以前做通信发送/接收的数据都是简单的16进制数据,很多情况下如果设置的接收缓冲区过大,那么数据就会出现偏差,有时候接收到的数据就会窜数,不知道大家遇到没有,用这个函数可以有效的避免这个问题,因为可以发送一窜字符串来代替数字,这样无论哪个字符先到单片机都会完整的接收到这个命令 再用strncmp函数进行比较字符串的运算,就可以安全的接到数据 函数 名: strncmp 功 能: 串比较 用 法: int strncmp(char *str1, char *str2, int maxlen); 说明:此函数功能即比较 字符 串str1和str2的前maxlen个字符。如果前maxlen 字节 完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1 与str2 不等,则返回(str1 -str2 ) 。 具体应用: 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 (ptr0) 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 (ptr0) printf ( "buffer 2 is less than buffer 3\n" ); return (0); } 当然,觉得通信好坏的要素还有好多,我建议能用操作系统的绝对不裸奔, 能用NB晶振的就不用便宜的 PCB能走4层就不走2层 还要算好时间, 各个任务的调度也要精确, 我个人比较喜欢抢占方式的内核处理通信,这样比较安全 现在就谈这些吧