طرحی که به نظرم رسیده برای شما دوستان عزیز عرض می کنم
در این طرح قرار این کامپایلر نوشته شود که در آن بتوان تمام میکروهای موجود را ساپورت کنه و از تمام زبانها نیز پشتیبانی کند کاری که .NET داره انجام می دهد . این ایده من هم دقیقا الگوبرداری شده از .NET ماکروسافته
کار اصلی که .NET می کنه (جدا از مباحث دیگر آن که کنترل حافظه ، متا دیتا و یک کوه کتابخانه همه کاره و ... )این است که یک زبان میانی قوی تعریف کرده که تمام زبانهای برنامه نویسی تحت NET مانند VB.NET یا C# یا Delphi.NET یا ... ابتدا به این زبان تبدیل می شوند سپس برنامه تبدیل شده به زبان میانی با استفاده از یک کامپایلر (یا بهتر بگیم اسمبلر) به کد ماشین CPU که در آن قرار گرفته است تبدیل می شود ( این رو هم بگم که خود ماکروسافت هم از شرکت Sun تقلید کرده ، زبان جاوا هم چنین کاری می کند برای همین هست که می توانید آن را روی انواع مختلف دستگاه ها اجرا کنید چون فایل حاوی برنامه اجرای جاوا حاوی کد زبان میانی است که برای جاوا تعریف شده است و در دستگاه مثلا موبایل این کدها توسط یک برنامه نوشته شده مخصوص آن دستگاه به زبان ماشین CPU آن دستگاه تبدیل می شود).

من هم با خودم گفتم می شود چنین کاری را برای میکروهایی که با آنها سرو کار داریم انجام دهیم کافی است یک زبان میانی قوی ایجاد کنم
برای شروع زبانهای اسمبلی ic ها مختلف رو وارسی کردم و به این نتیجه رسیدم که بهترین روش استفاده از دستورات زبان میانی شرکت ماکروسافت به نام MSIL است
لینک زیر لیست کامل این دستورات را به همراه توضیح مختصر درباره آن نوشته است
http://en.wikipedia.org/wiki/List_of_CIL_instructions
هسته اصلی این زبان میانی یک پشته است در واقع شما به جای اینکه عملیات را روی رجیسترها انجام دهید بر روی پشته انجام می دهد
مثلا برای جمع دو عدد به صورت زیر عمل می کنید
ldc.i4 20
ldc.i4 30
add
این دستورات دو عدد که در قالب 32 بیتی هستند را ابتدا درون پشته قرار داده سپس دستور add را می نویسیم ، این دستور دو تا مقداری که آخرین بار در پشته قرار داده شده است (اطلاعات بالای پشته) است را باهم جمع می کند (و از پشته خارج می کند) و نتیجه را درون پشته قرار می دهد
هرچند این زبان نسبت به اسمبلی میکروها سخت تر است اما به ما قابلیت جدا شدن از بند 8 بیتی یا 32 بیتی یا چند رجیستر می توان استفاده کرد و ... رها می کند
ضمنا برای هر زیربرنامه نیز ما یک مکان برای ذخیره داده موقت داریم .( که این کار رو در میکروها با استفاده از اختصاص یک پوینتر، مثلا در AVR ، پوینتر X انجام داد یا به شکلهای دیگر قابل پیاده سازی است)
هر چند قرار نیست کل دستورات زبان میانی ماکروسافت یا همان MSIL یا به اختصار IL رو اجرا کنیم چون این زبان در واقع زبانی است که کاملا از مفاهیم شی گرایی مانند وراثت، تغییر شکل پذیری و ... که از قابلیتهای .NET شمرده می شود برخوردار است.
طرح من هم تقریبا (99.99%) مانند ماکروسافت با این تفاوت که قرار از تایمر، A/D ، با حافظه های خیلی کم، و سایر مشخصاتی که متعلق به میکروکنترلر ها هست رو در خودش قرار بده
در این صورت اگر شما بتوانید یک کتابخانه برای زبان میانی بنویسید می توانید از آن در همه میکروها و در همه زبانهای برنامه نویسی از آن استفاده کنید
برای شروع همه ابتدا دستورات زبان میانی پیدا کرد که تمام خواسته های یک میکرو رو بتواند انجام دهد
برای این کار با خودم گفتم همانند ماکروسافت عمل می کنم با این تفاوت که نوع داده ذخیره شده در پشته را نیز ذخیره کنیم ( چون بیس کار IL داده های 32 بیتی است) و همچنین بخشی نیز اضافه شود که کاری همانند I/O ها در میکرو پرسسورها انجام دهد و برای هر وسیله که می تواند ram یا حافظه flash یا Timer یا ... باشد یک آدرس مشخص در نظر گرفته شود مثلا اگر آدرس بین 1024 تا 1500 باشه این حتما یک ram داخلی یا اگر بین 2048 تا 3062 بود آدرس یک Flash یا بقیه ....
حتما با خودتون میگید حافظه Flash یا Ram خیلی بیش از اینها آدرس نیاز داره ؟
اما این آدرس خود ram یعنی می توانید چند تا حافظه رم داشته باشید و آدرس داخلی نیز باید علاوه بر آن داده شود یعنی اول باید آدرس نوع وسیله را بدهید سپس آدرس داخلی آن را در این صورت می توانید آدرسهای قطعه را ثابت نگه دارید
همچنین بخشی دیگر نیز بهش اضافه کردم تحت عنوان پشته وقفه، اگر وقفه ای در یکی از دستگاه ها ایجاد شده باشد آدرس زیربرنامه هایی که باید اجرا شود در این بخش نوشته می شود

