#can-bus #mbed
#can-bus #mbed
Вопрос:
Мне нужна помощь с кодом для преобразования аналогового входа на mbed LPC1768 в цифровой для использования контроллером CAN.Пример синтаксиса, который я использую
if(can1.write(CANMessage(1337, amp;counter, 2))) {
..........
}
где « counter
» — это данные, которые должны быть переданы и определены мной как подписанный int (пример, однако, определяет его как символ). Но я продолжаю получать сообщение об ошибке
Error: No instance of constructor "mbed::CANMessage::CANMessage" matches the argument list in "project_test.cpp"
Синтаксис CANMessage контроллера
CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) {
len = _len amp; 0xF;
type = _type;
format = _format;
id = _id;
memcpy(data, _data, _len);
}
Я действительно не понимаю синтаксис контроллера и как его применять. Любая помощь в объяснении будет оценена. Спасибо
Ответ №1:
Поскольку CANMessage принимает только char * для параметра данных, вы можете преобразовать значение int со знаком (которое составляет 4 байта) в символ без знака, например:
unsigned char buf[0x8];
buf[0]=value amp; 0x000000ff;
buf[1]=(value >> 8) amp; 0x000000ff;
buf[2]=(value >> 16) amp; 0x000000ff;
buf[3]=(value >> 24) amp; 0x000000ff;
и затем
if (can1.write(CANMessage(1337, amp;buf, 8))) {
..........
}