مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الخميس فبراير 20, 2014 10:39 am

مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مقدمة :
يمكن برمجة الميكروكونترولر باستخدام أحد اللغات عالية المستوى . من اللغات عالية المستوى الشائعة الاستخدام : البيسك BASIC والبسكال PASCAL والسى "C" . ولغة السى ، على الأرجح هى اللغة الأكثر استخداما فى برمجة الميكروكونترولر بسبب سهولتها وقوتها . لقد استخدمت لغة السى خلال المدة من 10 إلى 15 سنة الماضية ومرت خلال نمو هائل . اليوم ، يبدو أنه لا نهاية للأمداد بمترجمات (كومبيلر) للغة السى ، ذات سعر منخفض وجودة عالية ، موجهة إلى أى نوع من الأجهزة القائمة على الكمبيوتر ، من الكمبيوتر الشخصى PC إلى أصغر شريحة ميكروكونترولر 8 طرف .
قبل إنشاء لغة السى ، كانت الميكروبروسسور والميكروكونترولر يجرى برمجة الشريحة المستهدفة باستخدام اللغة الأصلية (الأم) وهى "لغة الأسمبلى أو التجميع " . لغة الأسمبلى كانت لغة صعبة التعلم . أيضا ، كان من الصعب ويستغرق وقتا طويلا لإنشاء (تطوير) وصيانة التطبيقات المعقدة باستخدام لغة الأسمبلى . على سبيل المثال ، إنشاء تطبيق رياضى باستخدام حساب الأعداد الحقيقية (بعلامة العشرية) يستغرق أياما ، إن لم يكن أسابيع . كان الكود (التعليمات البرمجية) التى يتم إنشاؤها كبيرة بحيث كان من الصعب تعديله أوتصحيحه . بالإضافة إلى ذلك ، فإن الكود كان محددا من أجل الميكروبروسسور المستهدف . فإذا ما كان مطلوبا التحديث (الترقية) إلى ميكروبروسسور مخالف عندئذ ، فى معظم الحالات ، فإنه من الضرورى إعادة كتابة الكود بالكامل ، واستهلاك الكثير من الوقت والجهد .
فى المقابل ، لغة السى هى لغة محمولة (قابلة للنقل) . وبشكل عام ، البرنامج المكتوب بلغة السى من أجل ميكروبروسسور معين يمكن بسهولة تعديله واستخدامه من أجل ميكروبروسسور آخر . كما أنه يمكن إنشاء وصيانة البرامج المعقدة للغاية باستخدام لغة السى .
الهدف الرئيسى من هذا الموضوع هو تعريف القراء الجدد على لغة السى ، من خلال لمحة بسيطة على معالمها الأساسية ، فى محاولة منهم لبدء البرمجة فى وقت مبكر . يتم شرح لغة السى بطريقة التدريبات ، مع العديد من الأمثلة ، وبهذه الطريقة يمكن للقراء اكتساب الثقة والبدء فى عمل برامج (كود) على الفور . ولكن على القارىء أن يقدر أن لغة السى هى لغة غنية بالعديد من الميزات ، وأن هذا الموضوع ليس بكتاب عن لغة السى ، ولكن هنا سوف يتم تغطية الأجزاء ذات الصلة بالموضوع .

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الخميس فبراير 20, 2014 9:04 pm

لغة السى للميكروكونترولر PIC مع المترجم ميكروسى برو :
اكتسب المترجم (الكومبيلر) mikroC Pro شعبية كبيرة فى السنوات الأخيرة ، وذلك بسبب انخفاض سعرة ، وسهولة استخدامه والدعم الكامل للوح تطوير مختلفة . لقد تم تطوير هذا المترجم بمعرفة MikroElektronika ( الموقع www.mikroe.com ) وهو واحد من أسهل المترجمات للتعلم مع موارد غنية ، مثل عدد كبير من مكتبات الدول المتضمنة (المدمجة) فى بنائه . يوفر المترجم "بيئة تطوير متكاملة" IDE مع "محرر مدمج" ، و"مترجم" ، و"محاكى" و"مصحح بالدائرة ". يمكن للمستخدمين كتابة البرنامج باستخدام المحرر المدمج ، ثم ترجمته ، ومحاكلة البرنامج بنقر بضعة أزرار . يمكن تحميل البرنامج النهائى إلى الميكروكونترولر المستهدف عن طريق النقر على زر . بالإضافة إلى المحاكاة ، يمكن للمستخدمين تنفيذ التصحيح فى "الوقت الحقيقى" للتطبيقات باستخدام المصحح المدمج . موقع MikroElektronika يوفر نسخة تجريبية من المترجم محدودة لبرنامج بسعة 2 كيلوبايت من أجل اتعليم الخصائص الأساسية للمترجم .
روابط تحميل النسخة التجريبية :

http://www.mikroe.com/mikroc/pic/


http://mediafire.com/?bz8fav2dwyee5o4


برنامجك الأول لبرمجة الميكروكونترولر PIC مع المترجم ميكروسى برو :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الخميس فبراير 20, 2014 9:10 pm


برنامجك الأول لبرمجة الميكروكونترولر PIC مع المترجم ميكروسى برو :
الشكل أدناه يبين برنامج بسيط جدا لبرمجة الميكروكونترولر PIC مع المترجم ميكروسى برو .


