查看: 925|回复: 0

【STM32F4DIS-WIFI】4.程序代码分析(二)

[复制链接]
  • TA的每日心情
    奋斗
    2017-7-17 13:49
  • 签到天数: 367 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-9-9 08:58:35 | 显示全部楼层 |阅读模式
    分享到:
    现在我们来谈谈代码的具体实现细节来看看……
    从上一节遇到的控制函数Wifion()开始剖析问题。

        果不其然,它是将一个4字节的buf数组传递出去,buf[0]类似为数据包的功能字,通过它来解析不同的数据;buf[1]应该是包的序号,笔者也不知道有什么作用,可能是检测是否漏包了吧;buf[2]、buf[3]的确定字符也不知道怎么回事。笔者试图在网络上找到更多地关于STM32F4DIS-WIFI的详细介绍资料,但是始终没有找到SNIC通信协议格式的内容,所以只能试图从理解代码的角度去理解其中一二。
    但是,难道就这么简单吗

    其实,在传输之前他还有一个打包过程,在函数no_ESC_transmit()中实现,它有专门的起止符号(SOM char和EOM char),有校验和等。当然,有计算机通信知识的读者会有疑问,如果数据包内传输的数据(包长度,校验和等)与起止符号冲突会怎样,所以它也会引入一个类似的转义字符ESC char,加在冲突字符前面,以解决这个问题。

    打包过后,它就会利用串口传递给SN8200模块,下图可以看到,数据是接收到结束符号EOM char或者充满发送数组大小4096字节才进行发送的哈。

    其他的控制命令与Wifion()函数大同小异,在后面的工作中,我们就会一步一步的屏蔽底层的具体代码实现,只关注于它的上层功能实现就行了。
    从SN8200传回的数据包的解包过程大致与上面过程相反,再次不再赘述。
    从上两节内容可以看出,代码内容与具体硬件联系紧密的是串口,都是进行的字符处理,与具体平台无关,所以后面笔者会尝试把代码移植到其他平台上。
    大家可能觉得我上面写了好多废话哈,水平有限,敬请谅解!
    笔者阅读过机智云Gokit的Gagent协议的相关实现代码,发现其协议也和这个类似,C语言实现,确实没有太多神秘,只不过规模和代码量比这个大些罢了,笔者认为稳扎稳打,读好每一个程序,才能为后面的移植工作做好准备。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 22:43 , Processed in 0.117316 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.