Gambaran Umum Fitur Qt Creator 4.10 dan QBS 1.14 Microcontroller Programming

Halo, sesama programmer, perangkat keras, dan semua yang bersimpati pada mereka. Saya ingin menyajikan tinjauan singkat tentang kemampuan IDE Qt Creator dalam hubungannya dengan sistem build QBS terkait pemrograman mikrokontroler. Kepada siapa topik ini menarik, selamat datang di kucing.

Beberapa hari yang lalu, secara diam-diam dan tanpa disadari, rilis Qt Creator 4.10 dirilis, yang menambahkan beberapa perbaikan untuk bekerja dengan mikrokontroler (pada orang umum - perangkat "baremetal"). Rilis Qt Creator ini mengintegrasikan sistem build QBS 1.14 , yang juga memiliki peningkatan baru. Beberapa peningkatan ini akan dibahas di bawah ini.

Perbaikan pada Qt Creator


Semua peningkatan ini hanya tersedia ketika plugin BareMetal diaktifkan, yang diaktifkan melalui menu "Bantuan -> Tentang Plugin -> Dukungan Perangkat -> BareMetal".

  1. Tiga kompiler baru sekarang didukung, informasi dasar tentang yang diberikan dalam tabel di bawah ini:
    KompilerArsitektur yang Didukung
    IAR EWARM, AVR, 8051 (MCS51)
    KeilARM, 8051 (MCS51)
    SDCC8051 (MCS51)

    Catatan: Perlu dicatat bahwa produk-produk dari IAR EW dan KEIL untuk arsitektur yang berbeda disediakan oleh paket terpisah yang harus diinstal secara independen. Perbedaannya, katakanlah, dari kompiler SDCC yang mendukung beberapa arsitektur sekaligus.
  2. Sekarang ini kompiler baru secara otomatis terdeteksi pada tab "Tools -> Options -> Kits -> Compiler -> Auto-detected".

    Misalnya, bagi saya tampilannya seperti ini:



    Catatan: Seperti yang Anda lihat, untuk C ++ tidak ada kompiler KEIL untuk MCS51, yang benar, karena kompiler ini hanya mendukung C. Juga, kompiler SDCC akan hilang di sini karena alasan yang sama.
  3. Dimungkinkan juga untuk menambahkan kompiler baru ini secara manual melalui menu "Tools -> Options -> Kits -> Compiler -> Add":


  4. Untuk kompiler, ABI-nya (arsitektur, format dan lebar kata) akan ditentukan secara otomatis. Informasi tentang ini dapat dilihat hanya dengan mengklik pada kompiler.

    Sebagai contoh, untuk IAR EW dan arsitektur 8051 (MCS51) saya, terlihat seperti ini:



    Catatan: Dalam hal ini, kompiler dipilih yang terdeteksi secara otomatis, sehingga bidang ABI tidak aktif di sini. Tetapi ketika menambahkan kompiler secara manual, pengguna dapat memilih ABI yang benar, jika karena alasan tertentu itu ditentukan secara salah.
  5. Untuk kompiler, semua makronya akan terdeteksi secara otomatis. Dengan demikian, mereka akan disorot dengan benar di editor kode.

    Catatan: Pengecualian hanya kata kunci dari beberapa kompiler (misalnya, untuk arsitektur 8051), yang akan disorot dengan peringatan. Tapi itu cerita lain.
  6. Untuk kompiler, direktori dengan file header-nya akan terdeteksi secara otomatis. Dengan demikian, mereka akan disorot dengan benar di editor kode.
  7. Parser untuk kesalahan dan peringatan dari kompiler baru ini diimplementasikan, yang ditampilkan di panel Masalah.

Perbaikan dalam QBS