هذا البرنامج يقوم بتوصيل on لثمانية ليدات متصلة بالمنفذ port B للميكروكونترولر PIC . ثم بعد تأخير 500 ملى ثانية يتم فصل off لليدات الثمانية .
لا تقلق إذا كنت لا تفهم عمل هذا البرنامج فى هذه المرحلة ، حيث أن كل شىء سوف يكون واضحا كلما تقدمنا. فيما يلى شرح لتفاصيل بعض العناصر المستخدمة فى البرنامج :

1- التعليقات Comments
تستخدم التعليقات فى البرامج لتوضيح عمل البرنامج . على لرغم من أن استخدام التعليقات هو أمر اختيارى ، إلا أنه من المستحسن بشدة أن تستخدم العديد من التعليقات قدر الممكن فى برامجك ، حيث أن التعليقات تجعل برامجك قابلة للقراءة وسهلة الصيانة . تخيل كيف أنه سيكون من الصعب كتابة برنامج معقد بدون أى تعليقات ، ثم محاولة تعديله بعد عدة أشهر . يتم تجاهل جميع سطور التعليقات بواسطة المترجم .
فى المترجم ميكروسى برو ، يمكن أن تكون التعليقات من نوعين : "التعليقات الطويلة" ، و"التعليقات القصيرة" .
التعليقات الطويلة :
تبدأ التعليقات الطويلة بزوج الحروف ( /* ) وتنتهى بزوج الحروف ( */ ) . عادة تستخدم التعليقات الطويلة فى بداية البرنامج لوصف تفاصيل البرنامج ، مثل ما يقوم به البرنامج ، وأنى نوع من الهاردوير يستخدم ، ومن هو المؤلف ، وتاريخ إنشاء البرنامج ، واسم ملف البرنامج ، وتاريخ الإصدار ، وهلم جرا (كما هو مبين بالشكل أدناه) . كما تستخدم التعليقات الطويلة أيضا بداخل البرنامج لوصف عمل جزء من البرنامج ، على سبيل المثال بارامترات (أدلة ، معلمات) الدوال ، والخوارزمية (إسلوب البرمجة) المستخدمة وهلم جرا .

