الفرق بين المراجعتين لصفحة: «Arduino/static»

من موسوعة حسوب
إضافة محتويات الصفحة.
طلا ملخص تعديل
 
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 16: سطر 16:
* A static variable is moved up and down a random amount.
* A static variable is moved up and down a random amount.
* This technique is also known as "pink noise" and "drunken walk".
* This technique is also known as "pink noise" and "drunken walk".
*
* Edited by: wiki.hsoub.com 2018
*/
*/


سطر 63: سطر 65:
*[https://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/ صفحة static في توثيق أردوينو الرسمي.]
*[https://www.arduino.cc/reference/en/language/variables/variable-scope--qualifiers/static/ صفحة static في توثيق أردوينو الرسمي.]
[[تصنيف: Arduino]]
[[تصنيف: Arduino]]
[[تصنيف: Arduino Variable Scope & Qualifiers]]
[[تصنيف: Arduino Constants & Variables]]

المراجعة الحالية بتاريخ 07:11، 7 نوفمبر 2018

تُستعمَل الكلمة المفتاحية static عند إنشاء متغيرات مرئيَّة لدالةٍ واحدة فقط من أجل الحفاظ على محتواها بعد انتهاء تنفيذ تلك الدالة المستدعاة وحتى الاستدعاء التالي لها خلافًا للمتغيرات المحلية التي تُنشَأ وتدمَّر في كل مرة تُستدعَى فيها الدالة.

ستُنشَأ وتُهيَّأ المتغيرات الساكنة المصرَّح عنها ضمن الدالة مع الكلمة static المفتاحية أول مرة تُستدعَى فيها تلك الدالة فقط.

البنية العامة

static dataType var = val;

يمثِّل dataType نوع المتغير المراد تعريفه، و var اسم المتغير، و val القيمة المراد إسنادها إلى هذا المتغير الساكن. انتبه إلى أنَّه متى ما أُنشِئ المتغير var عند استدعاء الدالة أول مرة، لن يدمَّر عند انتهاء تنفيذ الدالة وسيحافِظ على القيمة المخزَّنة ضمنه حتى الاستدعاء التالي للدالة.

أمثلة

يعمل البرنامج التالي على توليد خطوات عشوائية محدودة بمجال معيَّن بالإضافة إلى تقييد حجم الخطوات عبر المتغير stepsize المُمرَّر إلى الدالة ()randomWalk:

/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter "stepsize".
* A static variable is moved up and down a random amount.
* This technique is also known as "pink noise" and "drunken walk".
* 
* Edited by: wiki.hsoub.com 2018
*/

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;

int thisTime;
int total;

void setup()
{
  Serial.begin(9600);
}

void loop()
{        // randomWalk اختبار الدالة
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
   delay(10);
}

int randomWalk(int moveSize){
  static int  place;     // عُرِّف كأَّنه ساكن لذا يخزِّن القيم randomWalk متغير يخزِّن قيمة في الدالة 
                         // بين استدعاءات الدوال مع بقاء هذا المتغير محلي ولا يصل إليه سوى هذه الدالة

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange){                              // التحقق من الحدود الدنيا والعليا
    place = randomWalkLowRange + (randomWalkLowRange - place);  // يعكس الرقم بالاتجاه المعاكس نحو الاتجاه الموجب 
  }
  else if(place > randomWalkHighRange){
    place = randomWalkHighRange - (place - randomWalkHighRange);  // يعكس الرقم بالاتجاه المعاكس نحو الاتجاه السالب
  }

  return place;
}

انظر أيضًا

  • الكلمة المفتاحية const: هي اختصار للكلمة «ثابت» (constant)، وهي مقيِّدةٌ للمتغيرات التي تٌستعمَل معها، إذ تعدِّل سلوك المتغير لتجعله في وضع «القراءة فقط» (read-only).
  • الكلمة المفتاحية volatile: تُستعمَل عادةً قبل نوع المتغير عند تعريفه لتوجيه المصرِّف إلى تحميل المتغير من الذاكرة RAM وليس من سجلات التخزين للذاكرة المؤقتة (الذاكرة flash) حيث تُخزَّن جميع متغيرات البرنامج.
  • مجال المتغيرات في أردوينو.

مصادر