سي للأنظمة المضمنة
'''لغة سي المدمجة''' هي مجموعة من الامتدادات [[سي (لغة برمجة)|للغة البرمجة سي]] والتي أضيفت من قِبل لجنة مقاييس لغة السي لعنونة مواضيع القواسم المشتركة التي توجد بين امتدادات السي [[نظام مضمن|للأنظمة المدمجة]] المختلفة، فتاريخيًا برمجة لغة السي المدمجة تتطلب امتدادات غير قياسية للغة السي لتدعيم الخصائص الغريبة مثل: حساب النقطة الثابتة، وبنوك الذاكرة المميزة المتعددة، والعمليات الأساسية [[وحدات الإدخال والإخراج|للإدخال والإخراج]].
في عام 2008 قامت لجنة مقاييس لغة السي بتطوير لغة السي لتوفي هذه القضايا بتوفير مقياس مشترك لكل عمليات التنفيذ لتقيدها، وهي تشمل بعض الخصائص غير المتاحة في لغة السي العادية، مثل: حساب النقطة الثابتة، ومساحات العنوين المسماة، وعنونة عتاد الإدخال/الإخراج الأساسية.

وتستخدم لغة السي المدمجة أغلب الصياغات (syntax)، والدلالات (semantics)، مثل: الدالة الأساسية main()، وتعريف المتغيرات، والإعلان عن نوع البيانات، والجمل الشرطية (if, switch, case)، والتكرارات (while, for)، والدوال، والترتيبات وسلاسل الأحرف، والتنظيمات والاتحاد، والعمليات على مستوى العدد الثنائي (bit)، والكلِّيات (macros) باستخدام المعالج التمهيدي C preprocessor.<ref>{{استشهاد بخبر
| مسار = https://atadiat.com/ar/c-preprocessor-part-1/
| عنوان = C preprocessor المعالج التمهيدي للغة سي - Atadiat
| صحيفة = Atadiat
| لغة = ar-AR
| تاريخ الوصول = 2018-01-01
| مسار أرشيف = https://web.archive.org/web/20180102012953/https://atadiat.com/ar/articles/c-preprocessor-part-1/ | تاريخ أرشيف = 02 يناير 2018 }}</ref>

== ضرورتها ==

خلال مستهل سنوات الأنظمة القائمة على [[معالج دقيق|المعالجات الدقيقة]]، وضعت برامج باستخدام لغة التجميع (assembly) وأصهرت في EPROMs. واستخدمت لأنه لم يوجد آلية للعثور على ما يقوم البرنامج بتنفيذه، وقد استخدمت [[ثنائي باعث للضوء|الدايودات الباعثة للضوء]] (LED)، والمفاتيح، وما إلى ذلك للتحقق من التنفيذ الصحيح للبرنامج، وقد امتلك بعض المطورين «المحظوظين جدا» محاكيات في الدائرة (ICEs)، ولكنها كانت مكلفة للغاية وكان لا يمكن الاعتماد عليها تمامًا كذلك، وكلما تقدم الزمن فإنَّ استخدام [[محول برمجي|المجمعات]] الخاصة بلغة التجميع فقط ك[[لغة برمجة]] انخفض وانتقلت الأنظمة المدمجة إلى لغة السي كلغة برمجة بشكل أساسي، فلغة السي هي الأكثر استخدامًا على نطاق واسع للغة البرمجة المدمجة للمعالجات/وحدات التحكم، وكذلك فإنَّ [[لغة التجميع]] (Assembly) تُستخدم كذلك، ولكن لتنفيذ تلك الأجزاء من التعليمات البرمجية حيث دقة توقيت عالية جدًّا، وكفاءة في حجم الكود البرمجي، وما إلى ذلك من المتطلبات الرئيسية.<ref>[https://blog.udemy.com/embedded-c-tutorial/ Embedded C Tutorial : A Beginner&#039;s Guide<!-- عنوان مولد بالبوت -->] {{Webarchive|url=https://web.archive.org/web/20161201213943/https://blog.udemy.com/embedded-c-tutorial/ |date=01 ديسمبر 2016}}</ref>

ولأنَّ برامج لغة التجميع محددة لكل معالج، فإنَّ لغة التجميع لا تقدم قابلية النقل عبر الأنظمة المختلفة (porting)، وللتغلب على هذا العيب، ظهرت عدة [[لغة برمجة عالية المستوى|لغات عالية المستوى]] بما في ذلك لغة السي، وأيضا ظهرت بعض اللغات الأخرى مثل PLM ، وMODULA-2، و[[باسكال (لغة برمجة)|باسكال]]، وغيرها، ولكن لم تجد قبولاً واسعًا، ومن بين هؤلاء بينما حصلت لغة السي على قبول واسع ليس فقط للأنظمة المدمجة، ولكن كذلك في [[تطبيقات سطح المكتب]]، وعلى الرغم من أنَّ لغة السي قد خسرت بريقها كلغة الاتجاه السائد للتطبيقات الأغراض العامة، فإنها لا تزال لها تواجد قوي في البرمجة المضمنة، ونظرًا للقبول الواسع للغة السي في الأنظمة المدمجة، ظهرت أنواع مختلفة من أدوات الدعم مثل المجمعين والمجمعات التبادلية، والـ ICE، إلخ وكل هذا التطور سهَّل من تطوير النظم المدمجة باستخدام لغة السي، ويبدو أنَّ لغة التجميع كانت خيارًا واضحًا لبرمجة الأجهزة المدمجة، ومع ذلك فإنَّ استخدام لغة التجميع يقتصر على وضع أكواد فعالة من حيث الحجم والسرعة، وكذلك، فإنَّ أكواد لغة التجميع تؤدي إلى ارتفاع تكاليف تطوير البرمجيات كما أنَّ قابلية النقل للكود غير متاحة، فالأكواد الصغيرة ليست مشكلة كبيرة، ولكن البرامج/المشاريع الكبيرة تصبح صعبة التعامل على نحو متزايد في لغة التجميع، ولقد أصبح من الصعب العثور على مبرمجين بلغة التجميع في الوقت الحاضر، وبالتالي يُفضل البرمجة باللغات عالية المستوى لبرمجة الأنظمة المدمجة.<ref>[https://www.engineersgarage.com/tutorials/embedded-c/ Embedded C | What is Embedded C | Difference between C and Embedded C Programming - EngineersGarage<!-- عنوان مولد بالبوت -->] {{Webarchive|url=https://web.archive.org/web/20180720225656/https://www.engineersgarage.com/tutorials/emebedded-c-language |date=20 يوليو 2018}}</ref>

== المميزات ==
* صغيرة وأبسط للتعلم، والفهم، والبرمجة وتصحيح الأخطاء.
* بالمقارنة مع لغة التجميع، كود لغة السي المكتوب أكثر موثوقية وتوسعية، وأكثر قابلية للنقل بين بيئات تنفيذ مختلفة.
* مطورو لغة السي متاحون لجميع الأجهزة المدمجة تقريبًا المستخدمة في تلك الأيام، وهناك مجموعة كبيرة من المبرمجين ذوي الخبرة بلغة السي.
* خلافًا للغة التجميع، فإنَّ لغة السي لديها ميزة استقلال المعالج، فإنها ليست محددةً لأي من المعالجات الدقيقة/المتحكمات الخاصة أو أي نظام، وهذا يجعلها مريحة للمستخدم لتطوير البرامج التي يمكن تشغيلها على معظم الأنظمة.
* ولأنَّ لغة السي تجمع بين وظائف لغة التجميع وميزات لغات عالية المستوى، يتم التعامل مع لغة السي كـ«لغة الكمبيوتر من المستوى المتوسط» أو «لغة تجميع على مستوى عال».
* إنها ذات كفاءة عالية
* تدعم الوصول إلى المدخلات/المخرجات، وتوفر سهولة إدارة المشاريع المدمجة الضخمة.
* تُستخدم لغة جافا أيضا في العديد من الأنظمة المدمجة ولكن برامج جافا تتطلب آلة جافا الافتراضية (JVM)، والتي تستهلك الكثير من الموارد، وبالتالي لم يتم استخدامها للأجهزة المدمجة الصغيرة.

وكذلك، فإنَّ [[لغة برمجة متوسطة المستوى|لغات البرمجة متوسطة المستوى]] مثل باسكال، و[[فورتران]] تقدِّم بعض تلك المميزات.

== المراجع ==
{{مراجع}}
{{سي}}
{{شريط بوابات|برمجة الحاسوب|برمجيات|تقانة المعلومات}}

[[تصنيف:نظم مضمنة]]
[[تصنيف:عائلة لغة البرمجة سي]]
[[تصنيف:سي (لغة برمجة)]]
لغة سي المدمجة هي مجموعة من الامتدادات للغة البرمجة سي والتي أضيفت من قِبل لجنة مقاييس لغة السي لعنونة مواضيع القواسم المشتركة التي توجد بين امتدادات السي للأنظمة المدمجة المختلفة، فتاريخيًا برمجة لغة السي المدمجة تتطلب امتدادات غير قياسية للغة السي لتدعيم الخصائص الغريبة مثل: حساب النقطة الثابتة، وبنوك الذاكرة المميزة المتعددة، والعمليات الأساسية للإدخال والإخراج.
في عام 2008 قامت لجنة مقاييس لغة السي بتطوير لغة السي لتوفي هذه القضايا بتوفير مقياس مشترك لكل عمليات التنفيذ لتقيدها، وهي تشمل بعض الخصائص غير المتاحة في لغة السي العادية، مثل: حساب النقطة الثابتة، ومساحات العنوين المسماة، وعنونة عتاد الإدخال/الإخراج الأساسية.

وتستخدم لغة السي المدمجة أغلب الصياغات (syntax)، والدلالات (semantics)، مثل: الدالة الأساسية main()، وتعريف المتغيرات، والإعلان عن نوع البيانات، والجمل الشرطية (if, switch, case)، والتكرارات (while, for)، والدوال، والترتيبات وسلاسل الأحرف، والتنظيمات والاتحاد، والعمليات على مستوى العدد الثنائي (bit)، والكلِّيات (macros) باستخدام المعالج التمهيدي C preprocessor.

 ضرورتها 

خلال مستهل سنوات الأنظمة القائمة على المعالجات الدقيقة، وضعت برامج باستخدام لغة التجميع (assembly) وأصهرت في EPROMs. واستخدمت لأنه لم يوجد آلية للعثور على ما يقوم البرنامج بتنفيذه، وقد استخدمت الدايودات الباعثة للضوء (LED)، والمفاتيح، وما إلى ذلك للتحقق من التنفيذ الصحيح للبرنامج، وقد امتلك بعض المطورين «المحظوظين جدا» محاكيات في الدائرة (ICEs)، ولكنها كانت مكلفة للغاية وكان لا يمكن الاعتماد عليها تمامًا كذلك، وكلما تقدم الزمن فإنَّ استخدام المجمعات الخاصة بلغة التجميع فقط كلغة برمجة انخفض وانتقلت الأنظمة المدمجة إلى لغة السي كلغة برمجة بشكل أساسي، فلغة السي هي الأكثر استخدامًا على نطاق واسع للغة البرمجة المدمجة للمعالجات/وحدات التحكم، وكذلك فإنَّ لغة التجميع (Assembly) تُستخدم كذلك، ولكن لتنفيذ تلك الأجزاء من التعليمات البرمجية حيث دقة توقيت عالية جدًّا، وكفاءة في حجم الكود البرمجي، وما إلى ذلك من المتطلبات الرئيسية.Embedded C Tutorial : A Beginner's Guide 

ولأنَّ برامج لغة التجميع محددة لكل معالج، فإنَّ لغة التجميع لا تقدم قابلية النقل عبر الأنظمة المختلفة (porting)، وللتغلب على هذا العيب، ظهرت عدة لغات عالية المستوى بما في ذلك لغة السي، وأيضا ظهرت بعض اللغات الأخرى مثل PLM ، وMODULA-2، وباسكال، وغيرها، ولكن لم تجد قبولاً واسعًا، ومن بين هؤلاء بينما حصلت لغة السي على قبول واسع ليس فقط للأنظمة المدمجة، ولكن كذلك في تطبيقات سطح المكتب، وعلى الرغم من أنَّ لغة السي قد خسرت بريقها كلغة الاتجاه السائد للتطبيقات الأغراض العامة، فإنها لا تزال لها تواجد قوي في البرمجة المضمنة، ونظرًا للقبول الواسع للغة السي في الأنظمة المدمجة، ظهرت أنواع مختلفة من أدوات الدعم مثل المجمعين والمجمعات التبادلية، والـ ICE، إلخ وكل هذا التطور سهَّل من تطوير النظم المدمجة باستخدام لغة السي، ويبدو أنَّ لغة التجميع كانت خيارًا واضحًا لبرمجة الأجهزة المدمجة، ومع ذلك فإنَّ استخدام لغة التجميع يقتصر على وضع أكواد فعالة من حيث الحجم والسرعة، وكذلك، فإنَّ أكواد لغة التجميع تؤدي إلى ارتفاع تكاليف تطوير البرمجيات كما أنَّ قابلية النقل للكود غير متاحة، فالأكواد الصغيرة ليست مشكلة كبيرة، ولكن البرامج/المشاريع الكبيرة تصبح صعبة التعامل على نحو متزايد في لغة التجميع، ولقد أصبح من الصعب العثور على مبرمجين بلغة التجميع في الوقت الحاضر، وبالتالي يُفضل البرمجة باللغات عالية المستوى لبرمجة الأنظمة المدمجة.Embedded C | What is Embedded C | Difference between C and Embedded C Programming - EngineersGarage 

 المميزات 
 صغيرة وأبسط للتعلم، والفهم، والبرمجة وتصحيح الأخطاء.
 بالمقارنة مع لغة التجميع، كود لغة السي المكتوب أكثر موثوقية وتوسعية، وأكثر قابلية للنقل بين بيئات تنفيذ مختلفة.
 مطورو لغة السي متاحون لجميع الأجهزة المدمجة تقريبًا المستخدمة في تلك الأيام، وهناك مجموعة كبيرة من المبرمجين ذوي الخبرة بلغة السي.
 خلافًا للغة التجميع، فإنَّ لغة السي لديها ميزة استقلال المعالج، فإنها ليست محددةً لأي من المعالجات الدقيقة/المتحكمات الخاصة أو أي نظام، وهذا يجعلها مريحة للمستخدم لتطوير البرامج التي يمكن تشغيلها على معظم الأنظمة.
 ولأنَّ لغة السي تجمع بين وظائف لغة التجميع وميزات لغات عالية المستوى، يتم التعامل مع لغة السي كـ«لغة الكمبيوتر من المستوى المتوسط» أو «لغة تجميع على مستوى عال».
 إنها ذات كفاءة عالية
 تدعم الوصول إلى المدخلات/المخرجات، وتوفر سهولة إدارة المشاريع المدمجة الضخمة.
 تُستخدم لغة جافا أيضا في العديد من الأنظمة المدمجة ولكن برامج جافا تتطلب آلة جافا الافتراضية (JVM)، والتي تستهلك الكثير من الموارد، وبالتالي لم يتم استخدامها للأجهزة المدمجة الصغيرة.

وكذلك، فإنَّ لغات البرمجة متوسطة المستوى مثل باسكال، وفورتران تقدِّم بعض تلك المميزات.

 المراجع 

تصنيف:نظم مضمنة
تصنيف:عائلة لغة البرمجة سي
تصنيف:سي (لغة برمجة)