التعليقات القصيرة :
تبدأ التعليقات القصيرة بزوج الحروف ( // ) . لا يتم إنهاء التعليقات القصيرة بحروف ، ويمكن استخدامها فى سطر واحد فقط ، بدءا من أى مكان بالسطر وحتى نهايته فقط . عموما ، تستخدم التعليقات القصيرة بعد عبارات البرنامج لتصف ما تقوم به العبارة ( كما هو مبين بالشكل أدناه) .



2- بداية ونهاية البرنامج :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الخميس فبراير 20, 2014 9:37 pm

2-    بداية ونهاية البرنامج :

فى الميكروسى برو :

·       "يبدأ البرنامج" مع الكلمات الأساسية (المخصوصة – المحجوزة) :


الكود:


void main()



·       بعدها ، يتم استخدام قوس الفتح المجعد ( { ) للإشارة (لبيان) إلى بداية "جسم البرنامج" .

·       يتم إنهاء البرنامج بقوس الغلق المجعد ( } ) . وبالتالى يكون هيكل بناء البرنامج بالصيغة التالية :



الكود:


void main()

{

Program body

}



·       يتكون جسم البرنامج من عبارات statements . كل عبارة برنامج يجب أن تنتهى بحرف الفاصلة المنقوطة  ( ; ) للإشارة إلى نهاية العبارة ، وإلا يتم توليد خطأ بواسطة المترجم .

أمثلة :


الكود:


k = 50;            //correct

i = k+5;           //correct

k = 50              //error




3-    المسافات البيضاء :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الخميس فبراير 20, 2014 11:40 pm

4-    المسافات (المساحات) البيضاء :

تتكون المسافات (المساحات) البيضاء فى البرنامج من "المسافات" spaces ، و "التبويبات" tabs ، ،وحروف "السطر الجديد" newline ، و"الفراغات" blanks . يتم تجاهل هذه لحروف من قبل المترجم . وبالتالى فإن السطور التالية متطابقة :


الكود:


k = 20; p = 50;

or

k = 20;

p = 50;

or

k = 20;

p =50;

or

k=20;

p=

20;




فى بعض التطبيقات ، قد يكون لدينا سلسلة نصية طويلة والتى قد نرغب فى تمديدها على عدة أسطر . يتم استخدام الشرطة المائلة للخلف ( \ ) لربط السلاسل النصية الممتدة على عدة أسطر . على سبيل المثال :



الكود:


"My new mikroC\

Compiler"



تترجم على أنها :


الكود:


"My new mikroC Compiler"



5-    أسماء المتغيرات :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 1:15 pm

4- أسماء المتغير:
• فى المترجم ميكروسى برو ، أسماء المتغير يمكن أن تبدأ بحرف أو الشرطة السفلية ( _ ) .
• أسماء المتغير يمكن أن تتضمن أى حرف من ( a )  إلى ( z )  ومن ( A ) إلى ( Z ) والأرقام من ( 0 ) إلى ( 9 ) .
• اسم المتغير يمكن أن يكون بطول حتى 31 حرف .
• بعض أمثلة أسماء المتغير الصحيحة :
 


Total
Sum
Average
My_Variable
username
MaxTotal
_Name

• وفيما يلى بعض الأمثلة لأسماء متغير غير صحيحة :



%name
?Total
7Sum
(Max
12count
• الأسماء حساسة لحالة الحرف وبالتالى فإن المتغيرات بأسماء بحروف صغيرة تختلف عن المتغيرات بأسماء بحروف كبيرة . وبالتالى فأن المتغيرات التالية جميعها مختلفة :


Total
total
ToTal
TotaL
TOTAL
TOTal
5- الأسماء المحجوزة :
فى المترجم ميكروسى برو يتم حجز بعض الأسماء من أجل المترجم ، وهذه الأسماء لا يمكن أن تستخدم كأسماء للمتغيرات . الجدول أدناه يعطى قائمة بهذه الأسماء المحجوزة . على سبيل المثال ، أسماء المتغيرات التالية غير قانونية :  


for
while
char
int
return
signed
const





6- أنواع المتغيرات :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 6:39 pm

6- أنواع المتغير:

المترجم ميكروسى برو هو مترجم لغة مكتوبة بدقة ، وهذا يعنى أن كل كائن ، أو تعبير ، أو دالة يجب أن يكون له" نوع معرف" قبل أن يتم ترجمة البرنامج . مترجم الميكروسى برو يدعم العديد من أنواع البيانات "المعرفة مسبقا" و "المعرفة بمعرفة المستخدم" ، بما فى ذلك "البايتات بإشارة أو بدون إشارة" ، و"الأعداد الصحيحة بالاحجام المختلفة" ، و"الأعداد الحقيقية بمختلف الدقة" ، و"المصفوفات" ، و"الهياكل أو الأبنية" ، وهلم جرا . نوع المتغير يعرف "كم عدد مساحات الذاكرة" التى يجب أن تخصص (تعين) من أجل المتغير بالذاكرة ، وكيف يتم "التعامل مع بتات" المتغير .



يمكن تقسيم أنواع المتغير إلى مجموعتين : أنواع "أساسية" ، وأنواع "مشتقة" .

الأنواع الأساسية تمثل الأنواع التى لا يمكن تقسيمها إلى أجزاء أصغر . هذه الأنواع هى : void (خالى) ، وchar (حرف) ، و int (عدد صحيح) و float (عدد حقيقيى أى يحتوى على علامة عشرية متحركة) ، و double ( عدد حقيقى مضاعف ) ، جنبا إلى جنب مع التهيئة المختلفة : short (قصير) و long (طويل) و signed (بإشارة) و unsigned (بدون إشارة) .



الأنواع المشتقة معروفة أيضا بالأنواع المشيدة (المبنية) وهى تتضمن : "المؤشرات" ، و"الأبنية" ، و"المصفوفات" ، و"الاتحادات" .

مترجم الميكروسى برو يدعم الأنواع الأساسية للمتغير المبينة بالجدول التالى :







فيما يلى أمثلة لهذه الأنواع من المتغير :

· المتغيرات :


الكود:


unsigned char

or

unsigned short int



هى متغيرات "بدون إشارة" 8 بت ، تحتل "واحد بايت" فقط من الذاكرة ولها قيم فى المدى من (0) إلى (255) . فى المثال التالى ، المتغير Sum يخصص (يعين) له القيمة (255) :




الكود:


unsigned char Sum = 225;

or

unsigned char Sum;

Sum = 225;



· والمتغيرات :


الكود:


unsigned int



هى متغيرات "بدون إشارة" 16 بت ، تحتل "2 بايت" من الذاكرة ولها قيم فى المدى من (0) إلى (65 535) . فى المثال التالى ، المتغير Total يخصص له القيمة (64 500) :



الكود:


unsigned int Total = 64500;



· والمتغيرات :


الكود:


unsigned long int



هى متغيرات بدون إشارة 32 بت ، تحتل 4 بايت من الذاكرة ولها قيم فى المدى من (0) إلى

4 294 967 295 . فى المثال التالى ، المتغير Sum يخصص له القيمة 4 200 000 000 :



الكود:


unsigned long int Sum = 4200000000;



· والمتغيرات :


الكود:


signed char

or

signed short int




هى متغيرات "بإشارة" 8 بت ، نحتل واحد بايت فقك من الذاكرة ولها قيم فى المدة من (-128) إلى (+127) . فى المثال التالى المتغير Total يخصص له القيمة (-240) :


الكود:


signed char Total = -240;



· والمتغيرات :


الكود:


signed int



هى متغيرات بإشارة 16 بت ، تحتل 2 بايت من الذاكرة ولها قيم فى المدى من (-32 768) إلى (+32 767) . فى المثال التالى ، المتغير Sum يخصص له القيمة (-31 500) :



الكود:


signed int Sum = -31500;



· والمتغيرات :


الكود:


signed long int



هى متغيرات بإشار 32 بت ، تحتل 4 بايت من الذاكرة ولها قيم فى المدى من (-2 147 483 648) إلى

(+2 147 483 647) . فى المثال التالى ، المتغير Sum يخصص له القيمة (2 050 480 000) :



الكود:


signed long int Sum = 2050480000;



· أنواع بيانات العدد الحقيقى هى : float, double , long double . فى المثال التالى ، المتغير Volume يخصص له القيمة (23.45) :



الكود:


float Volume = 23.45;

or

float Volume;

Volume = 23.45;




7- الثوابت :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 9:15 pm

7- الثوابت :


الثوابت مهمة جدا فى برمجة الميكروكونترولر PIC مع المترجم ميكروسى برو ، وخاصة إذا كانت ذاكرة البيانات RAM لها حجم محدود . يتم تخزين المتغيرات الثابتة فى ذاكرة البرنامج (الفلاش) ، وبالتالى تحرير مساحة ذاكرة بيانات RAM قيمة .

فى المترجم ميكروسى برو ، يمكن أن تكون الثوابت : حروف ، أعداد صحيحة ، أعداد حقيقية ، سلاسل نصية ، ومتغيرات التعداد المرتبة .



7-1 الثوابت الحرفية Character Constants :


الثابت الحرفى يحتل بايت واحد من ذاكرة البرنامج . يتم إعلان (تعريف) الثابت عن طريق تحديد الحرف بين علامتى اقتباس فردية 'F'. فى المثال التالى ، يتم إعلان المتغير FirstName كحرف ثابت وتخصيص القيمة ‘D’ له :


الكود:


const FirstName;

FirstName = ‘D’;


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 9:21 pm

7-2 ثوابت العدد الصحيح Integer Constants :



· ثوابت العدد الصحيح تحتل 2 بايت من ذاكرة البرنامج . هذه الثوابت يمكن تحديدها باستخدام الأساس العشرى ، أو السداسى عشر ، أو الثمانى ، أو الثنائى . نوع بيانات الثابت يتم اشتقاقه بواسطة المترجم تلقائيا ، استنادا على قيمة الثابت . على سبيل المثال ، الثابت بالقيمة (130) يتم حفظه كنوع حرفى بدون إشارة unsigned char ، والثابت بالقيمة 12 000 يتم حفظه كعدد صحيح بدون إشارة unsigned int ، والثابت بالقيمة -22 500)) يتم حفظه كعدد صحيح بإشارة signed int .

