原创 【博客大赛】通信的软件设计-strstr函数

2013-10-18 10:12 3157 11 15 分类: MCU/ 嵌入式

大家好:我好久没回来写文章了,去了国外进修了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[n]与str2[n]不等,则返回(str1[n]-str2[n])[1]
 
具体应用:
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);
}
当然,觉得通信好坏的要素还有好多,我建议能用操作系统的绝对不裸奔,
能用NB晶振的就不用便宜的
PCB能走4层就不走2层
还要算好时间,
各个任务的调度也要精确,
我个人比较喜欢抢占方式的内核处理通信,这样比较安全
现在就谈这些吧
 

 

 

 

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

DiracFatCat 2013-12-27 16:45

好东西,已加入俺的STM库。

用户523683 2013-10-23 10:51

恩,其实我们中国人的数学能力全世界是公认的,大家要有信心,只是现在国情决定了我们比欧美要起步晚些,但是现在日本,美国,很多做软件的工程师都是中国人,我就是其中的一个,当然通信方面的软件要比我说的复杂很多,我只是抛砖引玉说明下strstr函数,鉴于我在的部门保密比较严格,我不敢透露太多国外的加密,协议,软校验,软处理的方法,只能和大家简单的交流了

用户448719 2013-10-22 09:26

如果只是这样的话那么中国在技术研发上已经“超英赶美”。

用户403664 2013-10-21 09:38

怎么文章里有旧链接额?
相关推荐阅读
用户523683 2013-12-31 15:39
STM32基础控制------GPIO
继续上次的话题,今天主要还是用到了STM32的GPIO控制功能,把我自己配件好的CODE 上传下,和大家分享下我对STM32编程的体验,以后会陆陆续续的上传源代码。 希望大家多多交流 ...
用户523683 2013-12-30 16:11
基于AD9837的STM32控制触摸屏方式信号发生器
上次在微博中说要设计一个基于AD9837的信号发生器,现在这个东东的PCB我已经搞定了,而且还能ZIGBEE远传,CAN总线接口,串行接口,USB接口,SPI接口,PWM接口,IIC接口的应用,而...
用户523683 2013-10-20 21:54
ZIGBEE+TFT 7寸GUI 显示控制器
自己做的 ZIGBEE 无线通信控制系统,还想做 4到20MA标准输出信号的无线传感器,和便携信号发生器和校准设备。用的是STM32  7寸触摸屏 UCOS-II 和UCGUI ...
我要评论
4
11
关闭 站长推荐上一条 /3 下一条