Lỗi khi biên dịch tệp khởi động trên STM32


7

Tôi đang cố gắng cung cấp các trình xử lý ngắt tùy chỉnh cho Cortex M3 của mình (hướng dẫn tham khảo tại đây ). ST vui lòng cung cấp một thư viện chuẩn, có các tệp khởi động khác nhau, tất cả được gọi là "startup_stm32f2xx.s". Mỗi cái nằm trong một thư mục khác nhau theo IDE.

Bây giờ tôi không sử dụng IDE (tôi biên dịch trực tiếp với Yagarto, phiên bản sửa đổi của chuỗi công cụ gcc). Tôi đã hỏi những người khởi nghiệp sẽ sử dụng. Tuy nhiên, bây giờ đã thử tất cả các tệp khởi động có sẵn, tôi luôn gặp cùng một lỗi:

/startup_stm32f2xx.s:1 0: error: CPU mục tiêu không hỗ trợ chế độ ARM

Một tìm kiếm nhanh của Google cho thấy điều này có thể có nghĩa là mã trình biên dịch mã có các hướng dẫn mà ARM của tôi không thể hiểu được, điều đáng ngạc nhiên là mã được cung cấp cho bảng của tôi.

Làm cách nào tôi có thể biên dịch tệp khởi động xác định vectơ ngắt trên STM32 của tôi?

Chỉnh sửa: Trong mỗi tệp, startup_stm32f2xx.s:1:0là phần đầu của một nhận xét. Ngoài ra, tôi đang sử dụng cờ -mcpu=cortex-m3. Đây là thông báo lỗi hoàn chỉnh:

$ make all
arm-none-eabi-gcc -x assembler-with-cpp -c -g -mcpu=cortex-m3 -gdwarf-2 -Wa,-amhls=startup_stm32f2xx.lst   startup_stm32f2xx.s -o startup_stm32f2xx.o
startup_stm32f2xx.s:1:0: error: target CPU does not support ARM mode
makefile:46: recipe for target `startup_stm32f2xx.o' failed
make: *** [startup_stm32f2xx.o] Error 1

Câu hỏi không biết: Yagarto có tương thích với chuỗi công cụ STM32 không?
clabacchio

Bạn có ý nghĩa STM32 toolchaingì? Chỉ có một STM32 standard library.
Randomblue

Vi điều khiển AFAIK đi kèm với một bộ công cụ để viết các nhị phân trên vi mô; thư viện có tương thích với gia đình bạn không?
clabacchio

Để ghi các tệp nhị phân trên bộ vi xử lý, tôi sử dụng OpenOCD (thông qua JTAG), không có mối quan hệ đặc biệt nào với STM32 nói riêng.
Randomblue

Câu trả lời:


7

Bạn cũng có thể cần -mthumb -mno-thumb-interwork -mfpu=vfp -msoft-float -mfix-cortex-m3-ldrdcác tùy chọn trình biên dịch cho arm-none-eabi-gcc. Đối với trình biên dịch, sử dụng -mcpu=cortex-m3 -mthumblàm tùy chọn.

Biên tập:

Các -mthumbgcc chuyển đổi và trình biên dịch sang chế độ "ngón tay cái" - chúng sẽ tạo ra các hướng dẫn chế độ cánh tay theo mặc định, không hoạt động trên Cortex M3.

Vì không có chế độ ARM, do đó, chúng tôi không cần hoạt động tương tác ARM / Tumb -mno-thumb-interwork.

Trình biên dịch cần thiết -mfpu=vfp -msoft-floatcho hỗ trợ điểm nổi. Cortex M3 không có điểm nổi phần cứng AFAIK, ít nhất tôi không biết bất kỳ silicon nào có cả Cortex M3 và điểm nổi trong phần cứng. Có một số Cortex M4 có.

Hầu hết Cortex M3 cần -mfix-cortex-m3-ldrd, đây là trong tài liệu errata cho các phiên bản lõi Cortex M3.

Để biết thêm thông tin, xem Tài liệu GCCinfocenter ARM .


3
Điều này rất có thể đúng, nhưng vui lòng giải thích ý nghĩa của từng loại và lý do tại sao chúng quan trọng.
AngryEE

0

Kiểm tra xem bạn đang sử dụng trình biên dịch đúng để tạo startup_stm32f2xx.o. Để tìm hiểu kiến ​​trúc bạn lắp ráp cho, gõ:

file startup_stm32f2xx.o

Bạn sẽ thấy một cái gì đó giống như endian nhỏ của ARM-elf. Nếu bạn không, thì bạn nên sửa tập lệnh makefile / build của mình.


Các tập tin startup_stm32f2xx.okhông được tạo ra; Tôi chỉ có .stập tin. Tôi đã thêm một bãi chứa đầy đủ các thông báo lỗi ở trên.
Randomblue

0

Tôi đã phải đối mặt với cùng một vấn đề khi tôi chuyển từ Em :: Blocks sang phát triển dựa trên IDE-ít GCC. Điều kỳ lạ là dường như ST Microelectronics đang cung cấp các tệp khởi động tương thích với các bộ công cụ của các IDE lớn nhất, tuy nhiên, chúng không cung cấp một tệp hoạt động với GAS (trình biên dịch GCC).

Tôi có thể tự giúp mình chỉ bằng cách sử dụng tệp khởi động được bao gồm trong Em :: Blocks.

Đây là bài viết của tôi trên Stack Overflow .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.