فى المثال التالى يتم تعريف كل من MIN و MAX كثوابت بالقيمة (0) و (200) على الترتيب :





الكود:


const MIN = 0;

const MAX = 200;


· الأعداد السداسية عشر لها مدى من (0) إلى (9) ومن (A) إلى (F) . يتم تحديد الثوابت السداسية عشر عن طريق إدراج الحروف (0x) أو (0X) أمام العدد . فى المثال التالى ، يتم تعريف الثابت MAX ليكون له القيمة السداسية عشر (FFF) :



الكود:


const MAX = 0xFFF;


· الأعداد الثمانية لها مدى من (0) إلى (7) . يتم تحديد الثوابت الثمانية عن طريق إدراج الرقم صفر (0) أمام العدد . فى المثال التالى ، يتم تعريف الثابت MAX ليكون له القيمة الثمانية (177) :



الكود:


const MAX = 0177;


· الأعداد الثنائية يمكن أن تكون (0) أو (1) . يتم تحديد هذه الأعداد عن طريق إدراج الحروف (0b) أو (0B) أمام العدد . فى المثال التالى ، يتم تعريف الثابت MIN ليكون له القيمة الثنائية 01101111


الكود:


const MIN = 0b01101111;


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 9:24 pm

7-3 ثوابت الأعداد الحقيقية Floating Point Constants :



ثوابت الأعداد الحقيقية هى ثوابت أعداد غير صحيحة لها جزء عشرى ، ونقطة (علامة عشرية) ، وجزء كسرى . بالإضافة إلى ذلك ، من أجل الأعداد الكبيرة جدا أو الأعداد الصغيرة جدا يمكن تحديد الجزء الأسى عن طريق إدراج الحرف ( e ) أو الحرف ( E ) مع قيمة الأس فى نهاية العدد . فى المثال التالى ، المتغير MIN يعطى القيمة 0.15E-2 والمتغير MAX يعطى القيمة 25.5E10 :



الكود:


const MIN = 0.15E-2;

const MAX = 25.5E10;


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 9:26 pm



7-4 ثوابت السلسلة النصية String Constants :



تتكون ثوابت السلسة النصية من مجوعات من الحروف محاطة بعلامتى اقتباس مزدوجة ("..") . فيما يلى مثال لثابت سلسلة نصية :



الكود:


"This is a string"



كما سوف نرى لاحقا أن السلاسل النصية تصنع من مصفوفات الحروف .


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 9:29 pm



7-5 ثوابت التعداد المرتب Enumerated Constants :



يستخدم نوع بيانات التعداد من أجل تمثيل "ملخص لمجموعة متقطعة من القيم مع الأسماء الرمزية المناسبة". التعداد المرتب يجعل البرنامج أسهل فى المتابعة .

يتم إعلان (تعريف) المتغيرات من النوع enum بنفس طريقة المتغيرات الأخرى . على سبيل المثال ، فيما يلى إعلان لنوع التعداد المرتب :











الكود:


enum colours

{

Black,

Red,

Green,

Blue,

Cyan

} clr;





فى هذا المثال : Black=0, Red=1, Green=2 وهلم جرا . المعرف (clr) يمكن أن يأخذ أى قيمة من الألوان المحددة ، أو أى قيمة لعدد صحيح :





الكود:


clr = Red; //clr = 1

or

clr = 1; //same as above



ت

رتيب الثوابت فى نوع التعداد المرتب يمكن أن يكون مصرح به بإعادة الترتيب باستخدام قيم محددة . أى أسماء بدون تهيئة سوف تتزايد بواحد بالنسبة للقيمة السابقة ، كما فى المثال التالى :



