2017-01-20 15 views
7

Tôi không chắc liệu điều này có dành riêng cho bộ xử lý tôi đang sử dụng hay không, vì vậy với giá trị của nó, tôi sử dụng Cortex M0 +. Tôi đã tự hỏi: nếu tôi tạo ra một tập tin hex thông qua gcc bằng cách sử dụng -fPIC, tôi sản xuất ... Vị trí Mã độc lập. Tuy nhiên, định dạng tệp hex intel mà tôi nhận được từ objcopy luôn có thông tin địa chỉ trên tiêu đề của mỗi dòng. Nếu tôi đang cố viết một bộ nạp khởi động, tôi có bỏ qua thông tin đó, bỏ qua các byte liên quan đến nó, và tải mã thực sự vào bộ nhớ ở bất cứ nơi nào tôi muốn, hay tôi phải theo dõi nó bằng cách nào đó?Định dạng hex của Intel và mã độc lập vị trí sử dụng gcc

+1

cũng cho bộ nạp khởi động, bạn chỉ cần chăm sóc một thứ. Rằng nó không giao nhau với địa chỉ của chương trình mà nó sẽ tải. Ví dụ, nếu bộ nạp khởi động được cho là khởi động hạt nhân thì nó không nên giao nhau với bộ nhớ hạt nhân (nơi ảnh hạt nhân được đặt trong bộ nhớ) hoặc bộ lọc. – theadnangondal

+0

Nhưng ngoài ra, câu hỏi là: tôi có bỏ tập tin hex của thông tin địa chỉ và tổng kiểm tra của nó, sau đó chỉ cần đổ phần còn lại tại một số địa chỉ, và nhảy đến nơi nó bắt đầu? Hoặc là có phân đoạn vào tập tin hex mà tôi cần biết về vì vậy tôi cần phải biết nơi để nhảy đến? –

+0

Vâng, tôi đoán bạn có thể xóa thông tin đó. Tôi không thấy bất kỳ việc sử dụng các địa chỉ đó trong đó dù sao ... Nhảy được tính toán khác biệt độc lập với những địa chỉ đó .... Có lẽ điều này giúp hiểu được http://stackoverflow.com/questions/5024387/trying-to-load- Vị trí độc lập-mã-trên-cortex-m3 – theadnangondal

Trả lời

1

Định dạng intel-HEX được thiết kế đặc biệt để lập trình PROM, EPROMS hoặc bộ xử lý với EPROM bên trong và thường được sử dụng với các lập trình viên cho các thiết bị đề tài. Các địa chỉ ở đầu các bản ghi không có nhiều việc phải làm với mã chương trình một cách trực tiếp. Họ chỉ ra tại địa chỉ của PROM dữ liệu sẽ được viết. Cũng nên nhớ rằng PROM có thể được ánh xạ bất cứ nơi nào vào không gian địa chỉ của bộ xử lý, do đó địa chỉ cuối cùng có thể thay đổi.

Miễn là bạn không muốn lập chương trình PROM, bạn phải xóa mọi thứ trừ dữ liệu khỏi bản ghi. (Đừng quên tổng kiểm tra ở cuối ;-)

Khi tôi hiểu định dạng intel-HEX, các bản ghi không được tiếp giáp, có thể có các lỗ ở giữa.

Một số nhận xét:

Thông số -f PIC không chịu trách nhiệm về định dạng intel-HEX. Tôi nghĩ rằng ở đâu đó trong dòng lệnh của bạn, bạn sẽ tìm thấy -O ihex. Nếu bạn muốn có một tập tin có thể được thực hiện, objcopy cung cấp các định dạng đầu ra phù hợp hơn.

Miễn là bạn không tự viết các giai đoạn trước của quá trình khởi động, bạn không tải bộ nạp khởi động - nó sẽ được tải cho bạn. Địa chỉ mà tại đó điều này sẽ xảy ra thường được cố định và không thể thay đổi. Vì vậy, không cần mã vị trí độc lập, nhưng nó cũng không gây tổn thương.

+0

Chúng tôi sẽ là một câu hỏi cũ, nhưng tôi đã giải quyết nó. Các phần quan trọng và chúng được đặt tại địa chỉ của chúng được chỉ định bởi tệp Linker. Các phân đoạn dữ liệu và BSS không phải là vị trí độc lập trừ khi tôi cũng tạo mã có thể định vị lại. Vì vậy, câu chuyện dài ngắn, chỉ cần tải mã địa chỉ không có liên quan, nhưng để cho mã và dữ liệu họ quan trọng –

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