从LDF到C语言
- frame的Init list
汽车电子中我们经常要将LDF翻译成C语言。其中有不少需要注意的点。
frame的Init list
下面举一个例子。
LDF中有一个Frame名为Test_cmd, 这个frame中有很多的signal如下图
从图中可以看出,Signal在Frame中并不是连续排列的。
- 第一个Signal占用 Byte 0中的 bit 0 和 bit 1,init value = 0x0。未使用的bit置1。
那我们来计算byte 0的init value。从图中可以看出bit 0在左,bit 7在右,而我们计算16进制时应该高位在左。所以byte 0 的2进制应该为 11111100,也就是0xFC。 - 对于第二个信号,占用了一整个Byte 1,LDF中也已经给出了Signal 2 的Init value, 0xFE,我们也就不用再计算二进制了。
- Signal 3 占据Byte 2 的 bit 0 和 bit 1,init value 为 0x02, 也就是 bit 1 = 1, bit 0 = 0。
- Signal 4 占据Byte 2 的 bit 2 和 bit 3,init value 为 0x02, 也就是 bit 3 = 1, bit 2 = 0。
- Signal 5 占据Byte 2 的 bit 4 和 bit 5,init value 为 0x01, 也就是 bit 5 = 0, bit 4 = 1。
- Byte 2 的 bit 6 和 bit 7 因为未使用而置1。所以Byte 2 的二进制为11011010,十六进制为0xDA。
- Signal 6 占据Byte 3 的 bit 0 - bit 3,init value 为 0x07, 也就是bit3 - bit0 为 0111。
- Signal 7 占据Byte 3 的 bit 4,init value 为 0,所以 bit 4 = 0。
- Byte 3 的 bit 5 - bit 7 为 111。所以Byte 3的二进制bit 7- bit 0为11100111,十六进制为0xE7。
- Byte 4,Byte 5,Byte 6 因为都未使用所以都为0xFF。
- Signal 8 完整占据了 Byte 7, init value 为 0,所以十六进制为0x00。
所以我们在C语言中会这样定义:
#define Lin_Ldf_Test_cmd_INIT_LIST 0xFC, 0xFE, 0xDA, 0xE7, 0xFF, 0xFF, 0xFF, 0x00
/* Init values for Lin_Ldf_Test_cmd */`