الكود:


enum colours

{

Black,            //value 0

Red,                //value 1

Green = 4,      //value 4

Blue,              //value 5

Cyan              //value 6

} clr;





فيما يلى مثال آخر :





الكود:


enum Weekdays

{

MON = 1;      //value 1

TUE,              //value 2

WED,              //value 3

THU,              //value 4

FRI,                //value 5

SAT,              //value 6

SUN                //value 7

}


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الجمعة فبراير 21, 2014 11:42 pm


8- تسلسلات (تتابعات) الهروب Escape Sequences :

بعض حروف التحكم فى جدول كود أسكى تكون "غير قابلة للطباعة" وتعرف بتسلسلات الهروب . على سبيل المثال ، الحروف (\n) تمثل حروف "السطر الجديد" ، والتى تتسبب فى انتقال (قفز) المؤشر إلى "السطر التالى" .

الجدول أدناه قائمة بالحروف شائعة الاستخدام فى تسلسلات الهروب . لاحظ أن حروف تسلسلات الهروب يمكن الحصول عليها أيضا عن طريق "تحديد قيمتها" . على سبيل المثال ، العدد السداسى عشر (0x0A) يمكن أن يستخدم لتحديد السطر الجديد .







9- المتغيرات المتطايرة (المتبخرة) Volatile Variables :

الإعلان (التعريف) المتطاير يكون له أهمية خاصة فى التطبيقات التى تستند على "المقاطعة" . التعريف volatile يعنى أن المتغير قد تتغير قيمته أثناء وقت التشغيل ، مستقلا عن البرنامج الرئيسى . استخدام المعدل volatile يشير إلى أن المتغير يمكن أن يتم تغييره بواسطة روتين يعمل فى الخلفية ، مثل روتين المقاطعة . إعلان كائن ليكون volatile يحذر المترجم بأن لا يصنع افتراضات بشأن قيمة الكائن أثناء تقييم التعبيرات التى يحدث فيها ، لأن القيمة يمكن أن تتغير فى أى لحظة . فى المثال التالى ، يتم إعلان المتغير Cnt ليكون " حرفى char بدون إشارة unsigned متطاير volatile " :






الكود:


volatile unsigned char Cnt;





10- الوصول إلى بتات المتغير Accessing Bits of a Variable :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في السبت فبراير 22, 2014 10:18 am



10- الوصول إلى بتات المتغير Accessing Bits of a Variable :

هناك العديد من الحالات حيث قد نرغب فى الوصول إلى البتات الفردية لمتغير 8 بت . إذا أردنا الوصول إلى بت لسجل داخلى بالميكروكونترولر :

· إذا كنا نعرف اسم السجل المراد الوصول إليه ، عندئذ يمكننا ببساطة "كتابة اسم البت ويتم تحديدها set (جعلها بواحد) أو إعادة تعينها reset (تصفيرها)كما هو مطلوب . فيما يلى مثال على ذلك :



الكود:


GIE_bit = 0;              //Clear GIE bit



· يمكننا أيضا استخدام التعريفات B0, B1, . . . . B7 أو F0, F1, . . . . . F7 ، باعتبار أن (0) هى البت الأدنى قيمة LSB (أقصى اليمين) ، و (7) هى البت الأقصى قيمة MSB . فيما يلى مثال ، لتحديد البت bit 0 بالسجل INCON :



الكود:


INTCON.B0 = 1;      //Set bit 0 of register INTCON



ولتحديد البت bit 3 يمكن كتابة مايلى :



الكود:


INTCON.F3 = 1;        //Set bit 3 of register INTCON







11- البت من نوع sbit :

المترجم ميكروسى برو به نوع من البيانات يسمى sbit ، والذى يوفر "الوصول إلى البتات الخاصة بسجلات الوظائف الخاصة SFRs الداخلية للميكروكونترولر " . يمكنك الوصول إلى البتات الداخلية للسجلات كما فى الأمثلة التالية :



الكود:


sbit LEDA at PORTA.B0;                //LEDA is assigned to bit 0 of PORT A

sbit LEDB at PORTA.B7;                //LEDB is assigned to bit 7 of PORT A



أو بدلا من ذلك ومكافىء له :



الكود:


sbit LEDA at RA0_bit;                    //LEDA is assigned to bit 0 of PORT A

sbit LEDB at RA7_bit;                      //LEDB is assigned to bit 7 of PORT A



12- البت من نوع bit :

المترجم ميكروسى برو يدعم أيضا "تعريف بت واحدة ) باستخدام النوع bit . فيما يلى مثال يوضح ذلك :



الكود:


bit xf; 




13- المصفوفات Arrays :



13-1 المصفوقات الرقمية :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في السبت فبراير 22, 2014 6:26 pm

13- المصفوفات Arrays :



13-1 المصفوقات الرقمية :

أثناء تطوير (إنشاء) البرنامج ، عادة ما يكون هناك حاجة (ضرورة) لمعالجة العديد من "بنود البيانات من نفس النوع" . على سبيل المثال ، برنامج مصمم لقراءة أعمار 50 طالب فى حجرة صف ، فقد يتبادر للذهن من أول وهلة أننا بحاجة لاستخدام 50 متغير منفصل من نوع الأعداد الصحيحة . لكن ، مثل هذا النهج يجعل من الصعب معالجة البيانات ، حيث أنه علينا الوصول لكل عدد صحيح بشكل منفصل . علاوة على ذلك ، إذا زاد عدد الصف إلى 70 طالب ، على سبيل المثال ، عنئذ علينا إدخال 20 عدد صحيح أخرى و20 عبارة أخرى لمعالجة المدخلات الجديدة .

