نظرة عامة على ميزات البرمجة Qt Creator 4.10 و QBS 1.14 Microcontroller

مرحبا ، زملائي المبرمجين ، والأجهزة وجميع الذين يتعاطفون معهم. أرغب في تقديم نظرة عامة مختصرة على إمكانيات Qt Creator IDE بالاقتران مع نظام إنشاء QBS فيما يتعلق ببرمجة المتحكم الدقيق. لمن هذا الموضوع مثير للاهتمام ، مرحبا بكم في القط.

فقط في اليوم الآخر ، بهدوء وبشكل غير محسوس ، تم إصدار الإصدار Qt Creator 4.10 ، مما أضاف بعض التحسينات للعمل مع المتحكمات الدقيقة (بالأشخاص العاديين - أجهزة "baremetal"). يدمج هذا الإصدار من Qt Creator نظام إنشاء QBS 1.14 ، والذي يتضمن أيضًا تحسينات جديدة. سيتم مناقشة بعض هذه التحسينات أدناه.

تحسينات في Qt Creator


تتوفر كل هذه التحسينات فقط عند تمكين المكون الإضافي BareMetal ، والذي يتم تنشيطه من خلال القائمة "مساعدة -> حول الإضافات -> دعم الجهاز -> BareMetal".

  1. يتم الآن دعم ثلاثة برامج ترجمة جديدة ، يتم تقديم المعلومات الأساسية عنها في الجدول أدناه:
    مترجمالبنى المدعومة
    IAR EWARM ، AVR ، 8051 (MCS51)
    KEILARM ، 8051 (MCS51)
    SDCC8051 (MCS51)

    ملاحظة: تجدر الإشارة إلى أن المنتجات من IAR EW و KEIL للمباني المختلفة يتم توفيرها بواسطة حزم منفصلة يجب تثبيتها بشكل مستقل. في الاختلاف ، على سبيل المثال ، من برنامج التحويل البرمجي SDCC الذي يدعم العديد من البنى في وقت واحد
  2. الآن يتم اكتشاف هذه المترجمات الجديدة تلقائيًا في علامة التبويب "أدوات -> خيارات -> مجموعات -> مترجمون -> اكتشاف تلقائي".

    على سبيل المثال ، يبدو لي كما يلي:



    ملاحظة: كما ترون ، بالنسبة لـ C ++ ، لا يوجد مترجم KEIL لـ MCS51 ، وهذا صحيح ، لأن يعتمد هذا المحول البرمجي فقط C. أيضاً ، سيتم فقد برنامج التحويل البرمجي SDCC هنا لنفس السبب.
  3. من الممكن أيضًا إضافة المترجمين الجدد يدويًا من خلال القائمة "أدوات -> خيارات -> مجموعات -> مترجمون -> إضافة":


  4. للمترجم ، سيتم تحديد ABI الخاص به (الهندسة المعمارية والتنسيق وعرض الكلمة) تلقائيًا. يمكن الاطلاع على المعلومات حول هذا ببساطة عن طريق النقر على المترجم.

    على سبيل المثال ، بالنسبة إلى IAR EW و architecture 8051 (MCS51) ، يبدو الأمر كما يلي:



    ملاحظة: في هذه الحالة ، تم اختيار برنامج التحويل البرمجي الذي تم اكتشافه تلقائيًا ، وبالتالي فإن حقول ABI غير نشطة هنا. ولكن عند إضافة المترجم يدويًا ، يمكن للمستخدم تحديد ABI الصحيح ، إذا تم تحديده بشكل غير صحيح لسبب ما.
  5. للمترجم ، سيتم الكشف عن جميع وحدات الماكرو الخاصة به تلقائيًا. وبالتالي ، سيتم تسليط الضوء عليها بشكل صحيح في محرر الكود.

    ملاحظة: الاستثناء هو فقط الكلمات الأساسية لبعض المترجمين (على سبيل المثال ، للعمارة 8051) ، والتي سيتم تسليط الضوء عليها مع تحذير. لكن هذه قصة أخرى.
  6. للمترجم ، سيتم الكشف عن الدلائل مع ملفات رأسه تلقائيا. وبالتالي ، سيتم تسليط الضوء عليها بشكل صحيح في محرر الكود.
  7. يتم تطبيق موزعي الأخطاء والتحذيرات الخاصة بهذه المجمعات الجديدة ، والتي يتم عرضها في لوحة المشاكل.

