2010-11-05 47 views
5

Guys, Tôi có một dự án mà tôi đã biên soạn cho bộ vi xử lý ARM Cortex-A8. Tôi đang sử dụng GCC để làm điều này. Hiện tại kích thước của tệp thực thi của tôi là 220,1 KB. Bây giờ tôi sửa đổi makefile của tôi và tôi thêm cờ -mthumb, dòng makefile trông hơi như thế này -Chế độ ngón tay cái ARM: Kích thước mã không giảm

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon 

Tôi làm điều này thay đổi trong tất cả các makefiles tôi và tôi xây dựng dự án của tôi, nhưng thực thi tôi nhận được cuối cùng vẫn tiếp tục là 220,1 KB.

tôi đã thực hiện một thay đổi nhiều đến dòng lệnh của tôi, tôi đã thêm các tùy chọn -mthumb-Interwork

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon 

Một lần nữa tôi nhận được cùng một kích thước thực thi 220,1 KB. Tôi có thiếu gì trong khi làm việc này không?

Tôi đã viết một chương trình nhỏ, để tìm nhỏ nhất của hai số và tôi biên soạn nó bằng cách sử dụng dòng lệnh sau

gcc main.c -o main 

tôi nhận được một 8,5 KB thực thi

Tiếp theo, tôi làm một

gcc -mthumb main.c -o main 

Tôi vẫn nhận được 8.5 KB thực thi.

Có gì sai ở đây?

Tôi đã thực hiện cat /proc/cpuinfo để xem ngón tay cái có thực sự được bộ xử lý của tôi hỗ trợ hay không và tôi thấy rằng nó thực sự được hỗ trợ. Tôi nhận được -

Processor: ARMv7 Processor rev 5 (v7l) 
Features: swp half thumb fastmult vfp edsp neon vfpv3 
.... 
.... 
+0

'-marm' là bộ đếm' -mthumb' và 'gcc' có tùy chọn cuối cùng; Đây là lý do tại sao * câu trả lời * dwelch's hoạt động. –

Trả lời

6

Tôi nghĩ rằng -marm nghĩa là bạn có một cánh tay không có ngón tay cái, hãy thử xóa -marm.

+1

Tôi nghĩ rằng đó là, nó là khá dễ dàng để chứng minh, hãy thử -S -mthumb -marm trên một tập tin nhỏ với một chức năng nhỏ và thấy rằng nó tạo ra mã cánh tay bởi vì -marm điều cuối cùng bạn yêu cầu nó làm. sau đó thay đổi nó thành -marm -mthumb, với -mthumb cuối cùng nó tạo ra mã ngón tay cái.Vì vậy, có -marm cuối cùng trumps tất cả những thứ ngón tay cái bạn đang cố gắng để làm. –

+1

Khi nghi ngờ, hãy sử dụng "gcc -save-temps" để giữ lại tệp asm hoặc "objdump -d" trên mã đối tượng để tháo gỡ. Sự khác biệt giữa ARM và Thumb là khá dễ dàng để phát hiện dựa trên chiều rộng hướng dẫn (ARM luôn là 4 byte, Thumb là 2 byte, Thumb2 là 2 hoặc 4). Tôi đã nhìn thấy trường hợp Thumb fadden

+0

+1 để quản lý để có một cánh tay không có ngón tay cái. –

0

Với một số trình biên dịch, ngón tay cái là mặc định khi biên dịch cho ARMv7. Bạn có chắc chắn rằng tệp thực thi ban đầu của bạn không được xây dựng cho ngón tay cái không?

Thử xây dựng bằng ngón tay cái và xem kích thước mã có tăng hay không.

+0

Stephen tôi đã làm điều đó, nó lại một lần nữa 220,1 KB. Không thay đổi! – HaggarTheHorrible

2

Thật khó để nói mà không có mã thực, nhưng tôi có một vài gợi ý.

  1. Bật tối ưu hóa. (ví dụ: -O3 -ffunction-sections -fdata-sections)
  2. Dải thực thi để đảm bảo thông tin gỡ lỗi không được tính.
  3. Kiểm tra kích thước (.text) mã thực tế, không phải kích thước tệp. Có lẽ có một số đệm đang diễn ra. Bạn có thể sử dụng objdump cho điều đó.
  4. Dump mã lắp ráp (-S switch) và kiểm tra xem nó có thực sự tạo ra các lệnh ARM trong một trường hợp và Thumb trong một trường hợp khác hay không.
Các vấn đề liên quan