mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 21:37:05 +03:00
WIP making segments from file
This commit is contained in:
parent
292b90620e
commit
65faf0eb22
@ -40,11 +40,15 @@ def parse_hex_line(line: str) -> Record:
|
|||||||
rectype = int(line[7:9], base=16) # Record type field
|
rectype = int(line[7:9], base=16) # Record type field
|
||||||
data_bytes_line = line[9:datalen*2 + 9] # Data field
|
data_bytes_line = line[9:datalen*2 + 9] # Data field
|
||||||
crc = int(line[datalen*2 + 9:datalen*2 + 11], base=16)
|
crc = int(line[datalen*2 + 9:datalen*2 + 11], base=16)
|
||||||
|
|
||||||
splitted_by_bytes: List[str] = []
|
splitted_by_bytes: List[str] = []
|
||||||
for i in range(datalen):
|
for i in range(datalen):
|
||||||
splitted_by_bytes.append(data_bytes_line[i*2:i*2+2])
|
splitted_by_bytes.append(data_bytes_line[i*2:i*2+2])
|
||||||
|
|
||||||
data_bytes = list(map(lambda x: int(x, base=16), splitted_by_bytes))
|
data_bytes = list(map(lambda x: int(x, base=16), splitted_by_bytes))
|
||||||
|
checksum = (datalen + int(line[3:5], base=16) + int(line[5:7], base=16) + rectype + sum(data_bytes)) % 256
|
||||||
|
if (checksum + crc) % 256 != 0:
|
||||||
|
raise Exception("Checksum mismatch in %s" % line)
|
||||||
|
|
||||||
record = Record(RecordType.UNKNOWN, 0, [])
|
record = Record(RecordType.UNKNOWN, 0, [])
|
||||||
|
|
||||||
@ -175,11 +179,11 @@ def parse_hex(file: str) -> Dict:
|
|||||||
|
|
||||||
|
|
||||||
def bytes2words(arr: List[int]) -> List[int]:
|
def bytes2words(arr: List[int]) -> List[int]:
|
||||||
word = []
|
bytes = []
|
||||||
words = []
|
words = []
|
||||||
for byte in arr:
|
for byte in arr:
|
||||||
word.append(byte)
|
bytes.append(byte)
|
||||||
if word.__len__() == 4:
|
if bytes.__len__() == 4:
|
||||||
words.append(word[0]+2**8*word[1]+2**16*word[2]+2**24*word[3])
|
words.append(bytes[0]+2**8*bytes[1]+2**16*bytes[2]+2**24*bytes[3])
|
||||||
word = []
|
bytes = []
|
||||||
return words
|
return words
|
||||||
|
|||||||
@ -37,8 +37,13 @@ def test_connection():
|
|||||||
raise Exception("ERROR: no regs found, check MCU connection")
|
raise Exception("ERROR: no regs found, check MCU connection")
|
||||||
|
|
||||||
|
|
||||||
def read_file(filename: str) -> List[Record]:
|
@dataclass
|
||||||
segments: List[Record] = []
|
class Segment:
|
||||||
|
offset: int
|
||||||
|
data: List[int]
|
||||||
|
|
||||||
|
def read_file(filename: str) -> List[Segment]:
|
||||||
|
segments: List[Segment] = []
|
||||||
lines: List[str] = []
|
lines: List[str] = []
|
||||||
|
|
||||||
file_name, file_extension = os.path.splitext(filename)
|
file_name, file_extension = os.path.splitext(filename)
|
||||||
@ -52,13 +57,25 @@ def read_file(filename: str) -> List[Record]:
|
|||||||
else:
|
else:
|
||||||
raise Exception("Unsupported file format: %s" % (file_extension))
|
raise Exception("Unsupported file format: %s" % (file_extension))
|
||||||
|
|
||||||
|
lba: int = 0 # Linear Base Address
|
||||||
|
expect_address = 0 # Address of the next byte
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
record: Record = parse_line(line, file_extension)
|
record: Record = parse_line(line, file_extension)
|
||||||
print(record)
|
|
||||||
if record.type == RecordType.DATA:
|
if record.type == RecordType.DATA:
|
||||||
pass
|
drlo: int = record.address # Data Record Load Offset
|
||||||
|
if segments.__len__() == 0:
|
||||||
|
expect_address = lba+drlo
|
||||||
|
segments.append(Segment(offset=expect_address, data=[]))
|
||||||
|
if expect_address != lba+drlo:
|
||||||
|
expect_address = lba+drlo
|
||||||
|
segments.append(Segment(offset=expect_address, data=[]))
|
||||||
|
|
||||||
|
for byte in record.data:
|
||||||
|
segments[-1].data.append(byte)
|
||||||
|
expect_address += 1
|
||||||
elif record.type == RecordType.EXTADDR:
|
elif record.type == RecordType.EXTADDR:
|
||||||
pass
|
lba = record.address
|
||||||
elif record.type == RecordType.LINEARSTARTADDR:
|
elif record.type == RecordType.LINEARSTARTADDR:
|
||||||
print("Start Linear Address:", record.address)
|
print("Start Linear Address:", record.address)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user