QBS akan menjadi bagian integral dari ulasan ini, jadi masuk akal untuk berbicara tentang peningkatannya:

  1. Dukungan tambahan untuk kompiler baru ini (beberapa di antaranya sejak versi 1.13).
  2. Menerapkan kemampuan untuk secara otomatis mendeteksi kompiler yang diinstal dan membuat profil. Untuk apa utilitas qbs-setup-toolchains digunakan.

    Dalam kasus saya, tampilannya seperti ini:

    c:\Qt-meta\Tools\QtCreator\bin>qbs-setup-toolchains.exe --detect ... Trying to detect IAR toolchains... Profile 'iar-arm' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3/arm/bin/iccarm.exe'. Profile 'iar-mcs51' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/8051/bin/icc8051.exe'. Profile 'iar-avr' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/avr/bin/iccavr.exe'. Trying to detect KEIL toolchains... Profile 'keil-mcs51' created for 'C:/Keil_v5/C51/BIN/c51.exe'. Profile 'keil-arm' created for 'C:/Keil_v5/ARM/ARMCC/bin/armcc.exe'. Trying to detect SDCC toolchains... No SDCC toolchains found. ... 

    Untuk melihat apa yang ditemukan di sana, Anda dapat menggunakan utilitas GUI qbs-config-ui .

    Dalam kasus saya, tampilannya seperti ini:



Fitur membuat proyek


Adalah penting untuk memiliki ide dan dapat dengan benar mengisi properti proyek untuk modul cpp dan qbs .

Marilah kita memikirkan yang paling penting dari mereka dan mempertimbangkannya secara lebih rinci:

  • qbs.toolchain - properti ini secara otomatis diisi ketika membuat profil untuk kompiler yang dipilih. Tabel di bawah ini menunjukkan nilai yang mungkin untuk properti ini:

    Nama ToolchainNilai properti
    IAR EWiar
    Keilkeil
    SDCCsdcc

  • qbs.architecture - properti ini secara otomatis diisi ketika membuat profil untuk kompiler yang dipilih. Tabel di bawah ini menunjukkan nilai yang mungkin untuk properti ini:

    Nama arsitekturNilai properti
    ARMlengan
    AVRavr
    8051 (MCS51)mcs51

  • cpp.cLanguageVersion - properti ini memungkinkan Anda untuk mengatur versi standar yang digunakan untuk bahasa C. Kemungkinan penggunaan ditunjukkan pada tabel di bawah ini:

    Nama ToolchainOpsi yang memungkinkanSecara default
    IAR EWc89Versi terbaru, tergantung pada versi toolchain.
    Keilc99 (khusus ARM)Versi terbaru, tergantung pada versi toolchain.
    SDCCc89, c99, c11Versi terbaru, tergantung pada versi toolchain.

    Catatan: Penting untuk dicatat bahwa rantai alat IAR EW dan KEIL tidak memberikan kemampuan untuk memilih versi standar. Secara default, mereka menggunakan versi terbaru yang diimplementasikan dalam versi khusus dari kompiler (baik c99 atau c11, Anda perlu melihat catatan rilis untuk kompiler). Biasanya, Anda hanya dapat memilih versi lama dari standar c89.
  • cpp.cxxLanguageVersion - properti ini memungkinkan Anda untuk mengatur versi standar yang digunakan untuk bahasa C ++ . Kemungkinan penggunaan ditunjukkan pada tabel di bawah ini:

    Nama ToolchainOpsi yang memungkinkanSecara default
    IAR EWTidakVersi terbaru, tergantung pada versi toolchain
    Keilc ++ 03, c ++ 11 (hanya untuk ARM)c ++ 03 (hanya untuk ARM)
    SDCCTidak didukungTidak didukung

  • cpp.entryPoint adalah nama titik dalam gerakan dalam program yang digunakan untuk menautkan. Kebutuhannya ditentukan oleh runtime yang digunakan. Misalnya, jika Anda menggunakan runtime IAR EW (yaitu, tautan ke perpustakaannya dan menggunakan skrip tautannya), maka dalam hal ini nama titiknya adalah "__program_start". Yaitu sepenuhnya terserah pengembang.
  • cpp.driverFlags adalah flag umum yang akan diteruskan ke compiler dan assembler. Dalam beberapa kasus, mereka juga akan ditransfer ke tautan (ini tergantung pada jenis rantai alat). Bendera ini dapat berupa bendera yang menunjukkan jenis prosesor, koprosesor, dll.

    Misalnya, untuk kompiler IAR EW untuk arsitektur AVR, ini bisa menjadi:

     cpp.driverFlags: ["--cpu=can128", "-ms"] 

  • cpp.driverLinkerFlags adalah flag yang akan diteruskan ke linker tanpa perubahan, tidak seperti cpp.linkerFlags , yang dapat secara otomatis dibungkus dengan beberapa kata kunci. Untuk kompiler IAR EW dan KEIL, lebih baik menggunakan cpp.driverLinkerFlags , karena kompiler ini selalu menggunakan linker terpisah yang dapat dieksekusi untuk menghubungkan. Untuk kompiler SDCC, lebih baik menggunakan cpp.linkerFlags , sebagai perintah dari kompiler ini agak mirip dengan kompiler GCC.
  • cpp.commonCompilerFlags adalah flag umum yang akan diteruskan ke kompiler C dan kompiler C ++.

    Misalnya, untuk kompiler IAR EW, ini bisa menjadi tanda untuk mengaktifkan ekstensi spesifik dari kompiler ini:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags adalah flag yang hanya akan diteruskan ke kompiler C.
  • cpp.xxFlags adalah flag yang hanya akan diteruskan ke kompiler C ++.
  • cpp.staticLibraries adalah daftar perpustakaan yang Anda perlukan untuk menautkan aplikasi. Saya perhatikan bahwa cpp.dynamicLibraries tidak didukung dalam kompiler ini (seperti yang saya tahu), jadi masuk akal untuk menggunakan hanya cpp.staticLibraries .
  • cpp.assemblerFlags - flag ini hanya akan diteruskan ke assembler.

