2011-09-27 12 views
5

Khi tôi biên dịch mã, cuối cùng tôi nhận được Motorola S records (a.mot) với khoảng trống (toàn bộ dải địa chỉ không được bao gồm trong mã và dữ liệu).Làm thế nào tôi có thể điền vào một bản ghi S với hai giá trị byte bắt đầu trên ranh giới địa chỉ ngay cả?

Tôi muốn lấp đầy những khoảng trống đó bằng mẫu 0x01 0x80. Tuy nhiên, điều quan trọng là tất cả các cặp hai byte phải bắt đầu ngay cả địa chỉ. 0x0180 là một mã mở từ vi của tôi mà tôi muốn được thực hiện nếu máy tính đạt đến địa chỉ của vùng flash không sử dụng.

Trước khi bắt đầu trả lời tôi muốn nói với bạn rằng -repeat dữ liệu trong srec_cat có một vấn đề:

  • Với hai phần ví dụ CD đặt cái khác (D sau C) trong không gian địa chỉ.
  • Cho rằng byte cuối cùng của phần C kết thúc vào địa chỉ 0x76 và byte đầu tiên của phần D là trên địa chỉ 0x78. Nói cách khác, có khoảng cách dài 1 byte tại địa chỉ 0x77 giữa chúng.

Trong điều kiện như vậy, nếu tôi sử dụng -repeat dữ liệu 0x01 0x80 tùy chọn, mèo SREC sẽ điền vào đó một byte với 0x01 và bắt đầu điền khoảng cách sau đây từ 0x80.

Tôi không biết kích thước của các phần đó bởi vì trình liên kết xử lý nó.

+2

Cá nhân tôi sẽ giải quyết vấn đề này bằng tập lệnh Python nhanh được gọi là bước đăng liên kết. – Vicky

Trả lời

3

Sử dụng srec_cat để tạo tệp bao gồm phạm vi địa chỉ yêu cầu của bạn được điền hoàn toàn với chuỗi 0x01 0x80 được căn chỉnh theo yêu cầu.

Sau đó, sử dụng srec_cat với các tùy chọn -multiple−disable-sequence-warning để "hợp nhất" tệp "phụ" với tệp hình ảnh ứng dụng của bạn. Bạn nên chỉ định tệp trình điền làm tệp đầu tiên để tệp được ghi đè bởi dữ liệu ứng dụng được chỉ định thứ hai.

Nó sẽ phát hành nhiều cảnh báo, nhưng nó sẽ hoạt động.

+0

Tôi đã nghĩ về nó nhưng chưa thử. Tôi sẽ cung cấp cho sollution này một shot. – devemouse

3

Tôi sẽ viết một phân tích cú pháp đơn giản trong Windows làm việc như thế này: Chương trình

  • này tạo ra một s-ghi tập tin mới dựa vào những thứ bạn nhận được từ các trình biên dịch.
  • Lặp qua tệp được tạo và đọc hai dòng ghi cùng một lúc.
  • Nếu dòng là dòng thông tin, S0, S9, S5, vv, chỉ cần ghi nó vào tệp mới.
  • Nếu dòng 1 có địa chỉ + kích thước nhỏ hơn địa chỉ trên dòng 2, bạn đã tìm thấy một khoảng trống. (address1 + size1) < address2.
  • Viết dòng 1 vào tệp mới.
  • Nếu bạn tìm thấy một khoảng trống, hãy viết một dòng với hằng số khoảng cách của bạn S1xx01800180 và cứ thế. Tính toán tổng kiểm tra khi bạn đi.
  • Viết dòng 2 vào tệp mới.
+0

Định dạng s19 có yêu cầu các dòng nằm trong thứ tự địa chỉ không? –

+1

@ Sam Skuce Tôi không chắc liệu nó có thực sự cần thiết hay không, nhưng mọi công cụ tôi đã thấy đặt chúng theo thứ tự địa chỉ, đặc biệt là các liên kết. Nếu bạn muốn chắc chắn 100% bạn luôn có thể sắp xếp các hàng đầu tiên, sau đó áp dụng thuật toán trên. – Lundin

Các vấn đề liên quan