ЛР15. Рефактор методички

This commit is contained in:
Andrei Solodovnikov
2024-07-28 12:01:56 +03:00
parent 566e3c9553
commit 37dd47c0c9
2 changed files with 181 additions and 94 deletions

View File

@@ -16,10 +16,15 @@ parser.add_argument("instr", type=str, help="File for instr mem initialization")
parser.add_argument("comport", type=str, help="COM-port name")
parser.add_argument("-d", "--data", type=str, help="File for data mem initialization")
parser.add_argument("-c", "--color", type=str, help="File for color mem initialization")
parser.add_argument("-s", "--symbols", type=str, help="File for symbols mem initialization")
parser.add_argument("-t", "--tiff", type=str, help="File for tiff mem initialization")
args = parser.parse_args()
INIT_MSG_SIZE = 41
FLASH_MSG_SIZE = 57
ACK_MSG_SIZE = 4
def parse_file(fname: str, base: int = 16, chars_in_byte: int = 2, start_addr: int = None) -> dict:
res_bytes=b''
bytes_map = {}
@@ -30,7 +35,7 @@ def parse_file(fname: str, base: int = 16, chars_in_byte: int = 2, start_addr: i
assert(start_addr is not None)
bytes_map[start_addr] = res_bytes[::-1]
res_bytes = b''
start_addr = int(line[1:], 16)
start_addr = int(line[1:], 16)*4
else:
for word in line.split():
res_bytes += bytes(int(word,base).to_bytes(len(word)//chars_in_byte,"little"))
@@ -43,16 +48,16 @@ def flash(data: bytes, port: serial.Serial, start_addr: int):
addr_bytes = start_addr.to_bytes(4, "big")
port.write(addr_bytes)
ready_msg = port.read(40)
ready_msg = port.read(INIT_MSG_SIZE)
ready_msg_str = ready_msg.decode("ascii")
print(ready_msg_str)
assert(ready_msg_str == "ready for flash staring from 0x{:08x}\n".format(start_addr))
assert(ready_msg_str == "ready for flash starting from 0x{:08x}\n".format(start_addr))
data_len = len(data)
data_len_bytes = data_len.to_bytes(4, "big")
port.write(data_len_bytes)
data_len_ack_bytes = port.read(4)
data_len_ack_bytes = port.read(ACK_MSG_SIZE)
data_len_ack = int.from_bytes(data_len_ack_bytes,"big")
print("0x{:08x}".format(data_len_ack))
assert(data_len_ack == data_len)
@@ -61,7 +66,7 @@ def flash(data: bytes, port: serial.Serial, start_addr: int):
print("Sent {:08x} bytes".format(data_len))
data_flash_ack = port.read(57)
data_flash_ack = port.read(FLASH_MSG_SIZE)
data_flash_ack_str = data_flash_ack.decode("ascii")
print(data_flash_ack_str)
assert(data_flash_ack_str == "finished write 0x{:08x} bytes starting from 0x{:08x}\n".format(data_len, start_addr))
@@ -73,6 +78,7 @@ def flash(data: bytes, port: serial.Serial, start_addr: int):
inst_file = args.instr
data_file = args.data
color_file= args.color
symbol_file= args.symbols
tiff_file = args.tiff
com = args.comport
@@ -88,6 +94,11 @@ if color_file:
else:
color = {}
if symbol_file:
symbols = parse_file(symbol_file)
else:
symbols = {}
if tiff_file:
tiff = parse_file(tiff_file, 2, 8)
else:
@@ -100,10 +111,10 @@ ser = serial.Serial(
parity=serial.PARITY_EVEN,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=None
timeout=1
)
for ass_arr in [instr, data, color, tiff]:
for ass_arr in [instr, data, color, symbols, tiff]:
for addr, bytes_list in ass_arr.items():
flash(bytes_list, ser, addr)