How to start in Embedded Systems Track ?

فى البداية ما هو مجال الـ Embedded Systems : هنا سوف تجد فى اول الفيديو ملخص للمجال والتعرييف به . اولا التعريف بها : هى انظمة الألكترونية تحتوى ليس فقط على دوائر الكترونية و لكن أيضا تحتوى على كمبيوتر بداخلها يحتوى على السوفتوير الذى تم كتابته. هذه الانظمة تقمون بتنفيذ بعض التطبيقات المحددة مسبقا كمعالجة البيانات و الهواتف المحمولة و أجهزة الملاحة و التحكم بالطائرات و السفن و السيارات و الأجهزة المنزلية كالتلفاز و الفيديو و حتى الغسالات و الثلاجات و اتخاذ القرار المناسب فى الوقت المطلوب. و بسبب وجود كمبيوتر صغير بها يتم برمجته جعلها أكثر مرونة و ملائمة للتطبيق و بالتالى أكثر فاعلية و توفيراً للطاقة و أسهل فى تحديد الأعطال و الصيانة. هذا الكمبيوتر الصغير ممكن ان يكون فى شكل Microprocessor or Microcontroller .يوجد فى مصر العديد من الشركات التى تعمل فى تطويرها ومن هذه الشركات ما هو توكيل لشركات أجنبية أو أقسام تطوير فى شركات مصرية كبيرة أو شركات حديثة أسسها مهندسون و متخصصون مصريون.


اولا : يجب ان تمتلك اسلوب ال self study لانك مهما امتلكت من العلم لن تصل الى نهايته وم مهما اخذت كورسات لن تعطيك الا قشور فقط لذلك وجب التنوييه على هذه الجزءية. انصح بقراءة هذا الكتاب : Fast-Tracking Your Career: Soft Skills for Engineering and IT Professionals


يجب ان تمتلك معرفة ممتاذة بالالكترونيات بشكل عام واقصد هنا ليس عدد المشاريع التى قمت بها لان هناك الكثير ممن عملوا على مشاريع ولكن لا يملكون الحس الهندسى فى تطويرها .. هنا انصح بقراءة هذا الكتاب : sedra smith microelectronic circuits 6th edition solutions اثناء و بعد الفهم الصحيح لالكترونيات تبداء بتنفيذ الكثير من المشاريع ومعرفة كيف تم تصميم هذه الدوائر والعمل عليها.


البداية فى المجال : 1. نظرا لان هذا المجال يتعمد اعتمادا كبيرا على السوفتوير لذا وجب عليك ان تمتلك مهارات التكووييد .. والافضل ان تمتلك مهارات التعامل مع ال Low level programming language مثل لغة الـ Assembly .. ولتوفير الوقت هذه اللغة يتم دراستها فى مادة ال microprocessor بالجامعة لذا حاول استغلال هذه الفترة فى الجامعة لتعلمها سواء فى الجامعة او بمساعدة نفسك كما قلت سابقا . هذه اللغة تجعلك قريب جدا من مستوى ال Hardware .. المشكلة هنا فى هذه اللغة ان لكل processor يكون له لغة ال Assembly الخاصة به لانهم يختلفون فى الامكانيات وال architecture نفسها .. يتم التعامل مع هذه اللغة الان بشكل عام فى حالات محددة وهى : تنفيذ جزء معين من الكود فى وقت صغير جدا فى التطبيقات الحرجة مثل الصواريخ مثلا لانها تحتاج الى سرعة عالية جدا فى تنفيذ العمليات.انصح بقراءة هذه الكتب : advanced microprocessor and peripherals


2. يجب ان تكون محترف فى البرمجة باستخدام لغة ال C : لماذا ؟؟ هذا لانها وسيطة سهل التعامل معاها وقريبة ومريحة للـ hardware للتعامل معها . هنا بقا لازم لازم تقراء الكتاب ده : The C Programming Language : 2nd Edition كتاب بسيط جدا جدا ولكن لازم تخلصه وتفهمه كويس وتحاول تطبق كل ال codes الى فيه ولكن عن فهم. هناك ايضا كورس ممتاذ جدا تابع للـ lynda وده ال link الخاص به : http://www.lynda.com/C-tutorials/C-Essential-Training/164457-2.html موجود تورنت على فكرة ^_^ بعد ما تخلص ده خلص ده كمان : http://www.lynda.com/C-tutorials/Further-Topics-C-Programming/195668-2.html موجود تورنت على فكرة ^_^ الكتاب ده ممتاذ جدا كمان : C: The Complete Reference, 4th Ed


