RX 변환 기능 개선: Motorola 방식의 신호 처리 로직 수정

This commit is contained in:
3minbe 2025-02-17 17:21:44 +09:00
parent c48bc02733
commit 87a51ef2ba
3 changed files with 13 additions and 4 deletions

View File

@ -98,9 +98,10 @@ void Receive_{message_name}_{message_info['ID']}(void)
start_bit = signal["msb"] % 8
signal_length = signal["Length"]
if signal["Byte order"] == 0: # Motorola (Big Endian)
shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] << shift{7 - start_bit})"
lsb = signal["msb"] + 8*(signal_length // 8) - (signal_length % 8 - 1)
if signal_length > 8:
# Handle multi-byte signals
shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] << shift{7 - start_bit})"
multi_byte_expr = []
for i in range((signal_length + 7) // 8):
byte_shift = (7 - start_bit) + (i * 8)
@ -109,6 +110,8 @@ void Receive_{message_name}_{message_info['ID']}(void)
else:
multi_byte_expr.append(f"(CAN_ch[0].rx.buf[{start_byte + i}] >> shift{byte_shift})")
shift_expr = " | ".join(multi_byte_expr)
else :
shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] >> shift{lsb % 8})"
else: # Intel (Little Endian)
shift_expr = f"(CAN_ch[0].rx.buf[{start_byte}] >> shift{start_bit})"
if signal_length > 8:

View File

@ -102,7 +102,7 @@ def generate_vcu_can_transmit_single_c_file(signals, output_file):
# Iterate through all messages in the signals
for message_name, message_info in signals.items():
# Check if any signal in the message has RX ECU name as VCU
has_vcu_signal = any(signal["RX ECU name"] == "VCU" for signal in message_info["Signals"])
has_vcu_signal = any(signal["RX ECU name"] != "VCU" for signal in message_info["Signals"])
if not has_vcu_signal:
continue # Skip this message if no signal has RX ECU name as VCU
@ -124,7 +124,13 @@ void Transmit_{message_name}_CH0_{message_info['ID']}(void)
while signal_length > 0:
bits_in_byte = min(8 - start_bit, signal_length)
shift_amount = (signal["Length"] - signal_length)
shift_expr = f"({signal_name} >> shift{shift_amount}) << shift{start_bit}" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})"
if signal["Byte order"] == 0: # Motorola (Big Endian)
if bits_in_byte == 8:
shift_expr = f"({signal_name} >> shift{shift_amount})"
else:
shift_expr = f"({signal_name} << shift{start_bit})" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})"
else: # Intel (Little Endian)
shift_expr = f"({signal_name} >> shift{shift_amount}) << shift{start_bit}" if start_bit > 0 else f"({signal_name} >> shift{shift_amount})"
buffer_index = start_byte
# Ensure buffer_index is within the range of buffer_assignments

View File

@ -2,6 +2,6 @@
"theme": "light",
"default_save_path": "C:/Users/MSI/Desktop",
"file_paths": [],
"last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC",
"last_opened_dir": "C:/Users/MSI/Desktop/python/motorola_tx",
"channel_info": {}
}