اگر قسمت سوم آموزش میکروبلیز “ آموزش میکروبلیز قسمت سوم: آموزش زبان برنامهنویسی C ” را مطالعه کرده باشید به بحث جذاب متغیرها با شناسایی کلاسهای حافظه و همینطور به نحوه اصولی تعریف متغیر به همراه کلاسهای حافظه پرداختیم. حال در این قسمت میخواهیم ابتدا به تعریف اولیه عملگرها و در ادامه به انواع مختلف عملگرها به همراه تقدم آنها در برنامه نویسی به همراه مثالهای متعدد بپردازیم.
عملگر چیست؟
انواع عملگرها در برنامهنویسی زبان C
- عملگرهای ریاضی ( Arithmetic Operators)
- عملگرهای منطقی ( Logical Operators)
- عملگرهای بیتی ( Bitwise Operators)
- عملگرهای انتسابی (Assignment Operators)
- عملگرهای رابطهای (Relational Operators)
- عملگرهای متفرقه (Misc Operators)
عملگرهای محاسباتی (Arithmetic Operators)
قبل از اینکه به توضیح این بخش بپردازیم ابتدا به تصویری که مشاهده میکنید، دقت کنید.
همانطوری که در تصویر مشاهده میکنید در سمت چپ جدول عملگرها نوشته شده است و در نهایت پس از توضیح در مورد عملگر موردنظر یک مثال زده شده است حال میخواهیم به صورت کلیتر در مورد این عملگرها بپردازیم.
عملگر + :
از این عملگر زمانیکه بخواهیم دو مقدار را با یک دیگر جمع کنیم استفاده میکنیم البته صرفا برای دو عدد نیست. بلکه اگر کمی با دید یک برنامه نویس نگاه کنیم میتوانیم به صورت کلی بگوییم انجام هر عملی که در آن عمل جمع نیاز باشد صورت میگیرد میتوان از این عملپر استفاده کرد.
به طور مثال :
1 2 3 4 5 6 7 | short A=24; short B=56; int result; result = A + B; |
عملگر – :
عملگر تفریق هم دقیقا مشابه عملگر بعلاوه است با این تفاوت که به جای عملیات جمع، عملیات تفریق صورت میگیرد.
1 2 3 4 | short A=24; short B=56; int result; result = B - A; |
عملگر * :
زمانیکه در برنامه بخواهیم دو متغیر را با یک دیگر ضرب کنیم از این عملگر استفاده میکنیم.
1 2 3 4 | short A=24; short B=56; int result; result = B * A; |
عملگر / :
زمانیکه در برنامه بخواهیم عمل تقسیم را انجام دهیم باید از این متغیر استفاده کنیم.
1 2 3 4 | short A=24; short B=56; int result; result = B / A; |
عملگر % :
از این عملگر هم جهت بدست آوردن مقدار باقیمانده تقسیم استفاده میکنیم.
1 2 3 4 | short A=24; short B=56; int result; result = B % A; |
عملگر ++ :
این عملگر، یک عملگر افزایشی است که از آن برای افزایش یک واحدی برای متغیرها استفاده میکنیم.
1 | A++ |
عملگر — :
دقیقا عملکرد آن مثل عملگر افزایشی است با این تفاوت که به جای افزایش یک واحد به متغیر، یک واحد از متغیر کاهش میدهد.
1 | B-- |
عملگرهای منطقی (Logical Operators)
عملگر && :
از این عملگر جهت مقایسه دو مقدار در برنامه استفاده میشود و عملکرد آن به این گونه است که باید حتما دو مقدار برقرار باشد تا خروجی 1 شود در غیر اینصورت شرط برقرار نیست و در نهایت خروجی 0 خواهد ماند برای درک بهتر اجازه دهید که ابتدا با ساختار گیت AND آشنا شویم.
اگر به تصویر با دقت نگاه کنید میبینید که خروجی در تمامی حالات 0 است (شرط برقرار نیست) و فقط در یک حالت عبارت خروجی برابر با 1 است (شرط برقرار است) و آن زمانی است که دو عبارت A و B برابر با 1 باشند. برای بحث برنامه نویسی هم دقیقا این موارد صدق میکند. به عنوان مثال :
1 | A && B |
عملگر || :
این عملگر هم یک عملگر مقایسهای است و عملکرد آن هم مثل عملگر (&&) است البته با این تفاوت که اگر یکی از عبارات برقرار باشد خروجی مقدار آن صحیح است. برای درک بهتر به تصویری که در ادامه قرار میدهیم دقت کنید.
همانطوری که مشاهده میکنید دقیقا این گیت برعکس گیت AND عمل میکند یا به عبارت دیگر در صورتیکه یکی از مقادیر صحیح باشد مقدار خروجی آن 1 میشود و فقط در یک حالت شرط برقرار نمیشود و آن هم زمانی است که هیچکدام از شرط ها برقرار نباشند. طرز استفاده از آن هم در برنامه به صورت زیر است.
1 | A || B |
عملگر ! :
اصطلاحا به این عملگر نقیض هم گفته میشود یعنی اینکه هر مقداری که میخواهد در خروجی قرار گیرد آن را نقیض یا NOT میکند. برای درک بهتر به تصویر زیر دقت کنید.
همانطوری که در تصویر مشخص شده است خروجی دقیقا برعکس مقدار ورودی است به عبارت دیگر مقدار خروجی NOT مقدار ورودی است. طرز استفاده از آن هم در برنامه به صورت زیر است.
1 | !(A && B) |
عملگرهای بیتی (Bitwise Operators)
قبل از اینکه به توضیح این دسته از عملگرها بپردازیم ابتدا باید با دو تعریف بایت و بیت آشنا شویم.
بیت چیست؟
Bit مخفف عبارت binary digit است.
بیت، یک عدد در دستگاه اعداد دودویی و یکای اندازهگیری داده در رایانه است. هر ۸ بیت معادل ۱ بایت است. بیت کوچکترین واحد داده در ذخیره و بازیابی داده در رایانه محسوب میشود.
بایت چیست؟
1 2 3 | A = 0011 1100 B = 0000 1101 |
عملگر & :
این عملگر در واقع کار گیت منطقی AND را به صورت بیت به بیت انجام میدهد. به تصویری که در ادامه قرار میدهیم دقت کنید.
1 | A&B = 0000 1100 |
عملگر | :
این عملگر در واقع کار گیت منطقی OR را به صورت بیت به بیت انجام میدهد. به تصویری که در ادامه قرار میدهیم دقت کنید.
1 | A|B = 0011 1101 |
عملگر ^ :
این عملگر در واقع کار گیت منطقی XOR را به صورت بیت به بیت انجام میدهد. به شکل زیر دقت کنید.
اگر به شکل بالا دقت کنید میتوان یک نتیجه کلی گرفت و آن را به کل نیز تعمیم داد.
1 | A^B = 0011 0001 |
این عملگر در واقع کار گیت منطقی NOT را به صورت بیت به بیت انجام میدهد. که در بخش عملگرهای منطقی عملکرد آن را توضیح دادهایم.
1 2 3 | ~A = 1100 0011 B=؟ |
این عملگر را اصطلاحا عملگر شیفت میگویند حالا نکته ای که وجود دارد این است که، طبق جهتی که قرار دارند چپ و راست بودن آنها مشخص میشود به طور مثال این (>>) عملگر را عملگر شیفت به چپ میگویند ( اگر به لبه جهت ها دقت کنید میبینید که جهت آنها سمت چپ میباشد).
اما کار این عملگر به چه صورتی است؟ در واقع همانطور که توضیح دادیم این عملگر کار شیفت به چپ را انجام میدهد.
شیفت دادن چیست؟ عمل شیفت یعنی اینکه شما قادر هستید مقدار یک بیت را به اندازه دلخواه در جهتی که میخواهید (چپ یا راست) جا به جا کنید. به طور مثال میخواهیم مقدار A را به انداره دو واحد به سمت چپ شیفت دهیم.
1 | A = 0011 11000 مقدار اولیه A |
1 | A << 2 => 1111 0000 |
اگر مقدار اولیه A را با مقدار شیفت داده آن مقایسه کنید میبینید که این مقدار به اندازه دو واحد نیز تغیر کرده است.
عملگر << :
این عملگر را شیفت به راست میگویند ( به لبه ها دقت کنید چون سمت راست هستند به این عملگر شیفت به راست میگوییم). دقت کنید که دقیقا تعاریف بالا، برای این قسمت هم کاملا صدق میکند و از تعریف مجدد پرهیز میکنیم. حال اگر بخواهیم مقدار A را دو واحد به سمت راست شیفت دهیم باید چه تغییری در مقدار اولیه A ایجاد کنیم؟ و جواب نهایی به چه صورتی خواهد بود؟
1 | A = 0011 11000 مقدار اولیه A |
1 | A >> 2 => 0000 1111 |
تمرین: مقدار زیر را به ترتیب شیفت به چپ به اندازه 2 واحد، شیفت به راست به اندازه 3 واحد و شیفت به چپ به اندازه 4 واحد انجام دهید.
1 | B = 0000 1101 |
عملگرهای انتسابی (Assignment Operators)
در واقع به این نوع از عملگرها، عملگرهای ترکیبی هم میگویند که تقریبا میتوان گفت از این نوع عملگرها جهت ساده سازی و خوانایی کد استفاده میکنند وگرنه از لحاظ عملکرد اصلی برنامه، تغیری در آن صورت نمیگیرد و تفاوتی در اصل برنامه ایجاد نمیکند. برای درک بهتر موضوع برای هر یک از عملگرها یک مثال میزنیم تا دید بهتری نسبت به این نوع از عملگرها پیدا کنیم.
عملگر = :
1 | C = A + B |
عملگر =+ :
1 2 3 | C += A برابر است با C = C + A |
عملگر =- :
1 2 3 4 | C -= A برابر است با C = C - A |
عملگر =* :
1 2 3 4 5 | C *= A برابر است با C = C * A |
عملگر =/ :
1 2 3 4 5 | C /= A برابر است با C = C / A |
عملگر =% :
1 2 3 4 5 | C %= A برابر است با C = C % A |
عملگر =>> :
1 2 3 4 5 | C <<= 2 برابر است با C = C << 2 |
عملگر =<< :
1 2 3 4 5 | C >>= 2 برابر است با C = C >> 2 |
عملگر =& :
1 2 3 4 5 | C &= 2 برابر است با C = C & 2 |
عملگر =^ :
1 2 3 4 5 | C ^= 2 برابر است با C = C ^ 2 |
عملگر =| :
1 2 3 4 5 | C |= 2 برابر است با C = C | 2 |
عملگرهای رابطهای (Relational Operators)
در واقع به این نوع از عملگرها، میتوان عملگرهای مقایسهای هم گفت. در واقع اگر به تصویر بالا دقت کنید مشاهده میکنید که از این عملگرها برای برسی یا مقایسه یک شرط نیز استفاده شده است که در ادامه برای هر یک از این عملگرها یک مثال میزنیم.
عملگر == :
دقت کنید این عملگر را با = اشتباه نگیرید.
سوال: چه تفاوتی بین عملگر = و == وجود دارد؟
1 2 3 4 5 6 7 8 9 10 11 | A = 20; کاری که خط بالا در برنامه میکند این است که مقدار 20 را در متغیر A قرار میدهد. خیلی از افراد نمیدونند که از این عملگر به عنوان کپی یک مقدار هم میشه استفاده کرد شما دیگه با خوندن این مقاله امیدوارم که متوجه شده باشید. A ==20; این خط در برنامه نشان دهنده این موضوع است که آیا متغیر A برابر مقدار 20 است یا خیر؟ و در صورت صحیح بودن شرط یک کار خاصی را انجام میدهد و در صورتیکه عضو آن نباشد خروجی آن مقدار صفر یا False می باشد. |
از این عملگر برای نامساوی بودن بین دو مقدار یا متغیر استفاده میکنند همانطور که از مباحث قبلی میدانیم علامت ! به عنوان نقیض استفاده میشود و به عبارتی با هر چیزی که استفاده شود مقدار آن را نقیض میکند. پس اگر علامت = به معنی مساوی است قاعدتا علامت =! به معنای نامساوی است. برای درک بهتر موضوع به مثال زیر توجه کنید.
1 2 3 4 | A =! 19; این خط بیانگر این است که مقدار A هر عددی جز 19 باشد شرط برقرار است و در غیر اینصورت شرط برقرار نیست دقیقا باالعکس = است. |
عملگر < :
این عملگر هم به عنوان بزرگتری در برنامه استفاده میشود (فکر نمیکنم بیشتر از این نیاز به توضیح داشته باشه ).
1 2 3 4 | (A > B) در واقع زمانیکه مقدار A بزرگتر از B باشد خروجی 1 میباشد و در غیر اینصورت مقدار آن 0 است. |
عملگر > :
این عملگر هم به عنوان کوچکتری در برنامه استفاده میشود .
1 2 3 4 | (A < B) در واقع زمانیکه مقدار A کوچکتر از B باشد خروجی 1 و در غیر اینصورت مقدار آن 0 است. |
عملگر =< :
به این عملگر هم بزرگتر مساوی میگویند که در واقع ترکیبی از = و < است .
1 2 3 4 | (A >= B) در صورتیکه مقدار A برابر با مقدار B و یا بزرگتر از مقدار B بود آنگاه خروجی 1 و در غیر اینصورت مقدار آن 0 میباشد. |
عملگر => :
به این عملگر هم کوچکتر مساوی میگویند که ترکیبی از دو عملگر = و > است.
1 2 3 4 | (A <= B) در صورتیکه مقدار A برابر با مقدار B و یا کوچکتر از مقدار B بود آنگاه خروجی 1 و در غیر اینصورت مقدار آن 0 میباشد. |
عملگرهای متفرقه (Misc Operators)
در واقع دلیل اینکه این دسته از عملگرها را متفرقه مینامیم، این است که، این دسته از عملگرها را نمیتوان جز سایر عملگرها قرار دهیم به همین دلیل این دسته از عملگرها را، متفرقه مینامیم .
عملگر sizeof :
به جرات میتوانیم بگوییم که این عملگر، یکی از مهمترین عملگرهایی است که در زبان برنامه نویسی C وجود دارد. کار این عملگر یا در واقع مهمترین کار این عملگر به دست آوردن اندازه متغیر مورد نظر است که متاسفانه خیلی از تازه کارها از این عملگر استفاده نمیکنند و یا کاربرد آن را نمیدانند (اگر زبان C را با این آموزش ها شروع کرده اید توصیه میکنیم حتما و حتما از این عملگر در برنامه های خود استفاده کنید). اگر به زبان ساده بگوییم یکی از راههای دیباگ برنامه استفاده از همین متغیر است.
طرز استفاده از این عملگر در زبان C به صورت زیر میباشد.
1 | sizeof(double) |
عملگر & و * :
در واقع این دو عملگر با آدرس کار میکنند یعنی چی؟ اجازه دهید با یک مثال به توضیح این بخش بپردازیم. فرض کنید الان میخواهیم به دنیای داخلی میکروکنترلرها سفر کنیم (چشمها بسته) همینطور که مشاهده میکنید یک میکروکنترلر از چندین بخش مختلف تشکیل شده، مثل رابط های سختافزاری و نرمافزاری UART و I2C و IO و … خب هنوز باید بیشتر عمیق تر شویم اگر دقت کنید الان دقیقا رسیدیم به نقطه موردنظر، که همان اجزای تشکیل دهنده حافظه میکروکنترلر هستند ( خب کمربند ها رو محکم ببندید) اگر کمی با دقت تر نگاه کنیم میبینیم که این حافظه ها خودشان در واقع از فلیپ فلاپها ساخته شده اند ( حالا اینکه چرا فلیپ فلاپ؟ برمیگیرده به بحث مدارت ترکیبی و ترتیبی که در اینجا بحث ما نیست برای درک این نوع از مدارت به آموزش FPGA مراجعه کنید.) که دقیقا ما هم میخواستیم به همین نتیجه برسیم. اگر کمی به عقب تر برگردیم میبینیم که هر حافظه در دنیای میکروکنترلرها دارای یک آدرس خاص و منحصر به فرد مربوط به خود را دارد ( دوستان چشماتونو باز کنید). خب برگردیم به مبحث عملگرها، طبق توضیحاتی که دادیم مشخص شد که این عملگرها مثل اینکه با حافظه ها سر و کار دارند. بله دقیقا درست است.
در واقع عملگر * کاری را که انجام میدهد این است که به صورت غیر مستقیم به ما اجازه دسترسی به حافظه مربوطه را میدهد دقت کنید که به حافظه مورد نظر اشاره میکند و اگر به زبان عامیانه تعریف کنیم این عملگر برای هر متغیری که به کار رود یک آدرس از کل حافظه را در نظر میگیرد و مشخص میکند که این متغیر در آدرس xxxx حافظه قرار گرفته است. حال نوبت به عملگر & میرسد این عملگر کاری که انجام میدهد این است که حافظه آدرس دهی شده را فراخوانی میکند (دقت کنید حافظه مورد نظر رو نه اینکه محتوا اون، خیلی مهمه این موضوع، شاید برخی از دوستان این اشتباه رو کنند که فقط محتوا رو برمیگردونه نه اینطور نیست واقعا اتفاقی که میفته اینکه آدرس حافظه رو برمیگردونه حالا توی اون حافظه هر چی میخواد باشه لطفا دقت کنید). دقت کنید که در میکروبلیز بسیار این موضوع کاربرد دارد و از اهمیت بسیار بالایی برخوردار است. نحوه استفاده از این نوع عملگرها در زبان برنامهنویسی C به صورت زیر میباشد.
1 2 3 4 5 | P=&B آدرس B در P قرار می گیرد. P=20* جایی که آدرس آن در P است (همان B ) , برابر با 20 میشود. m=*P محتویات جایی که آدرسش در P است(20) در m قرار می گیرد. |
البته اگر این مبحث کمی برایتان گنگ است جای ناراحتی ندارد ان شالله در قسمت های بعدی به طور کاملا مفصل به این موضوع خواهیم پرداخت (البته به شرط حیات).
عملگر : ? :
این عملگر، یک عملگر شرطی است که در نوشتن کتابخانهها واقعا کاربرد دارد و طرز استفاده آن به صورت زیر میباشد.
; <عبارت۲> : <عبارت ۱> ؟ <شرط >=متغیر
1 2 3 4 | short B , L ; B = 5 ; L = B > 5 ? B ∗ ۲ : B ∗ ۵ ; |
در واقع عملکرد برنامه بالا به صورت زیر میباشد.
اگر ارزش آن درست باشد عبارت ۱ برای انتساب مورد استفاده قرار میگیرد.
اگر ارزش آن نادرست باشد عبارت ۲ برای انتساب مورد استفاده قرار میگیرد.
عملگر کاما (Comma) :
در واقع از این عملگر برای انجام چند عمل در یک دستور به کار میرود.
; ( < عبارت ۲ > , < عبارت ۱ >) = متغیر
معمولا عبارت ۱ به نحوی با عبارت ۲ در ارتباط است . بعد از اینکه ارزیابی و اجرای عبارت ۱ به پایان رسید عبارت ۲ میتواند از نتیجه آن استفاده کند. به طور مثال به برنامه ای که در ادامه قرار گرفته است دقت کنید.
1 2 3 | int x , y ; y = ( x = 5 , x * 9 / 2); |
تقدم عملگرها (Operators Precedence)
اگر به شکل بالا دقت کنید میبینید که عملگرها طبق یک قانون و قاعدهای اولویت بندی شدهاند که در واقع به این نکته اشاره میکند که استفاده از هر عملگر دارای یک اولویتی است که باید ابتدا به این موضوع تسلط داشته باشیم چون در در صورت ندانستن این اولویت بندیها، در جواب نهایی دچار اشتباه خواهیم شد. به طور مثال به کد زیر نگاه کنید.
1 | x = 7 + 3 * 2; |
به نظر شما جواب چه عددی است؟ خیر اشتباه حدس زدید جواب 13 است نه 20. دلیل این اتفاق هم چیزی جز رعایت نکردن این اولویت بندیها نیست چون اگر به تصویر بالا دقت کنید تقدم عمل * بیشتر از + است در نهایت اتفاقی که میافتد ابتدا عمل ضرب صورت میگیرد و در نهایت جمع میشود.
خب سوالی که شاید برای خیلی از شماها پیش آید این است که باید ترتیب این اولویت بندی ها را باید حفظ باشیم؟ خیر هیچ نیازی نیست بلکه راهحل این است که از پرانتز() برای اولویت بندی در برنامهها استفاده کنیم دلیل این کار هم این است که، پرانتز () بالاترین تقدم را نسبت به همه عملگرها دارد. به طور مثال اجازه دهید که برنامه بالا را تصحیح کنیم.
1 | x = (7 + 3) * 2; |
خب حالا به نظر شما جواب چند است؟ بله درست حدس زدید 20 جواب درست است. دلیل هم این است که تقدم پرانتز بیشتر از عمل ضرب است پس اتفاقی که میافتد این است که ابتدا محاسبات داخل پرانتز صورت میگیرد و در نهایت عمل ضرب صورت میگیرد.
امیدوارم که این آموزش هم برای شما عزیزان مفید واقع شده باشد.
ممنون از زحمات شما
امیدوارم همینگونه با انرژی ادامه بدین به این کار زیبا
سلام وقت بخیر .برای پروژه حضور وغیاب تصویری با رسپری پای چه وسایلی مورد نیاز هست؟
سلام
احتمالا یه برد رزبری پای + یک دوربین (میتونه وبکم هم باشه) و شاید اگه بخواید چیزی رو نمایش بدید یه lcd ?
البته یه تغذیه هم باید داشته باشید دیگه
سلام و خداقوت!
این سری اموزش ها که مفصل به c میپردازه خیلی خیلی لازم بود ممنون که چنین اموزش خوبی منتشر میکنید
حتما ادامه بدید
سلام دوست عزیز
به زودی خبر های خوبی در همین راستا از سیسوگ خواهید شنید.
توضیحات عالی و پر محتوا بودند . ممنون . اگه کمی هم درمورد عملگر های پیش پردازنده توضیح بدید عالی میشه .
من از # , ## استفاده های خوبی داشتم .
سلام دوست عزیزم لطفا سری مقالات میکروبلیز رو از دست ندید چون به تک تک این موارد در صورت نیاز برنامهنویس حتما پرداخته خواهد شد.
ممنون از اینکه با نظراتتون بنده رو بیشتر راغب می کنید که این سری از مباحث رو با قدرت بیشتری ادامه بدم.
موفق باشید.
سلام
خیلی مفصل و کامل بود.خدا قوت .
سوالی داشتم : آیا میشه میکروبلیز رو روی SoC ها هم اجرا کرد ؟ مثلا پردازنده های زینک سری7 خود شرکت زایلینکس . قطعا نرم افزار Vivado باید پشتیبانی کنه دیگه …
سلام دوست عزیزم
خیر، چون خود SOC که شما اشاره کردید در واقع نوعی میکروکنترلر هستند و تقریبا هم عملکردی مشابه با میکروبلیز انجام میدهند. البته اگر منظورتون رو درست متوجه شده باشم
حالا اینکه دقیقا میکروبلیز چیه و چیکار میکنه و ….
ان شالله در قسمت های بعدی به این مبحث جذاب خواهم پرداخت
موفق باشید دوست عزیزم
با سلام و احترام،
گمان می کنم دوست من منظور شما رو دقیق متوجه نشده باشه. چون پاسخ سوال شما بله است. داخل تراشه zynq یک یا دو هسته پردازشی ARM داریم که می تواند بسیار پرقدرت تر جایگزین میکروبلیز شود. ولی در حالت کلی پیاده سازی میکروبلیز روی بخش PL تراشه zynq امکانپذیر است. @Hexalinx
از آموزش بسیار خوب BLO OM ممنونم.
سلام دوست عزیزم اولا متشکرم از توضیحاتی که دادید و اینکه در تکمیل صحبت هاتون دوست عزیزم در پاسخ به اقای امیر نیازه که اینجا یک سری توضیحات رو بدم که سوالاشون کاملا رفع ابهام شه.
اول از همه اجازه بدید من یک سری توضیحات اولیه رو بدم خدمتتون که مسله حل شه
میکروبلیز در واقع یک Softcore در واقع محسوب میشه یعنی اینکه شما به خودی خود روی FPGA چیزی به نام میکروبلیز نداری در صورت نیاز باید طبق روندی که در ادامه مقالات توضیح خواهیم داد این رو درست کنیم و در نهایت با اون به زبان C برنامه نویسی کنیم و ادامه ماجرا
حالا SOC اصطلاحا مخفیف واژه System on chip هستش که در واقع تلفیقی از دو نوع ARM و FPGA (دقت کنید که مفهوم SOC در واقع چیز دیگری است من فقط برای مثال اینجوری گفتم خدمتتون امیدوارم سو برداشت نشه ) در کنار همدیگه هستش یعنی چی؟ یعنی اینکه مثلا توی سری های مثلا زینک ما دو قسمت داریم به نام PL و PS خب سوالی که اینجا ممکنه براتون پیش بیاد اینکه PS و PL چیه اصلا؟
PS در واقع مخفف واژه processing system هست که اگر به معنی دقت کنید یعنی اینکه دارای یک پروسسور یا اصطلاحا پردازنده است که توسط یک راه ارتباطی (باس) پر سرعت (AXI) کار میکنه. حالا اینکه این پروسسور یه هسته مجزا توی FPGA یا با گیت منطقی دقیقا کار میکنه و … سوالاتی که توی ذهنتونه اجازه بدید که بیشتر دیگه ادامه ندم واقعا بخوام بگم خودش باز دنیای دیگه ای اصلا یه مقاله ای میشه برا خودش
PL مخفف واژه peripherals implemented هست به این معنی که شما قادر هستی به صورت نرمافزاری IP موردنظرتو پیاده سازی کنی دقیقا مثل میکروبلیز که در ادامه اموزش ها این کار رو خواهیم کرد ( من اگر خیلی توضیح نمیدم چون در ادامه مقالات مفصلا به این ها خواهیم پرداخت بلاخص در مورد باسهای AXI و AHB و PLB و اصل معماری میکروبلیز و زینک و ….
که در نهایت ان شالله ( به شرط حیات البته ) تفاوت معماری نوع زینک و میکروبلیز رو اشاره خواهیم کرد و اگر خیلی مشتاق بودید در مورد پیکوبلیز هم مقایسه ای انجام خواهیم داد ماشالله خیلی مباحث گستردس هر چی بگم بازم فکر میکنم کمه )
خب اگر یه نتیجه گیری کنیم در واقع شما روی SOC خودتون بخش سخت افزاری که وجود داره که از نوع ARM هستش که کار میکروبلیز رو انجام میده نه تنها میکروبلیز بلکه با توانایی و قدرت بسیار بالاتری از میکروبلیز که شما قادر به انجام خیلی از کارهای پیچیده میکنه
اما اگر مدنظرتون اینکه حتما میکروبلیز رو پیاده سازی کنید همونطوری که دوست عزیزم گفتند و طبق توضیحاتی که داده شد شما قادر هستید در بخش نرمافزاری یا PL این کار رو انجام بدید
اما با وجود اون هسته قدرتمند ارم کار خیلی درستی به نظر نمیرسه ولی از لحاظ شدنی کاملا این کار شدنی است دوست عزیزم ( امیدوارم که اقا امیر این دفعه درست متوجه منظورتون شده باشم).
بنده هم خیلی خوشحال میشم که شما عزیزان در این حوزه فعال هستید و حقیقتا باعث دل گرمی بنده است.
موفق باشید.