2017-07-11
CAN手柄vs通道号
作者:admin 点击:1950
在撰写”CANlib通道号还是卡号?“一文时,有用户评论要求阐明CanHandle和通道号之间的区别,因为它们都可从零开始。
CAN通道使用CANlib中的canOpenChannel()函数打开,将通道号作为第一个参数。
CanHandle handle;
canStatus stat;
int canLibChannelNumber = 0;
handle = canOpenChannel(canLibChannelNumber, canOPEN_ACCEPT_VIRTUAL);
if (handle < 0) {
printf("canOpenChannel failed, status=%d ", stat);
}
View sourceCopy to clipboard
这将返回一个可以是任何非负数的句柄(在第一次调用它时通常为零)。手柄稍后会被用到,如当读取下一个可用的CAN报文时。如果调用tocanOpenChannel()失败,将返回负错误代码,而不是有效的句柄。
long id;
unsigned char data[8];
unsigned int dlc, flags;
unsigned long timestamp;
stat = canRead(handle, &id, data, &dlc, &flags, ×tamp);
if (stat != canERR_NOMSG) {
printf("Failed, status == %d ", stat);
}
View sourceCopy to clipboard
句柄是内部的正数,不能手动编辑。如前所述,CANlib中返回的CanHandle可能与通道号混淆,但新版库,如kvrlib,则会返回一个更大更随机的数字,以降低混淆的风险。
我建议b体育(福州)有限公司官网应该养成习惯将句柄声明为CanHandle(而不是int),从而清楚地标记句柄。在此建议的同时,也鼓励大家始终检查返回状态,就像上面对canRead() 所做的那样。当出现错误时,这将有助于缩短调试时间。下一篇:t编程入门