می دانم خیلی بد توضیح دادم اما در تاپیکهای بعدی سعی می کنم شفافتر مطلبم رو بگم
اگر موردی هست که من یادم رفته درباره اون بگم رو هم لطفا اعلام کنید
در این طرح قرار این کامپایلر نوشته شود که در آن بتوان تمام میکروهای موجود را ساپورت کنه و از تمام زبانها نیز پشتیبانی کند کاری که .NET داره انجام می دهد . این ایده من هم دقیقا الگوبرداری شده از .NET ماکروسافته
کار اصلی که .NET می کنه (جدا از مباحث دیگر آن که کنترل حافظه ، متا دیتا و یک کوه کتابخانه همه کاره و ... )این است که یک زبان میانی قوی تعریف کرده که تمام زبانهای برنامه نویسی تحت NET مانند VB.NET یا C# یا Delphi.NET یا ... ابتدا به این زبان تبدیل می شوند سپس برنامه تبدیل شده به زبان میانی با استفاده از یک کامپایلر (یا بهتر بگیم اسمبلر) به کد ماشین CPU که در آن قرار گرفته است تبدیل می شود ( این رو هم بگم که خود ماکروسافت هم از شرکت Sun تقلید کرده ، زبان جاوا هم چنین کاری می کند برای همین هست که می توانید آن را روی انواع مختلف دستگاه ها اجرا کنید چون فایل حاوی برنامه اجرای جاوا حاوی کد زبان میانی است که برای جاوا تعریف شده است و در دستگاه مثلا موبایل این کدها توسط یک برنامه نوشته شده مخصوص آن دستگاه به زبان ماشین CPU آن دستگاه تبدیل می شود).