الحل لهذه المشكلة هو استخدام المصفوفة array كوسيلة سهلة لجمع البنود ذات الصلة تحت اسم متغير واحد . يتم إعلان (تعريف) المصفوفة عن طريق " تحديد اسمها ، ونوع وعدد عناصرها " التى عليها تخزينها . على سبيل المثال ، فيما يلى مصفوفة "أعداد صحيحة بدون إشارة" ، تسمى Average ، وبها خمس عناصر :



الكود:


unsigned int Average[5];





يتم حفظ المصفوفة فى أماكن (مواقع) ذاكرة متتابعة (متسلسلة) كما هو موضح بالشكل التالى :










فى هذا المثال ، أول عنصر "رقمه المسلسل صفر " index 0 ، وآخر عنصر رقمه المسلسل (4) . يتم عنونة عناصر المصفوفة عن طريق "كتابة اسم المصفوفة متبوعا بقوسين مربعين ( […] ) بداخلهما الرقم المسلسل للعنصر المحدد" . على سبيل المثال ، لتحديد "العنصر الثالث" بالمصفوفة بالقيمة "120" يمكن كتابة مايلى :



الكود:


Average[2] = 120;



بالمثل ، على سبيل المثال ، لنسخ محتويات العنصر الثالت من المصفوفة إلى متغير يسمى MyValue يمكننا كتابة ما يلى :



الكود:


MyValue = Average[2];



كلما واجه المترجم تعريف لمصفوفة ، يتم تنفيذ عملية حسابية لتحديد متطلبات تخزين كل عنصر . يمكن "تهيئة البداية" لمحتويات المصفوفة خلال إعلان المصفوفة عن طريق تحديد عناصر المصفوفة ، مفصولة بفواصل ، ومحاطة بأقواس مجعدة ( {..,..,..} ) . فيما يلى مثال لمصفوفة تسمى numbers ، بها 10 عناصر ، وفيها العنصر الأول numbers[0] = 0 ، والعنصر الثانى numbers[1] = وهلم جرا :





الكود:


unsigned int numbers[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};



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



الكود:


unsigned int numbers[ ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};



لاحظ أنه ليس من الضرورى "التهيئة الابتدائية" لجميع عناصر المصفوفة . على سبيل المثال ، يمكننا التهيئة الابتدائية للعناصر الثلاثة الأولى فقط من المصفوفة وترك باقى العناصر بدون تهيئة ابتدائية ليكون التعريف كما يلى :

الكود:


int MyNumbers[10] = {0, 2, 5};



فى هذه الحالة تم التهيئة الابتدائية للعناصر [0] , [1] , [2] ، على الرغم من أنه سوف يتم حجز تخزين لعشر عناصر . هنا ، أى عناصر متبقية بدون تهيئة ابتدائية يتم تهيئتها ضمنيا بصفر .

ملحوظة :

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

الكود:


int numbers[2] = {0, 3, 7, 8, 9};



كلما تم تهيئة مصفوفة ، فإن المترجم ينسخ البيانات المحددة إلى عناصر المصفوفة . فإذا حدث وكانت المصفوفة داخل دالة ، عندئذ فى كل مرة يتم استدعاء الدالة ، سوف يتم إعادة تحميل عناصر المصفوفة ، مما يتسبب فى تأخير لا لزوم له . لهذا السبب ، يجب أن يتم الكلمة الخاصة static لإجبار عناصر المصفوفة ليتم تحميلها مرة واحدة فقط عند بداية البرنامج ، كما يلى :



الكود:


static int numbers[2] = {0, 5};



المصفوفات ذات الأبعاد المتعددة :

فى المترجم ميكروسى برو ، يمكننا أيضا إعلان المصفوفة ذات الأبعاد المتعددة . تستخدم مثل هذه المصفوفات عادة فى العمليات الحسابية ، مثل حسابات المتجه والمصفوفات .

يتم إعلان المصفوفات ذات الأبعاد المتعددة عن طريق تحديد "نوع البيانات" ، و "اسم المصفوفة" و "حجم كل بعد بالمصفوفة" . فى المثال التالى ، يتم تعريف مصفوفة ذات بعدين باسم MyMatrix ، بها "ثلاثة صفوف" و "عمودين" :



الكود:


int MyMatrix[3][2];



هذه المصفوفة لها الناء التالى : المصفوفة بها أجمالى 6 عناصر . العنصر الأول من المصفوفة هو

MyMatrix[0][0] ، والعنصر الأخير هو MyMatrix[2][1] ، كما فى الجدول التالى :











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



الكود:


int numbers[2][3] = { {0, 2, 5}, {6, 8, 5} };



فى المثال السابق لدينا "2 صف" و "3 عامود" . قيمة كل عنصر يمكن بيانها كما يلى :









حجم "البعد الأول" اختيارى ويمكن أن يترك فارغا ، كما هو مبين فيما بعد للمثال أعلاه . يقوم المترجم بالملىء بالحجم الصحيح خلال الترجمة :



الكود:


int numbers[ ][3] = { { 0, 2, 5}, {6, 8, 5} };



