From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
|
我想增大NI-CAN对象读写队列的长度,但是我不知道它们的极限值。
网口读队列的长度:100除非遇到特殊情况,否则一般推荐使用上述队列长度,因为这些长度满足各种不同应用的限制条件。要想增大队列长度到其最大值,需要理解这些队列在NI-CAN中是如何实现的。本文接下来将概述这个实现。
网口写队列的长度:10
传输数据的CAN对象的读队列的长度:0
传输数据的CAN对象的写队列的长度:10
接收数据的CAN对象的读队列的长度:10
接收数据的CAN对象的写队列的长度:0
已用内存 = ((Queue_length + 1) * Entry_size) + 30;30个字节是头文件的大小。Queue_length是使用ncConfig指定的帧的数量。Entry_size由读写的数据类型所决定:
网口读队列:22个字节由Memory_used的公式可以看到,将队列长度设为0并不意味着没有为队列分配内存。根据NI-CAN用户手册,一个0长度的队列存储最近的数据,因此仍然需要分配内存。一个0长度的队列需要为头文件分配30个字节,再加上一个entry (Entry_size的字节数)。即使配置了对象,情况也还是这样,但是不在应用程序打开(比如只使用CAN对象时的网口).
网口写队列:14个字节
CAN对象的读队列:16个字节
CAN对象的写队列:8个字节
已用内存 = ((10 + 1) * 14) + 30 = 184字节这样读队列长度的最大值可以达到(6600 - 184) = 6416字节。30个字节将用于读队列的头文件,还剩(6416 - 30) = 6386字节。该数除以Entry_size得到(6386 / 22) = 290帧,这意味着读队列的长度可设为289。
网口这些队列总的已用内存为226个字节,剩下的队列可用字节数为(6600 - 226) = 6374。
读队列长度 = 0
已用内存 = ((0 + 1) * 22) + 30 = 52
网口
写队列长度 = 0
已用内存 = ((0 + 1) * 14) + 30 = 44
CAN对象,周期性传输
读队列长度 = 0
已用内存 = ((0 + 1) * 16) + 30 = 46
CAN对象,周期性传输
写队列长度 = 0
已用内存 = ((0 + 1) * 16) + 30 = 46
CAN对象,周期性接收
写队列长度 = 0
已用内存 = ((0 + 1) * 8) + 30 = 38
|