如何制定通信协议?

格式:

起始位 +地址位+功能位+数据位 + 检验 + 结束位

说明:

  1. 起始位和结束位是用来控制同步的,读的时候先判断起始位和结束位是否正常,再对中间的进行校验;
  2. 由于一些设备某个端口下挂载的不止一个设备,故需要使用地址位来区别多个设备;
  3. 功能位针对不同的操作(如查询,操作等);
  4. 保证数据的正确性用得多的是CRC校验;
  5. 在判断数据全部符合要求的时候要先发应答帧,然后再去处理数据,这样实时性会高一点,同时也有时间去做buffer的管理。

协议的使用:
发送端发送数据加上源地址和目标地址,接收端接收数据,先读数据类型,数据帧?
判断目标地址,不是自己的地址,丢弃,继续监听接收数据;是自己的地址,则判断数据长度,不正确,发送应答帧,要求对方重发;数据长度正确,计算CRC,与帧尾的CRC不相同,发送应答帧,要求对方重发;相同,呵呵,去处理数据吧!别忘了全部判断正确后发送一个应答帧个发送方,告送它接收正确。应答标志你可以自己规定,如0x01是接收应答成功、0x02是数据接收CRC错误等等,如要求可靠性、还有必要的速度,你还可以使用应答标志来开设多几个缓存区,用来做流的管理。CRC可以查表,MCU算CRC太浪费时间了。

摘自:http://www.yourdelphi.com/topic_181888_c605.htm

使用masm编译汇编语言

最近又折腾起了汇编语言,看的教材是王爽的《汇编语言(第二版)》,感觉很不错,看到了第4章,遇到了一点问题,不知道如何使用masm编译汇编语言程序,网上查了下,找到了如下方法,摘录于此,方便今后查阅。

  1. 选用Windows XP或Win7操作系统;
  2. 下载「MASM32」开发包;
  3. 双击开发包文件名,按照提示安装开发包,假设安装目录为:“C:masm32”;
  4. 在D盘(其他盘也行)建立一个存放你写的源代码的目录,假设目录的路径为“D:”;
  5. 在D目录下用写字本新建一个文件,取名为:s.bat,文件用来设置环境变量,内容如下:
SET PATH=C:masm32in
SET INCLUDE=C:masm32include
SET LIB=C:masm32lib
  1. 打开控制台窗口,将当前目录切换到你的源文件所在目录“D:”;
  2. 在控制台窗口输入“s.bat”,然后敲回车键执行,这一步用来配置你的编译环境变量;
  3. 在控制台窗口输入ml,然后敲回车键执行,看看窗口是不是有了执行ml的信息,如果有,说明配置对了,如果说文件没找到,那就是环境变量配置的不对;
  4. 将你在一楼提供的源文件复制到“D:”目录下,假设名称为1.asm,示例如下:
assume cs:codesg

codesg segment

start: mov ax,0123H
       mov bx,0456H
       add ax,bx
       add ax,ax

       mov ax,4c00H
       int 21H

codesg ends

end
  1. 在控制台输入ml /Bllink16 /c 1.asm进行编译(无链接),该命令执行完成后会在当前目录下生成1.obj目标文件;
    输入ml /Bllink16 1.obj命令进行链接,也可一步执行:
ml /Bllink16 1.asm

然后敲回车键执行,如果源代码没有错误,会在“D:”目录下生成1.exe文件

  1. 在命令行窗口输入:1,然后敲回车键执行,查看你编制的程序运行情况。

(可惜你的1.asm程序没有输出信息,所以你什么也看不到)

摘自:http://bbs.csdn.net/topics/380194442

开源代码集合

收集一些个人感觉比较好用的开源项目。

dlib

__项目地址__:http://dlib.net/
__简要介绍__:dlib是一个使用现代C++技术编写的跨平台的通用库
__主要特点__:

  1. 完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加;
  2. 可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统;
  3. 线程支持:提供简单的可移植的线程API;
  4. 网络支持:提供简单的可移植的Socket API和一个简单的Http服务器;
  5. 图形用户界面:提供线程安全的GUI API;
  6. 数值算法:矩阵、大整数、随机数运算等;
  7. 机器学习算法;
  8. 图形模型算法;
  9. 图像处理:支持读写Windows BMP文件,不同类型色彩转换;
  10. 数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法;
  11. 测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持;
  12. 一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类。

VLFeat

__项目地址__:http://www.vlfeat.org/
__简要介绍__:一个开源的计算机视觉库,实现了SIFT、MSER、k-means、hierarchical k-means、agglomerative information bottleneck、quick shift等算法。由C语言编写,提供MATLAB接口,文档详细,支持跨平台

利用openssl加密解密tar包

将文件夹vps_20120109打成tar包vps_20120109.tar.gz并加密,密码是password

加密tar包并压缩

tar czf – vps_20120109 | openssl des3 -salt -k password | dd of=vps_20120109.tar.gz

解密tar包并且解压缩

dd if=vps_20120109.tar.gz | openssl des3 -d -k password -salt | tar xzf -

其中-k password可以不使用,这样执行完命令后会提示你输入,加上 -k参数可运用在程序中,这样可自动设置密码。

本文摘自:http://m114.org/encryption-and-decryption-using-openssl