13-2 مصفوفات الحروف Character Arrays :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في السبت فبراير 22, 2014 9:28 pm



13-2 مصفوفات الحروف Character Arrays :



يتم إعلان مصفوفات الحروف بطريقة مشابهة لإعلان مصفوفات الأرقام ، حيث يتم فصل كل حرف واحاطتها داخل زوج من الأقواس المعرجة . فى المثال التالى ، مصفوفة الحروف MyName بها أربعة عناصر :



الكود:


unsigned char MyName[4] = {‘J’, ‘O’, ‘H’, ‘N’};



كما سبق ، يمكننا ترك حجم المصفوفة فارغا كما يلى :



الكود:


unsigned char MyName[ ] = {‘J’, ‘O’, ‘H’, ‘N’};



13-3 السلاسل النصية Strings :



السلاسل النصية هى مصفوفات حروف تنتهى بحرف NULL ( قيمته بالداسى عشر 0x0 أو "\0" ) . فى المثال أدناه ، MyName هى سلسلة نصية ( مصفوفة حروف) بها خمس عناصر ، بما فى ذلك حرف الانتهاء NULL :



الكود:


unsigned char MyName[ ] = {‘J’, ‘O’, ‘H’, ‘N’, ‘\0’};



كما ترى من المثال أعلاه ، علينا الفصل بين كل حرف باستخدام الفاصلة وإنهاء السلسلة النصية بحرف NULL .

الطريقة البديلة والأسهل لإعلان نفس السلسة النصية تكون بالشكل التالى :



الكود:


unsigned char MyName[ ] = “JOHN”;




هنا ، يتم إنهاء الحروف تلقائيا بحرف NULL وهذا الخيار الثانى هو الأكثر قابلية للقراءة ، وخاصة عندما يكون المطلوب هو إعلان سلسلة طويلة . بالإضافة إلى ذلك ، سوف لن يتم إنهاء السلسة النصية بشكل صحيح إذا نسينا إدراج حرف NULL .





13-4 ثابت السلاسل النصية Constant Strings :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في السبت فبراير 22, 2014 10:44 pm


13-4 ثابت السلاسل النصية Constant Strings :

فى العديد من التطبيقات قد يكون هناك حاجة لإنشاء "سلاسل نصية طويلة ثابتة" فى ذاكرة البرنامج الفلاش بالميكروكونترولر . مثل هذه السلاسل يمكن إنشاؤها كثابت لسلسلة نصية لتوفير مساحة فى ذاكرة البيانات RAM .


الكود:


const unsigned char Text[ ] = “This is the main menu of the program”;


13-5 مصفوفات السلاسل النصية Arrays of Strings :

هناك العديد من التطبيقات ، حيث أننا قد نرغب فى إنشاء مصفوفات من السلاسل النصية فى برامجنا . فى المثال التالى ، المصفوفة Days تخزن أيام الأسبوع . لاحظ أن تحديد حجم البعد الأول "اختيارى" .


الكود:


char Days[ ][10] = { “Monday”,

“Tuesday”,

“Wednesday”,

“Thursday”,

“Friday”,

“Saturday”,

“Sunday”

};



فى المثال أعلاه ، يتم تعيين (تحديد) حجم البعد الأول تلقائيا عن طريق المترجم ليكون 7 عناصر . يتم تعيين حجم البعد الثانى ليكون 10 عناصر ، والذى هو حجم أطول كلمة فى المصفوفة . لاحظ أن كل كلمة فى المصفوفة هى سلسلة نصية ومن ثم يتم إنهاؤها بحرف NULL .

الشكل التالى يبين بناء هذه المصفوفة :





14- المؤشرات Pointers :


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الإثنين فبراير 24, 2014 1:03 pm



14-1 العمليات الحسابية للمؤشر :
فى لغة السى يمكننا إجراء مختلف العمليات الحسابية على المؤشر ، والتى قد تنطوى على :
• جمع أوطرح المؤشرات مع قيم إعداد صحيحة .
• جمع أو طرح اثنين من المؤشرات .
• المقارنو بين اثنين من المؤشرات .
• مقارنة مؤشر مع الصفر NULL .
• تخصيص أحد المؤشرات لمؤشر آخر .
كمثال على العمليات الحسابية للمؤشرات ، افترض أن ستة مواقع ذاكرة ، بدءا من العنوان (1000) ، تخزن متغيرات نوع الحرف ، كما هو موضح بالشكل التالى :





يمكننا الآن إعلان مؤشر لحفظ عنوان المتغير (A) ومن ثم إجراء العمليات التالية :


الكود:


char *ptr; //ptr is a character pointer
ptr = &A; //ptr holds address 1000

ptr = ptr +2; //ptr now points to 1002
*ptr = 25; //Variable C = 25
ptr = ptr + 1; //ptr now points to 1003
E = *ptr; //Variable E = 100
ptr = ptr + 2; //ptr now points to 1005
*ptr = 0; //Variable F = 0




• السطر الأول : إعلان مؤشر نوع حرف char باسم ptr .
• السطر الثانى : نستبدل العامل (&) بالصيغة " عنوان ....." ، ومن ثم يمكن القول تخصيص قيمة "عنوان المتغير A " وهى (1000) للمؤشر ptr ومن ثم فإن هذا المؤشر فى هذه اللحظة سوف يشير إلى العنوان (1000)  .
 



