الگوریتم CRC

در دنیای دیجیتال امکان خرابی داده هنگام انتقال به سیستمی دیگر یا ذخیره بر روی حافظه وجود دارد. به همین دلیل ما از مدت‌ها پیش نیاز داشتیم تا الگوریتم‌های تشخیص خطا کشف شوند و این بحث تازه‌ای نیست. هنگامی که ما بدانیم در داده‌ی دریافتی خطایی وجود دارد، می‌توان دوباره از فرستنده درخواست ارسال مجدد کرد، در مواردی حتا آن …

مشاهده بیشتر »

پروتکل I2C

یکی از انواع پرکابرد پروتکل سریال که برای تبادل داده در فاصله‌ی کوتاه بین ICهای مختلف، توسعه داده شده پروتکل I2C است. در این پروتکل تنها با استفاده از دو مسیر الکتریکی با نام‌های SDA (برای دیتا) و SCL (برای کلاک) ، می‌توانیم بین چندین آیسی ارتباط برقرار کنیم. این پروتکل برای اولین بار در دهه‌ی 80 توسط NXP معرفی …

مشاهده بیشتر »

ایجاد میانبر برای دستورات git

اگر از گیت استفاده می‌کنید، احتمالاً برای شما هم پیش آمده که بخواهید با دستور زیر کامیت‌های قبلی خودتان را چک کنید: git log اگر بخواهید یه خورده جمع و جور و تر و تمیزتر ببینید، شاید option زیر را هم اضافه کنید: git log –oneline اما من خیلی از اوقات دوست دارم زمان کامیت رو هم در کنارش مشاهده …

مشاهده بیشتر »

بهبود سرعت کامپایل در make

در حال خواندن مقاله “reasons to ditch make for cmake” بودم که به ایده‌ای برای بهبود زمان کامپایل رسیدم. این مقاله به بررسی 3 مزیتِ استفاده از CMake به جای Make در پروژه‌های امبدد سیستم میپردازه. اولین مزیتی که نویسنده بهش پرداخته سرعت به مراتب بالاترِ کامپایل در استفاده از CMake و Ninja بود. اما در خلال توضیحاتش به این …

مشاهده بیشتر »

Protobuf چیست؟  | چگونه یک struct را به سیستمی دیگر ارسال کنیم؟

Protobuf چیست؟  فرض کنید می‌خواهیم بین دو سیستم -مثلا 2 میکروکنترلرمتفاوت یا میکروکنترلر و کامپیوتر– دیتای یک struct را به اشتراک بگذاریم. می‌دانیم برای اینکار نهایتا باید یک رشته بایت مابین این دو سیستم تبادل شود. اما سوال اینجاست که برای تبدیل struct به یک رشته بایت قابل انتقال چه راه‌هایی داریم؟ 

مشاهده بیشتر »

سیستم خطی

تحلیل یک سیستم خطی به مراتب راحت‌تر از تحلیل یک سیستم غیرخطی است. همین موضوع باعث می‌شود در کنترل، مخابرات و پردازش سیگنال از اهمیت بالایی برخوردار باشند.  برای خطی بودن یک سیستم لازم است دو شرط زیر برای آن برقرار باشد:  همگن بودن یا Homogeniety (Scalability):  Y(ax) = aY(x)  جمع پذیری یا Additivity:  Y(x1) + Y(x2) = Y(x1+x2)  هر …

مشاهده بیشتر »

Default Arguments | زبان برنامه نویسی ++C

در زبان ++C  می‌توان در قسمت function declaration به آرگومان‌های ورودی تابع مقداری را نسبت داد که به آن default argument می‌گویند. در این حالت اگر هنگام فراخوانی این تابع به جای این آرگومان‌ها چیزی به تابع ارسال نکنیم، مشکلی ایجاد نمی‌شود و این مقدار پیش فرض برای این آرگومان‌های تابع در نظر گرفته می‌شود. مثلا تابع ساده زیر که …

مشاهده بیشتر »

توابع const در ++C

اگر با کلمه کلیدی const در زبان C آشنا باشید، احتمالا شنیدن توابع const کمی برایتان عجیب خواهد بود. چراکه یک تابع مثل متغیر قرار نیست در حین برنامه تغییر کند. در ادامه به این می‌پردازیم که ‌const function چیست و چه کاربردی دارد؟

مشاهده بیشتر »

تفاوت new / delete با malloc / free

اگر با زبان C کار کرده باشید احتمالا با کلیدواژه‌های malloc و free که برای گرفتن و آزاد کردن حافظه از Heap هستند آشنا هستید. از طرفی ممکن است شنیده باشید که معادل این‌ها در C++ کلید واژه‌های new و delete هستند. اما این به این معنی نیست که در کامپایلر C++ نمی‌توانیم از malloc / free استفاده کنیم. پس …

مشاهده بیشتر »

حافظه cache

تو پروژه اخیرم قراره از میکروکنترلری استفاده کنم که cache داره و میشه به کمکش کدهای برنامه رو که قراره تو حافظه‌ی خارجی قرار بگیره، با سرعت خوبی اجرا کرد. این بود که لازم شد یه سر به بحث cache بزنم و یه آشنایی ساده در حدی که کارم راه بیفته باهاش پیدا کنم. در خصوص حافظه Cache شرکت ST …

مشاهده بیشتر »