کد باکیفیت

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

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

الگوریتم CRC

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

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

پروتکل I2C

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

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

چگونه یک نام مستعار برای دستور بلند گیت تعریف کنیم؟ | معرفی Git Alias

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

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

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

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

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

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

Protobuf چیست؟  فرض کنید می‌خواهیم بین دو سیستم -مثلا 2 میکروکنترلر متفاوت یا میکروکنترلر و کامپیوتر– دیتای یک struct را به اشتراک بگذاریم. می‌دانیم برای اینکار نهایتاً باید یک رشته بایت بین این دو سیستم تبادل شود. اما سوال اینجاست که برای تبدیل 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 استفاده کنیم. پس …

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