이 프로그램은 DBC 파일을 여러 가지 형식으로 바꿉니다.
CAN-FD는 현재 지원되지 않습니다 .
유용하다고 생각되면 프로젝트에 기부하는 것을 고려하십시오. 이 프로젝트는 귀하의 지원이 계속되어야합니다. 유료 지원이 필요한 경우 Mailto : [email protected]으로 문의하십시오.
위의 큰 음표에서 볼 수 있듯이 CAN-FD는 현재 지원되지 않으며 (잠시 동안) 그렇지 않을 것입니다. 문제는 CAN-FD가 64 비트 이상의 메시지를 허용 하고이 프로젝트와 그로부터 생성 된 코드는 8 비트가 모두 캔 메시지에 포함된다는 가정을 만듭니다.
DBCC 는 DBC 파일을 주로 C 코드로 변환하는 프로그램으로, 메시지와 신호를 나타내는 구조로 메시지를 직렬화하고 제한 할 수있는 CO 코드로 변환 할 수 있습니다. 구조에 포함 된 정보를 인쇄 할 수도 있습니다.
이 프로그램의 라이센스에 대한 자세한 내용은 라이센스 파일을 참조하십시오. MIT 라이센스에 따라 릴리스됩니다. 링크 된 경우 의존성은 자체 라이센스와 구축 된 경우 자체 제한을 가질 수 있습니다.
소스 파일 MPC.C 및 MPC.H는 MPC라는 C로 작성된 구문 분석기에서 비롯되며 3 조항 BSD 라이센스에 따라 라이센스가 부여됩니다.
구축하려면 C (C99) 컴파일러 만 있으면됩니다. DBCC 프로그램 자체는 플랫폼 C 라이브러리 인 유일한 외부 의존성이있는 휴대용 C에 작성된 내용으로 작성되었습니다.
입력 할 수 있어야합니다.
make
빌드하기 위해 'DBCC'라는 실행 파일이 생산됩니다. 테스트를 테스트하려면 xmllint가 필요합니다.
-n 옵션을 사용하여 출력 버전을 지정하는 데 사용될 수 있으며, 이는 거꾸로 호환성이 구현 된 경우 이전 동작에 액세스 할 수 있습니다. -n 옵션이있는 명령 줄에서 사용할 버전을 지정할 수 있습니다. 최신 버전은 기본적으로 사용됩니다.
Version 1:
레거시/독창적 인 행동. 이것은 여전히 안정적인 출력을 제공하지 않지만 변화를 깨뜨리지 않을 가능성이 더 높습니다.
Version 2:
최신 버전
열거 이름은 CAN 메시지 이름으로 자격이 있습니다
Encode/Decode 함수 이름은 메시지 이름으로도 자격이 있습니다.
코드 생성기는 코드를 만들기 위해 (일부 바이트를 데이터 구조로 바꾸는) 메시지를 풀고 메시지를 디코딩 할 수 있습니다 (데이터 구조의 값에 스케일링/오프셋 최소 및 최대 값을 적용).
프로젝트 내 DBC 파일에서 생성 된 코드를보고 작동 방식을 이해할 수 있습니다.
받은 캔 메시지를 처리하려면 'unpack_message'를 호출해야합니다. 코드 생성은 CPU의 바이트 순서에 비례 적이며 단일 캔 패킷 (CAN ID 및 DLC와 함께 해당 패킷의 경우 DLC)을 포함하는 'UINT64_T'값이 필요하고 생성하는 구조로 포장을 풀습니다. CAN 패킷의 첫 바이트는 'UINT64_T'의 가장 중요한 바이트에 넣어야합니다.
다음 함수를 사용하여 캔 메시지로/에서 변환 할 수 있습니다.
static uint64_t u64_from_can_msg(const uint8_t m[8]) {
return ((uint64_t)m[7] << 56) | ((uint64_t)m[6] << 48) | ((uint64_t)m[5] << 40) | ((uint64_t)m[4] << 32)
| ((uint64_t)m[3] << 24) | ((uint64_t)m[2] << 16) | ((uint64_t)m[1] << 8) | ((uint64_t)m[0] << 0);
}
static void u64_to_can_msg(const uint64_t u, uint8_t m[8]) {
m[7] = u >> 56;
m[6] = u >> 48;
m[5] = u >> 40;
m[4] = u >> 32;
m[3] = u >> 24;
m[2] = u >> 16;
m[1] = u >> 8;
m[0] = u >> 0;
}
코드 생성기는 DBC 파일의 파일 이름을 기반으로 구조를 만들므로 DBC 파일 'ex1.dbc'의 경우 'can_obj_ex1_h_t'라는 데이터 구조가 작성됩니다. 이 구조에는 모든 CAN 메시지 구조가 포함되어 있으며 모든 신호가 포함되어 있습니다. 하나의 구조로 모든 메시지/신호를 보유하면 장점과 단점이 있으며, 필요한 것 중 하나는 필요한 데이터 구조를 정의하는 것입니다.
/* reminder of the 'unpack_message' prototype */
int unpack_message(can_obj_ex1_h_t *o, const unsigned long id, uint64_t data, uint8_t dlc);
static can_obj_ex1_h_t ex1;
uint8_t can_message_raw[8];
unsigned long id = 0;
uint8_t dlc = 0;
your_function_to_receive_a_can_message(can_message_raw, &id, &dlc);
if (unpack_message(&ex1, id, can_message_u64, dlc) < 0) {
// Error Condition; something went wrong
return -1;
}
'unpack_message'는 ID '0x020'의 예로 해당 ID의 올바른 포장 기능을 호출합니다.
case 0x020: return unpack_can_0x020_MagicCanNode1RBootloaderAddress(&o->can_0x020_MagicCanNode1RBootloaderAddress, data, dlc);
포장되지 않은 함수는 해당 ID의 'can_obj_ex1_h_t'구조에서 메시지 객체를 채 웁니다. 그런 다음 개별 신호는 해당 신호에 대한 적절한 기능으로 디코딩 될 수 있습니다. 예를 들어:
uint16_t b = 0;
if (decode_can_0x020_MagicNode1R_BLAddy(o, &b)) {
/* error */
}
메시지를 전송하려면 각 신호를 인코딩 해야하는 다음 팩 함수가 포장 된 메시지를 반환합니다.
다른 메모 :
DBC 파일 형식의 사양은 DBC.Md를 참조하십시오. 이것은 진행중인 작업입니다.
프로젝트에 dbc.vim이라는 DBC 파일에 대한 vim 구문 파일이 있습니다.
C뿐만 아니라 XML을 생성 할 수 있으며, 프로젝트에는 생성 된 XML에 대한 XSD 및 XSLT 파일이 포함되어 있습니다.
보안의 Bestorm을 넘어서 가져 와서 캔 버스 인프라를 테스트하는 데 사용되는 XML 기반 파일.
평평한 CSV 파일을 생성 할 수 있으며, 이는 Excel로 쉽게 가져올 수 있습니다.
JSON 파일을 생성 할 수 있는데, 이것은 오늘날 멋진 아이들이 사용하는 모든 것입니다.
프로그램의 정확한 작동에 대한 자세한 내용은 설명서 페이지를 참조하십시오.
메시지 구조화 방법을 보여주는 멋진 (ASCII Art) 이미지를 생성하는 것이 가능하며, 문제의 메시지를 이해하는 데 도움이되며, 예를 들어 다음과 같은 문서화 목적에 유용합니다.
Message Name: Example-1
Message ID: 0x10, 16
DLC: 1 (8-bits)
+-----+-----.-----.-----.-----+-----.-----+-----+
| | | | |
| | | | |
+-----+-----.-----.-----.-----+-----.-----+-----+
0 1 2 3 4 5 6 7
Bit 0: Signal-Name-1, 1 bit signal, scalar 1.0, offset 0
Bits 1-2: Signal-Name-2, 4 bit signal, signed, Motorola, ...
... etcetera ...
또는 비슷한 것. 이것은 또 다른 출력 모듈입니다.
<스타일 유형 = "text/css"> body {margin : 40px 자동; max-width : 850px; 라인-하이트 : 1.6; font-size : 16px; color :#444; 패딩 : 0 10px} h1, H2, H3 {line-height : 1.2} </style>