تحسينات في QBS


سيكون QBS جزءًا لا يتجزأ من هذا الاستعراض ، لذلك من المنطقي التحدث عن تحسيناته:

  1. إضافة دعم لهذه المجمعين الجدد (بعضها منذ الإصدار 1.13).
  2. نفذت القدرة على الكشف تلقائيا المجمعين المثبتة وإنشاء ملفات تعريف. ما هي أداة qbs-setup-toolchains المستخدمة في.

    في حالتي ، يبدو الأمر كما يلي:

    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. ... 

    لمعرفة ما تم اكتشافه هناك ، يمكنك استخدام الأداة المساعدة qbs-config-ui GUI.

    في حالتي ، يبدو الأمر كما يلي:



ميزات إنشاء المشروع


من المهم أن يكون لديك فكرة وأن تكون قادرًا على ملء خصائص المشروع لوحدات cpp و qbs بشكل صحيح.

دعونا نتطرق إلى أهمها وننظر فيها بمزيد من التفصيل:

  • qbs.toolchain - يتم تعبئة هذه الخاصية تلقائيًا عند إنشاء ملف تعريف لبرنامج التحويل البرمجي المحدد. يعرض الجدول أدناه القيم المحتملة لهذه الخاصية:

    اسم Toolchainقيمة العقار
    IAR EWآي إي آر
    KEILكايل
    SDCCSDCC

  • qbs.architecture - يتم تعبئة هذه الخاصية تلقائيًا عند إنشاء ملف تعريف لبرنامج التحويل البرمجي المحدد. يعرض الجدول أدناه القيم المحتملة لهذه الخاصية:

    اسم العمارةقيمة العقار
    ARMتسليح
    AVRمساعدة العودة الطوعية
    8051 (MCS51)mcs51

  • cpp.cLanguageVersion - تتيح لك هذه الخاصية ضبط إصدار المعيار المستخدم للغة C. الاستخدامات الممكنة مبينة في الجدول أدناه:

    اسم Toolchainالخيارات الممكنةافتراضيا
    IAR EWC89أحدث إصدار ، اعتمادًا على إصدار toolchain.
    KEILC99 (أرمينيا فقط)أحدث إصدار ، اعتمادًا على إصدار toolchain.
    SDCCC89 ، c99 ، c11أحدث إصدار ، اعتمادًا على إصدار toolchain.

    ملاحظة: من المهم ملاحظة أن سلتي أدوات IAR EW و KEIL لا توفران القدرة على تحديد إصدار قياسي. بشكل افتراضي ، يستخدمون أحدث إصدار مطبق في إصدار محدد من المحول البرمجي (إما c99 أو c11 ، تحتاج إلى البحث في ملاحظات الإصدار الخاصة بالمترجم). عادة ، يمكنك فقط تحديد الإصدار القديم من معيار c89.
  • cpp.cxxLanguageVersion - تتيح لك هذه الخاصية ضبط إصدار المعيار المستخدم للغة C ++ . الاستخدامات الممكنة مبينة في الجدول أدناه:

    اسم Toolchainالخيارات الممكنةافتراضيا
    IAR EWلاأحدث إصدار ، اعتمادًا على إصدار toolchain
    KEILc ++ 03 ، c ++ 11 (فقط لـ ARM)c ++ 03 (فقط لـ ARM)
    SDCCغير معتمدغير معتمد

  • cpp.entryPoint هو اسم النقطة في الخطوة في البرنامج المستخدم للربط. يتم تحديد الضرورة حسب وقت التشغيل المستخدم. على سبيل المثال ، إذا كنت تستخدم وقت تشغيل IAR EW (أي الارتباط بمكتباتها واستخدام البرامج النصية للرابط الخاص به) ، فسيكون اسم النقطة في هذه الحالة هو "__program_start". أي الأمر متروك تماما للمطور.
  • cpp.driverFlags هي علامات شائعة سيتم تمريرها إلى برنامج التحويل البرمجي والمجمع. في بعض الحالات ، سيتم نقلها أيضًا إلى الرابط (يعتمد هذا على نوع سلسلة الأدوات). يمكن أن تكون هذه العلامات علامات تشير إلى نوع المعالج ، المعالج الثانوي ، إلخ.

    على سبيل المثال ، بالنسبة لبرنامج التحويل البرمجي IAR EW لبنية AVR ، يمكن أن تكون هذه:

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

  • cpp.driverLinkerFlags هي العلامات التي سيتم تمريرها إلى رابط دون تغييرات ، على عكس cpp.linkerFlags ، والتي يمكن أن تكون ملفوفة بشكل تلقائي بالإضافة إلى بعض الكلمات الرئيسية. بالنسبة لمترجمي IAR EW و KEIL ، من الأفضل استخدام cpp.driverLinkerFlags ، مثل تستخدم هذه المجمعات دائمًا رابط منفصل قابل للتنفيذ للربط. من أجل برنامج التحويل البرمجي SDCC ، من الأفضل استخدام cpp.linkerFlags ، مثل تشبه أوامر هذا المحول البرمجي برنامج التحويل البرمجي GCC.
  • cpp.commonCompilerFlags هي إشارات شائعة سيتم تمريرها إلى كل من برنامج التحويل البرمجي C وبرنامج التحويل البرمجي C ++.

    على سبيل المثال ، بالنسبة لبرنامج التحويل البرمجي IAR EW ، يمكن أن يكون هذا إشارة لتمكين ملحقات معينة من هذا المحول البرمجي:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags هي علامات يتم تمريرها فقط إلى برنامج التحويل البرمجي C.
  • cpp.xxFlags هي إشارات سيتم تمريرها فقط إلى برنامج التحويل البرمجي C ++.
  • cpp.staticLibraries هي قائمة بالمكتبات التي تحتاج إلى ربط التطبيق بها. لاحظت أن cpp.dynamicLibraries غير مدعوم في هذه المترجمات (كما أعرف) ، لذلك فمن المنطقي استخدام مكتبات cpp.staticL فقط.
  • cpp.assemblerFlags - سيتم تمرير هذه الإشارات فقط إلى المجمّع.