من هم با خودم گفتم می شود چنین کاری را برای میکروهایی که با آنها سرو کار داریم انجام دهیم کافی است یک زبان میانی قوی ایجاد کنم
برای شروع زبانهای اسمبلی ic ها مختلف رو وارسی کردم و به این نتیجه رسیدم که بهترین روش استفاده از دستورات زبان میانی شرکت ماکروسافت به نام MSIL است
لینک زیر لیست کامل این دستورات را به همراه توضیح مختصر درباره آن نوشته است
http://en.wikipedia.org/wiki/List_of_CIL_instructions
هسته اصلی این زبان میانی یک پشته است در واقع شما به جای اینکه عملیات را روی رجیسترها انجام دهید بر روی پشته انجام می دهد
مثلا برای جمع دو عدد به صورت زیر عمل می کنید
ldc.i4 20
ldc.i4 30
add
این دستورات دو عدد که در قالب 32 بیتی هستند را ابتدا درون پشته قرار داده سپس دستور add را می نویسیم ، این دستور دو تا مقداری که آخرین بار در پشته قرار داده شده است (اطلاعات بالای پشته) است را باهم جمع می کند (و از پشته خارج می کند) و نتیجه را درون پشته قرار می دهد
هرچند این زبان نسبت به اسمبلی میکروها سخت تر است اما به ما قابلیت جدا شدن از بند 8 بیتی یا 32 بیتی یا چند رجیستر می توان استفاده کرد و ... رها می کند
ضمنا برای هر زیربرنامه نیز ما یک مکان برای ذخیره داده موقت داریم .( که این کار رو در میکروها با استفاده از اختصاص یک پوینتر، مثلا در AVR ، پوینتر X انجام داد یا به شکلهای دیگر قابل پیاده سازی است)
هر چند قرار نیست کل دستورات زبان میانی ماکروسافت یا همان MSIL یا به اختصار IL رو اجرا کنیم چون این زبان در واقع زبانی است که کاملا از مفاهیم شی گرایی مانند وراثت، تغییر شکل پذیری و ... که از قابلیتهای .NET شمرده می شود برخوردار است.
طرح من هم تقریبا (99.99%) مانند ماکروسافت با این تفاوت که قرار از تایمر، A/D ، با حافظه های خیلی کم، و سایر مشخصاتی که متعلق به میکروکنترلر ها هست رو در خودش قرار بده
در این صورت اگر شما بتوانید یک کتابخانه برای زبان میانی بنویسید می توانید از آن در همه میکروها و در همه زبانهای برنامه نویسی از آن استفاده کنید
برای شروع همه ابتدا دستورات زبان میانی پیدا کرد که تمام خواسته های یک میکرو رو بتواند انجام دهد
برای این کار با خودم گفتم همانند ماکروسافت عمل می کنم با این تفاوت که نوع داده ذخیره شده در پشته را نیز ذخیره کنیم ( چون بیس کار IL داده های 32 بیتی است) و همچنین بخشی نیز اضافه شود که کاری همانند I/O ها در میکرو پرسسورها انجام دهد و برای هر وسیله که می تواند ram یا حافظه flash یا Timer یا ... باشد یک آدرس مشخص در نظر گرفته شود مثلا اگر آدرس بین 1024 تا 1500 باشه این حتما یک ram داخلی یا اگر بین 2048 تا 3062 بود آدرس یک Flash یا بقیه ....
حتما با خودتون میگید حافظه Flash یا Ram خیلی بیش از اینها آدرس نیاز داره ؟
اما این آدرس خود ram یعنی می توانید چند تا حافظه رم داشته باشید و آدرس داخلی نیز باید علاوه بر آن داده شود یعنی اول باید آدرس نوع وسیله را بدهید سپس آدرس داخلی آن را در این صورت می توانید آدرسهای قطعه را ثابت نگه دارید
همچنین بخشی دیگر نیز بهش اضافه کردم تحت عنوان پشته وقفه، اگر وقفه ای در یکی از دستگاه ها ایجاد شده باشد آدرس زیربرنامه هایی که باید اجرا شود در این بخش نوشته می شود

می دانم خیلی بد توضیح دادم اما در تاپیکهای بعدی سعی می کنم شفافتر مطلبم رو بگم
اگر موردی هست که من یادم رفته درباره اون بگم رو هم لطفا اعلام کنید
دیدگاه