Untuk menentukan file skrip untuk linker, ada tag khusus "linkerscript", yang harus Anda gunakan, misalnya:

 Group { name: "Linker Scripts" fileTags: ["linkerscript"] files: ["cfg3soim.xcl", "cfgcan128.xcl"] } 

Catatan: Alasannya karena untuk kompiler yang berbeda ada opsi berbeda untuk penamaan file-file ini. Untuk GCC yang sama, dapat berupa file dengan ekstensi * .ld, * .x, * .xn, * .xbn, dll. (Apa yang dapat kita katakan tentang kompiler lain ...). Oleh karena itu, diputuskan untuk tidak repot-repot menandai semua ekstensi file yang mungkin untuk kompiler tertentu, tetapi hanya menggunakan tag tautan untuk tujuan dan situasi yang dimaksud.

Untuk melihat bagaimana semuanya bekerja, QBS menyediakan serangkaian contoh sederhana yang hanya β€œmenyentak” kaki dan mengedipkan LED.

Ada apa dengan debugging


Sayangnya, situasi debugging sangat menyedihkan. Produk (IDE) IAR EW dan KEIL menggunakan debugger mereka, tetapi sejak itu Karena produk-produk ini adalah hak milik, maka tidak mungkin mendapatkan deskripsi tentang pengoperasian protokol para penentang ini di suatu tempat. Satu-satunya pilihan adalah mencoba merekayasa balik plugin untuk Eclipse (misalnya, IAR EW menyediakan plugin ini), tetapi ini membutuhkan motivasi serius.

Tapi saya bisa sedikit senang jika saya mengatakan bahwa untuk arsitektur ARM Anda dapat menggunakan debugger GDB. Setidaknya itu bekerja untuk saya untuk IAR EW (tetapi, sesuatu tidak berhasil dengan KEIL, mungkin beberapa bendera tambahan harus ditunjukkan ke tautan di sana).

Apa selanjutnya


Di sini saya sedikit spoiler, saya akan mengatakan bahwa dalam versi berikutnya (saya tidak tahu yang mana), arsitektur STM8 dan MSP430 harus ditambahkan, dan juga pada generator QBS akan diimplementasikan dalam proyek IAR EW dan KEIL asli (yang akan memungkinkan, misalnya, untuk melakukan debug proyek).

Pada catatan ini, saya akhiri kisah saya, terima kasih semua yang akan memperhatikan ulasan ini.

Source: https://habr.com/ru/post/id467323/


All Articles