لتحديد ملفات البرنامج النصي للرابط ، هناك علامة خاصة "linkerscript" ، والتي يجب عليك استخدامها ، على سبيل المثال:

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

ملاحظة: السبب هو أنه بالنسبة للمترجمين المختلفين ، هناك خيارات مختلفة لتسمية هذه الملفات. بالنسبة لدول مجلس التعاون الخليجي نفسها ، يمكن أن تكون ملفات ذات امتدادات * .ld ، * .x ، * .xn ، * .xbn ، وما إلى ذلك (ماذا يمكننا أن نقول عن المترجمين الآخرين ...). لذلك ، فقد تقرر عدم عناء وضع علامات على جميع امتدادات الملفات الممكنة لمجمعين معينين ، ولكن ببساطة استخدام علامة linkerscript للغرض والوضع المقصودين.

لمعرفة كيف يعمل كل شيء ، يوفر QBS مجموعة من الأمثلة البسيطة التي "تثير" ساق فقط وتومض مؤشر LED.

ما هو مع تصحيح الأخطاء


لسوء الحظ ، فإن وضع التصحيح أمر محزن. تستخدم المنتجات (IDEs) IAR EW و KEIL مصححاتهما ، لكن منذ ذلك الحين نظرًا لأن هذه المنتجات مملوكة ، فمن غير الممكن الحصول على وصف لعملية تشغيل بروتوكولات مصحح الأخطاء هذه. الخيار الوحيد هو تجربة هندسة الإضافات الإضافية لـ Eclipse (على سبيل المثال ، يوفر IAR EW هذه الإضافات) ، ولكن هذا يتطلب حافزًا خطيرًا.

لكنني سأكون سعيدًا بعض الشيء إذا قلت أنه بالنسبة لبنية ARM يمكنك استخدام مصحح أخطاء GDB. على الأقل كان هذا الأمر مفيدًا بالنسبة لي من أجل IAR EW (ولكن ، لم ينجح شيء ما مع KEIL ، ربما يجب الإشارة إلى الرابط الإضافي هناك).

ما التالي


أنا هنا مفسد قليلاً ، سأقول أنه في الإصدارات القادمة (لا أعرف أي منها) ، يجب إضافة بنيات STM8 و MSP430 ، وكذلك في QBS للمولدات سيتم تنفيذها في مشاريع IAR EW و KEIL الأصلية (والتي ستتيح ، على سبيل المثال ، تصحيح المشاريع).

في هذه المذكرة ، أنهي قصتي ، شكراً لجميع الذين سوف ينتبهون إلى هذا الاستعراض.

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


All Articles