• السطر الثالث : جمع (2) على قيمة المؤشر  ptr وحفظ النتيجة فى المؤشر ptr ، الآن المؤشر يشير إلى العنوان (1002) .




• السطر الرابع : نستبدل العامل (*) بالصيغة "المتغير المشار إليه بواسطة المؤشر..." ، وبالتالى يمكن القول ،  تخصيص القيمة (25) إلى "المتغير المشار إلية بواسطة المؤشر ptr " وهو فى هذه الحالة المتغير ( C ) ليكون ( C = 25 ) .




• السطر الخامس : إضافة واحد إلى المؤشر ليصبح ptr = 1003 ليشير الآن إلى العنوان 1003 .




• السطر السادس : هنا نجد *ptr أى تخصيص "المتغير المشار إليه بواسطة المؤشر " وهو المتغير ( D )  إلى المتغير ( E )  فيصبح E = 100  .




• السطر السابع إضافة ( 2 )  إلى المؤشر لتصبح قيمته 1005 ويشير الأن إلى العنوان 1005 .




• السطر الثامن : تخصيص الصفر ( 0 )  إلى " المتغير المشار إليه بواسطة المؤشر الآن" وهو المتغير ( F ) ليصبح F = 0  .






14-2 مؤشرات المصفوفة Array Pointers :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الإثنين فبراير 24, 2014 1:24 pm

14-2 مؤشرات المصفوفة Array Pointers :



فى لغة السى ، "اسم المصفوفة" هو أيضا "مؤشر للعنصر الأول" بالمصفوفة . وبالتالى فإنه فى المصفوفة :



الكود:


int Sum[10];



الاسم Sum هو أيضا مؤشر للعنصر الأول Sum[0] بالمصفوفة (بداية المواقع المحجوزة للمصفوفة بالذاكرة) ، وهو يحفظ عنوان المصفوفة . بالمثل ، فإن العبارات التالية يمكن استخدامها أيضا للإشارة إلى المصفوفة :



الكود:


int *ptr;                      //ptr is an integer pointer

ptr = &Sum[0];          //ptr points to first element of array Sum



العبارتان التاليتان متكافئتان ، لأن Sum هو أيضا عنوان المصفوفة Sum :



الكود:


Sum[2] = 0;

*(Sum + 2) = 0;



من المثير للاهتمام أن نلاحظ أن العبارة التالية صواب ، لنفس السبب :



الكود:


&Sum[3] = Sum + 3;







14-3 استخدام المؤشرات فى عمليات السلسلة النصية Using Pointers in String Operations :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :

مُساهمة من طرف Admin في الإثنين فبراير 24, 2014 5:39 pm

14-3 استخدام المؤشرات فى عمليات السلسلة النصية Using Pointers in String Operations :



تطبيق أخر مفيد للمؤشرات وهو إنشاء والتعامل مع "متغيرات السلسلة النصية " . تذكر أن السلسلة النصية هى "مجموعة مصفوفات حرف تنتهى بحرف الصفر NULL .

باستخدام المؤشرات ، يمكننا إنشاء سلسلة نصية كما هو مبين بالمثال التالى :



الكود:


char *p = “JOHN”;





هنا ، تم إنشاء "مصفوفة حروف مخفية" عند وقت الترجمة ، تحتوى على الحروف ‘JOHN’ ، وتنتهى بحرف NULL . يتم التهيئة الابتدائية لمؤشر الحرف ( p ) وتحميلها بعناوين الذاكرة لهذه السلسلة . وهذا أى عنوان الحرف الأول بها وهو حرف ( J ) . المبرمج لا يكون لديه على حجم السلسلة التى تم إنشاؤها ، وبالتالى يجب لا تحاول تغيير محتوياتها باستخدام المؤشر .

فى العديد من التطبيقات قد نرغب فى إنشاء سلاسل ثابتة طويلة . يتم عمل ذلك بسهولة باستخدام المؤشرات وإعلان السلاسل كثوابت . فيمل يلى مثال يوضح ذلك :



الكود:


const char *p1 = “My very long text string”;



من المهم أن ندرك الفروق بين الطريقتين التاليتين فى إنشاء السلاسل التالية :



الكود:


cont char Text[ ] = “An example text”;

const char *p = “An example text”;



· فى العبارة الأولى : يتم إنشاء مصفوفة تسمى Text وإنهائها بحرف NLL . يمكن الوصول للحروف بشكل فردى بواسطة الترقيم التسلسلى (فهرس) index للمصفوفة .

· فى العبارة الثانية : الحروف “An example text” وصفر الانتهاء يتم تخزينها فى مكان ما بالذاكرة ، ويتم تحميل المؤشر ( p ) بعنوان أول حرف بهذا النص ، وهو الحرف ( A ) .



يمكننا إنشاء مصفوفات لسلاسل نصية باستخدام المؤشرات . فى المثال التالى ، يتم إنشاء سبع مؤشرات بالأسماء من Days[0] إلى Days[6] ويتم تحميل كل مؤشر بالعنوان المقابل لاسم اليوم . يتم تعيين بعد مصفوفة المؤشرات تلقائيل بالقيمة ( 7 ) بواسطة المترجم .



الكود:


 char *Days[ ] ={ “Monday”,

“Tuesday”,

“Wednesday”,

“Thursday”,

“Friday”,

“Saturday”,

“Sunday”

};



15- الأبنية Structures :

Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى