قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

ABOUYAGINE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2012
المشاركات: 61
نشاط [ ABOUYAGINE ]
قوة السمعة:
قديم 05-02-2016, 01:07 AM المشاركة 9   
ha



بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

التحذير_01: اياك ان تنخدع و تستخدم الاسلوب الذكى التالى :

يتمثل الاسلوب انك اذا اردت ان تضرب رقم ما ( x= -125 ) فى رقم 2 مثلا= 250-
ممكن تلجأ للحيلة و هى : ; x = x<<1
و بالمثل ممكن تلجأ للقسمة على 2 بانك تعمل x = x>>1

لو قمت بضرب (125-) بعمل ازاحة يمين خانة واحدة فلن تكون النتيجة= (250-)
بل ستكون النتيجة = 6 + !!!! قم بتجربتها و طبعا النتيجة غير صحيحة
و كذلك فى القسمة
. الخلاصة :

القاعدة_02: لا تستخدم عمليات bit wise مثل ~ , ^ , & , | , >> , <<
فى التعامل المتغير ذو الاشارة الا بكل حرص , ولا تستخدمها فى الضرب او القسمة مطلقا مع اى متغير له اشارة SIGNED و لكن استخدم *و / و % .
امثلة :

كود:
">   // Division via bit-shift doesn’t work when negative.
int8_t signed_data = -4;
signed_data >>= 1; // not necessarily -2

// Left-shifts of signed data are undefined (in ISO C).
int32_t signed_data = -100;
signed_data <<= 1;

// The meaning of bit flips also varies for signed data.
uint8_t max_unsigned = ~0; // 255 (max unsigned)
int8_t max_signed = ~0; // -1 (not max signed)
و الله الموفق و المستعان
خذ العلوم الكون من اى عالم

ولا تاخذ علوم الدين الا من اتقى عالم


السلام عليكم
ممكن تشرح << و>> و كيف نستعملها في البرمجة لأني لحد الان لم افهمها كليا شكرا لك


التعديل الأخير تم بواسطة : ABOUYAGINE بتاريخ 05-02-2016 الساعة 01:16 AM
اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 07-02-2016, 12:00 AM المشاركة 10   
sun


بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته

السلام عليكم
ممكن تشرح << و>> و كيف نستعملها في البرمجة لأني لحد الان لم افهمها كليا شكرا لك

اخى العزيز عفوا لتاخري في الرد ,

مبدأيا فائدة الازاحة بشكل عام لها فائدتين : اما تحريك الخانات لاى مسجل او بايت او word او مسجل خرج لبورت معين , و ذلك لعملية منطقية مثال :
لو انك موصل leds or motors على بورت portB مثلا و اريد تشغيل الليد الاول الموصل
بالرجل portB0 ساكتب portB=1 تمام , اذا اردت تشغيل الليد التانى ساكتب
portb=2 او اكتب portB=portB<<1

هذا يفيد اكثر بالفعل لو ان البورت عليه pattern يجب ازاحته مثلا :
portB = 0b 0000 1101 فاذا اردنا ان يتحرك هذا الخرج على الليدات بخطوة واحدة فمن الاسهل ان تكتب portB = portB<<1 بدلا من ان تكتب portB = 0b 0001 1010
و ايضا لو اردت ان تحرك البتات حركات اطول مثلا فى المثال السابق نريد نقل pattern على ال 4 بت العلوى فمن الاسهل كتابة : portB = portB <<4 فيحدث ازاحة اربع خطوات مرة واحدة و يكون الناتج :
portB = 1101 0000

و هذا ينطبق على الازاحة يمين او يسار .

الفائدة الثانية : شكل اخر من عملية الضرب و القسمة فمثلا :
int x =3
x=x<<1 // x will be x=6 as you do x= x*2
نشرحه ببساطة : x = 3 = 0b 0000 0011 قبل الازاحة .
بعد الازاحة
يسار مرة واحدة : x = 0b 0000 0110 = 6

و كذلك لو طبقت الازاحة يمين x =6 ستتحول الى x = 3 .
لكن يفضل عدم استخدام هذا الاسلوب مع الارقام ذات الاشارة او الارقام العشرية.

اما عملية الازاحة فهى كما بالشكل : ازاحة يسار بت واحدة


لو محتاج شرح فى جزء معين اكتر عرفنى و حدد و ان شاء الله ارد عليك


و الله الموفق و المستعان
يا رب خذ بايدينا اليك





اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 09-02-2016, 11:17 PM المشاركة 11   
x4


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته


مبدع اخوووووووووووي
سأتواصل معك

جزاك الله خيرا اخ احمد , ولكن هذه القواعد ليست من نفسي لكن الله وفقنى
و رزقنى بها من مقالات لمحترفين برمجة ميكرو و بعض الكتب , و الهمنى سبحانه
ان اكتبها فى قريتنا راجيا ان ينفع بها غيرى , خشية ان اكتم العلم .
و اليك بعض روابط المحترفين و مقالاتهم و صفحاتهم :

http://www.barrgroup.com/Embedded-Sy...for-Embedded-C

تصفحوه جيدا

http://www.barrgroup.com/Embedded-Systems/How-To

و ايضا العبقري جانسل :
http://www.ganssle.com/


ان شاء الله دورة الميكرو فى موقع edx وهى تتكرر كل عدة اشهر فقط :
https://www.edx.org/



و ما توفيقي الا بالله

فقالوا انا سمعنا قرانا عجبا
هذا حال قلوب الجن مع القران ... فما لنا نحن !!!



مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 10-02-2016, 12:22 AM المشاركة 12   
x4 خوارزمى_07


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

القاعدة_1:
بعون الله سنتكلم عن ادوات اكتشاف الاخطاء فى البرنامج و هى :
1-IDE (Integrated Development Environment )
بيئة التطوير المتكاملة و هى تتكون من editor + compiler + debugger
بعد كتابة البرنامج يستخدم المترجم Compiler الموجو
د مع IDE فى اكتشاف بعض الاخطاء اللغوية و اماكنها ملحوظة : لا يكتشف الاخطاء المنطقية ولا يكتشف الاخطاء اللغوية المقبولة (سنشرحهم لاحقا ) .

2- Debugger : و هو عبارة عن محاكاة لتنفيذ اوامر البرنامج سطر بعد سطر, و مشاهدة النتيجة على المسجلات و المتغيرات .
و هذه الاداة مفيدة فى اكتشاف الاخطاء المنطقية .


قبل ان نتكلم عن الاداة الثالثة سنتكلم عن انواع الاخطاء :

1- اخطاء لغوية : مثل كتابة امر (whil) بدلا من (while) و المترجم يستطيع اكتشافها Compiler .

2- اخطاء منطقية : و هذه اخطاء فى اسلوب حل المشكلة ولا يمكن معرفتها الا بالتجربة الحقيقية او المحاكاة او Debugger.

