2018-12-29 20:55
⁄ 工业·编程
⁄ 共 548字
由于在linux中,内核空间和用户空间的内存是不能之间互相访问的,所以需要借助上面2个函数完成数据传输。
copy_to_user:从内核空间复制数据到用户空间
copy_from_user:从用户空间复制数据到内核空间。
在进行驱动相关程序设计时,经常会用到这两个函数,因为底层驱动显然是内核空间,调用驱动的是用户空间。
具体函数模型解释如下:
unsigned long copy_to_user(void __user *to, const void *from, u...
linux编程阅读全文
2018-12-27 20:10
⁄ 工业·编程
⁄ 共 1217字
一、sizeof
sizeof(...)是运算符,而不是一个函数。
sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
实际上,用size...
c++, 区别阅读全文
2018-12-25 19:59
⁄ 工业·编程
⁄ 共 1295字
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于我们日常的分析有用的就是前面的五个字段。
它们的含义是:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,
如果只是单个的一个SYN,它表示的只是建立连接。
TCP的几次握手就是...
TCP, 网络协议阅读全文
2018-12-24 19:55
⁄ 工业·编程
⁄ 共 2566字
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。
list的类模板声明为
template<class T, class Allocator=allocator<T>>class list;
与vector相同,list中的元素可以使任意型别的T,必须具备可设置和可复制两个属性,包括int、double、string以及结构体或其他自定义的类型。
与vector的不同有如下几点:
1、list不支持随机读取
2、list的插入与删除操作非常...
stl阅读全文
2018-12-22 19:50
⁄ 工业·编程
⁄ 共 1896字
1 基本操作
(1)头文件#include<vector>.
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插...
stl, Vector阅读全文
2018-12-20 19:47
⁄ 工业·编程
⁄ 共 523字
粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程)
1 发送端需要等缓冲区满才发送出去,造成粘包
2 接收方不及时接收缓冲区的包,造成多个包接收
解决办法:
为了避免粘包现象,可采取以下几种措施。
一是对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满;
...
TCP阅读全文
2018-12-17 19:43
⁄ 工业·编程
⁄ 共 4679字
一、Makefile的规则
在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。
target ... : prerequisites ...
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件...
Makefile阅读全文
2018-12-15 19:33
⁄ 工业·编程
⁄ 共 1192字
为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned
1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度
2. string::size_type 类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int
3. 使用的时候可以参考:
string::size_type a =123;
...
c++阅读全文
2018-12-08 19:22
⁄ 工业·编程
⁄ 共 2593字
生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。这里讲的是循环队列,首先我们必须明白下面几个问题。
一、循环队列的基础知识
1.循...
数据结构阅读全文
2018-12-06 19:17
⁄ 工业·编程
⁄ 共 15455字
FreeModbus协议栈作为从机,等待主机传送的数据,当从机接收到一帧完整的报文后,对报文进行解析,然后响应主机,发送报文给主机,实现主机和从机之间的通信。
1、初始化协议栈---eMBInit函数(mb.c中),以RTU为例
eMBErrorCode eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity )
{
1
/*函数功能:*1:实现RTU模式和ASCALL模式的协议栈初始化;*2:完成协议栈核心函数...
freemodbus, modbus, 网络协议阅读全文