طبعا ممكن تلاقى tutorials مختلفة عن بعضها وده لان لغة ال C لها اكثر من standard ولكن الاساسى عندنا هو : C89 & C99


2.1 . بعد ما تعلمنا لغة ال C بقى لنا ان نتعلم كيف نكتب بها السوفتوير الخاص بالـ Embedded وهذا ما نطلق عليه الـ Embdded C .. ليست لغة جديدة ولكن هوه اسلوب كتابة ليس الا .. من ضمنها مثلا الـ Memory management وهو الحفاظ على ال memory بكل جزء فيها .. ايضا التقليل من استهلاك العمل على ال processor بتطيق Delay مثلا لانه يوقف جميع العمليات لحين انتهاء فترة ال Delay. هذه الجزءية تحتاج الى كثير من الممارسة منك ^_^ …


3. الحاجة المهمة الثانية هى الـ data structures and algorithms الفكرة هنا انك توصل لاكثر مرحلة من ال optimization للكود بتاعك ودى مش هاتتعمل الا لما تكون عارف ازاى مثلا البيانات بتتخزن فى ال memory وازاى العمليات بتطبق عليها و ازاى توفر فى ال memory بتاعتك .. لما بتعرف المتغير ايه الى بيحصل 🙂 اذا بيتم ال search فى البيانات المخزنة على ال memory. مجموعة الكورسات دى مفيدة : https://www.coursera.org/course/algs4partII https://www.coursera.org/course/cplusplus4c https://www.coursera.org/course/algs4partI https://www.coursera.org/course/codeyourself https://www.coursera.org/course/compilers


4. يجب ان تمتلك المعرفة الكافية عن ال mechanism الى البروسيسور بيشتغل بيه فى التعامل مع البينات وتنفيذ العمليات عليها هذا ما يسمى علم الـ Computer Architecture او هندسة الحاسوب .. من خلالها هايكون عاندك المقدرة لتنظيم ال system لنضرب مثال هنا : فى التعامل مع الزاكرة وكيفية الوصول لكل جزء من ال data بها وتقسيم ال memory الى اجزاء وكل جزء يقوم بخدمة جزء محدد فى ال System .. مجموعة الكورسات دى مفيدة : https://www.udacity.com/course/ud007 https://www.coursera.org/course/cs101 https://www.coursera.org/specialization/fundamentalscomputing2/37?utm_medium=catalog https://www.coursera.org/course/algorithmicthink1 https://www.coursera.org/course/algorithmicthink2


5. دائما انت لا تعمل على مشروع كبير بمفردك .. تخيل مشروع عدد سطور الكود فيها تتعدى مثلا ال 50,000 سطر كود 🙂 .. هنا تكون بالفعل تعمل ضمن team عمل كبير وكل Team له جزء محدد فى المشروع .. لذلك لابد من وجود منهج واحد او اسلوب محدد يعمل عليها جميع ال Teams فى المشروع و دائما يتم التحديث فى المشروع ربما بعد عدة اعوام من الانتهاء منه لذالك نحن بحاجة لما يسمى : Software Engineering ^_^ مجموعة الكورسات دى مفيدة : https://www.udacity.com/course/cs101 https://www.udacity.com/course/ud805 https://www.udacity.com/course/cs212


6. كيف تقوم بالعمل على كل ما فى الاعلى الا واذا كان معك بعض ال tools المخصصة لها .. هذا ما نطلق عليه الـ Tooling .. اول شىء تحتاج له هوه الـ Compiler وظيفته عملية ترجمة الكود الذى قمت بكتابته الى لغة يفهمها ال processor فى النهاية نحصل منه على ما يطلق عليه الـ : HEX .. هذا هو الملف الذى تقوم بتحميله على الـكميوتر الصغير الذى تستخدمه .. هذه بعض الامثلة للـ Compilers الشائعة الاستخدام : Code Vision – IAR – AVR studio – MicroC – Code Vision هناك ما نطلق عليه الـ IDE : هذه تعمل على تبسيط التعامل فى كتابة الكود الخاص بك : Netbeans – Eclipse – mplab ايضا تحتاج الى بعض من برامج المحاكاة او ما يطلق عليها Simulator لرؤية ال output لل system الخاص بك ولكن ليس فى الحقيقة.من امثلتها مرامج مثل : Protus قد تحتاج الى عمل debugging على الكود بتاعك هنا بقا بتحتاج الى اجهزة معينة لهذا الغرض وبرامج معينة ايضا وفى الغالب تكون محددة على حسب نوع ال microcontroller او ال microprocessor الذى تستخدمه .. شوف ال links دى : ^_^ http://www.edn.com/design/test-and-measurement/4403185/How-to-debug-embedded-systems


Leave a Reply