3- الاخطاء اللغوية المقبولة: و هى اخطاء لغوية لا يستطيع ان يكتشفها المترجم و هى اهم ما ننوه اليه فى قاعدة اليوم , و لكى نفهمها نعطى مثال :
سنكتب امر while بالشكل التالى لتنفيذ امر مرة واحدة فقط :
كود:
    while ( x = 3){ // do only once }

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

3- بالعين : نعم ان تراجع البرنامج خطوة خطوة !!! لكن لو كان برنامجك
طويل او انك راجعته و لم تكتشف الخطأ عليك بالطريقة التالية .

4- Lint : هو برنامج رائع يشبه المترجم فى عمله الا انه يستطيع اكتشافالاخطاء التى لا يكتشفها المترجم .
فعندما يرى الامر السابق تظهر رسالة :

x=3 must be x==3 in while comparison

من اشهر مواقع التى تقدم الخدمة مجانا :

http://gimpel-online.com//cgi-bin/genPage.py?srcFile=diy.c&cgiScript=analyseCode.py& title=Do-It-Yourself+Example+%28C%29&intro=This+example+allows +you+to+specify+your+own+C+code.&compilerOption=on line32.lnt&includeOption={{quotedIncludeOption}}

يمكنك تجربته .


هذا و بالله التوفيق


انا سمعنا قرانا عجبا


اللهم نسالك ان نكون مثلهم


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 29-02-2016, 03:49 AM المشاركة 13   
x4 خوارزمى_08


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

القاعدة_01: قواعد الاسلوب الامثل فى التسمية :

اولا تسمية المتغيرات و الدوال :
1- لا تسمى متغيرات بنفس الاسم و الفرق حجم الحرف مثلا : char var1 , VAR1 او مثلا : char var1 ,var_1

2- لا تستخدم الحروف المتشابهة , مثلا : char I , i , l , ii , i1


3- مع المتغيرات استخدم الحروف الصغيرة دائما .

4- يجب ان تدل الاسماء على الوظيفة , مثلا :
x = adc(0) ; // bad name
analog_input_value = adc(0) ; // good name

5- ابدأ فى التسمية من العام لخاص , مثلا :
كود:
Timer_0_Initialize()
Timer_0_ISR()
Timer_0_read()
6- لا تستخدم اختصارات تختلط معانيها بين افعال او اسماء , مثلا :
disp // verb=display or noun = screen
calc // verb= calculate or name = calculator

ثانيا : الثوابت و تعريفات define# و دوال الماكرو يجب ان تكون كلها حروف كبيرة CAPITAL CASE .



هذا و بالله التوفيق

ان تتلو القران اى تتبعه ولا يتبعك





الصورة الرمزية gheas
gheas
:: مهندس متواجد ::
تاريخ التسجيل: May 2005
الدولة: https://t.me/pump_upp
المشاركات: 125
نشاط [ gheas ]
قوة السمعة:
قديم 03-03-2016, 07:53 PM المشاركة 14   
افتراضي


مفيدة جدا بارك الله فيك


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 11-05-2016, 06:50 PM المشاركة 15   
x4 خوارزمى_09


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته
تنويه :
ان هذه القواعد هى القواعد التى يلتزم بها المبرمجين المحترفين
و كلها منقول من مقالات او كتب لمبرمجين فى ميكروسوفت او شركات مشابهة او محترفى برمجة ميكرو لانظمة طبية و صناعية .
و لقد وضعت بعض المصادر و من يحتاج اسماء الكتب ارفعها لكم .

القاعدة_01: تابع -> قواعد الاسلوب الامثل فى التسمية :

الهدف الاساسي للتسمية الصحيحة ان تسهل الكود لك عند صيانته او تطويره فى وقت لك و لاى مبرمج يقرأه ,
و ربما التسمية تاخذ بعض وقتك و جهدك اللغوى لكن ستكون اوفر من الوقت الذى سيضيع منك او اى مبرمج يحاول فهم برنامجك .


1- ( اسماء المتغيرات المختلفة فى الهدف يجب ان تختلف فى الاسم ).
لا تسمى المتغيرات متعددة باضافة ترقيم عليها او شئ من هذا القبيل لانها لو مختلفة فى الهدف يجب ان تختلف فى الاسم .
مثال: int x1, x2
الخطأ الاول : على ماذا يدل اسم x فلو يدل مثلا على عداد كان اولى ان يسمى counter -> و تكون الاسماء int counter1 , counter2 .... و هذا خطأ ايضا ....
الخطأ الثانى : اذا كان كل عداد لمنتج معين مثلا شاى و سكر فلما الترقيم ? فالافضل : -> int teaCounter , sugarCounter

2- ( اسماء المتغيرات و ال classes يجب ان تكون تكون اسماء و ليس افعال ).
لا يصح تسمية متغير باسم فعل : int get , calculate

3- ( اسماء الدوال و ال methods يجب ان تكون افعال ) .
مثلا دالة تحسب زمن التاخير مثلا تسمى : void calculatDelaytime (){ } l


( اذا وجدت هذه المعلومات مفيدة قم بعمل لايك لاعلم انها مفيدة لاخوتى و بعون الله يوفقنى الله فى الاستمرار )

لو لاخ اى استفسار يسال و الله المستعان .

الحمد الذى بنعمته تتم الصالحات

الله مولانا ولا مولى لهم
انى عذت بربى و ربكم ان ترجمون
الله ينصرك سوريا و . و . - كلنا حلب و غزة



db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:
قديم 26-05-2016, 02:27 AM المشاركة 16   
افتراضي


مشكور جدا على الجهد الموضوع مفيد جدا



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:27 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)