mirror of
https://gitee.com/Lamdonn/varch.git
synced 2025-12-06 16:56:42 +08:00
6.6 KiB
6.6 KiB
介绍
cant 是一个用于 C 语言的简单 CAN(Controller Area Network)设备测试模块。从应用层角度对CAN总线进行测试,可以监控数据错误帧、丢帧,同时可以模拟CAN总线负载,确保在总线高压状态下的稳定性。
接口
类型定义
cant_transfer_t 函数指针类型
typedef int (*cant_transfer_t)(uint32_t canid, uint8_t *data, uint16_t length);
类型说明:这是与 CAN 传输相关的函数指针类型,可用于 CAN 数据的发送或接收函数。 参数介绍:
canid:CAN 消息的标识符。data:指向要发送或接收的数据的指针。length:数据的长度。 返回值:函数返回一个int类型的值,具体含义由实际使用的函数决定。
结构体定义
CANT 结构体
typedef struct
{
struct
{
uint8_t channel;
uint8_t baundrate;
uint16_t period; // `cant_task()` call period
cant_transfer_t transmit; // can transmit the drive function
cant_transfer_t receive; // can receive hook functions
} config;
uint16_t busload;
uint32_t periodbits;
uint32_t timestamp;
struct
{
uint32_t canid;
float compression;
float rate;
uint16_t tarload;
uint32_t gapbase;
uint32_t gapcount;
uint32_t curcount;
uint8_t data[64];
} dummy;
struct
{
uint32_t canid;
uint32_t errcount;
uint32_t curcount;
uint32_t vercount;
uint32_t lstcount;
} verify;
} CANT;
结构体说明:该结构体用于表示 CAN 设备,包含了 CAN 设备的配置信息、总线负载、时间戳、虚拟数据和验证数据等内容。 子结构体及成员介绍:
config子结构体:包含 CAN 设备的配置信息。channel:CAN 总线的通道号。baundrate:CAN 总线的波特率。period:cant_task()函数的调用周期。transmit:指向 CAN 数据发送函数的指针。receive:指向 CAN 数据接收函数的指针。
busload:CAN 总线的负载值。periodbits:与周期相关的位信息。timestamp:时间戳。dummy子结构体:包含 CAN 设备的虚拟数据。canid:CAN 消息的标识符。compression:压缩因子,类型为float。rate:速率,类型为float。tarload:目标负载。gapbase:间隙基值。gapcount:间隙计数。curcount:当前计数。data:数据数组,大小为 64 字节。
verify子结构体:包含 CAN 设备的验证数据。canid:CAN 消息的标识符。errcount:错误计数。curcount:当前计数。vercount:验证计数。lstcount:上一次计数。
函数
cant_set_dummy_canid 函数
int cant_set_dummy_canid(CANT *cant, uint32_t canid);
函数说明:设置 CAN 设备虚拟数据的 CAN 标识符。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。canid:要设置的 CAN 标识符。 返回值:CANT_E_OK:设置成功。CANT_E_INVALID:传入的cant指针为NULL。CANT_E_ECANID:传入的canid为 0。
cant_set_verify_canid 函数
int cant_set_verify_canid(CANT *cant, uint32_t canid);
函数说明:设置 CAN 设备验证数据的 CAN 标识符。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。canid:要设置的 CAN 标识符。 返回值:CANT_E_OK:设置成功。CANT_E_INVALID:传入的cant指针为NULL。CANT_E_ECANID:传入的canid为 0。
cant_set_busload 函数
int cant_set_busload(CANT *cant, uint16_t load);
函数说明:设置 CAN 设备的总线负载。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。load:要设置的总线负载值。 返回值:CANT_E_OK:设置成功。CANT_E_INVALID:传入的cant指针为NULL。
cant_get_busload 函数
int cant_get_busload(CANT *cant, uint16_t *load);
函数说明:获取 CAN 设备的总线负载。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。load:指向用于存储总线负载值的变量的指针。 返回值:CANT_E_OK:获取成功。CANT_E_INVALID:传入的cant指针为NULL。CANT_E_LOAD:传入的load指针为NULL。
cant_transmit 函数
int cant_transmit(CANT *cant, uint32_t canid, uint8_t *data, uint16_t length);
函数说明:通过 CAN 设备发送数据。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。canid:要发送数据的 CAN 标识符。data:指向要发送的数据的指针。length:要发送的数据的长度。 返回值:CANT_E_OK:发送成功。CANT_E_INVALID:传入的cant指针为NULL。CANT_E_DATA:传入的data指针为NULL。CANT_E_TRANSMIT:cant结构体中的transmit函数指针为NULL。CANT_E_TRANSFAIL:实际的发送函数返回非零值,表示发送失败。
cant_receive 函数
int cant_receive(CANT *cant, uint32_t canid, uint8_t *data, uint16_t length);
函数说明:通过 CAN 设备接收数据。 参数介绍:
cant:指向CANT结构体的指针,代表要操作的 CAN 设备。canid:要接收数据的 CAN 标识符。data:指向用于存储接收数据的缓冲区的指针。length:要接收的数据的长度。 返回值:CANT_E_OK:接收成功。CANT_E_INVALID:传入的cant指针为NULL。
cant_init 函数
int cant_init(CANT *cant);
函数说明:初始化 CAN 设备。 参数介绍:
cant:指向CANT结构体的指针,代表要初始化的 CAN 设备。 返回值:CANT_E_OK:初始化成功。CANT_E_INVALID:传入的cant指针为NULL。
cant_task 函数
int cant_task(CANT *cant);
函数说明:CAN 设备的主任务函数,用于处理 CAN 设备的周期性任务。 参数介绍:
cant:指向CANT结构体的指针,代表要执行任务的 CAN 设备。 返回值:CANT_E_OK:任务执行成功。CANT_E_INVALID:传入的cant指针为NULL。