<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های میلاد صبری</title>
        <link>https://virgool.io/feed/@milad.sabri74</link>
        <description>ارشد کامپیوتر سخت افزار</description>
        <language>fa</language>
        <pubDate>2026-06-10 14:20:47</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/120077/avatar/B2Kog2.jpg?height=120&amp;width=120</url>
            <title>میلاد صبری</title>
            <link>https://virgool.io/@milad.sabri74</link>
        </image>

                    <item>
                <title>صفر تا صد Bootloader ها - قسمت اول (معرفی)</title>
                <link>https://virgool.io/Sensify/%D8%B5%D9%81%D8%B1-%D8%AA%D8%A7-%D8%B5%D8%AF-bootloader-%D9%87%D8%A7-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-kpialtfghdpi</link>
                <description>شاید تاکنون اصطلاح Bootloader را در سیستم های نهفته شنیده باشید اما با نحوه کار آن آشنایی نداشته باشید و از اهمیت وجود آن بی خبر باشید.. به طور کلی Bootloader برنامه ای ساده و کوچک است که وظیفه بارگذاری  و یا بروزرسانی برنامه اصلی را برعهده دارد.در سیستم های کامپیوتری زمانی که یک سیستم‌عامل وجود داشته باشد، برای اینکه سیستم‌عامل بتواند اجرا بشود بعد از شناسایی سخت افزار، بخش راه‌انداز سیستم‌عامل توسط bootloader در حافظه قرار می‌گیرد تا بدین ترتیب سیستم‌عامل راه‌اندازی شده و کنترل سخت‌افزار را به‌عهده بگیرد.در سیستم‌های Bare Metal‌نیز برای اینکه بتوان کد جدیدی را جایگزین برنامه فعلی نمود، از bootloader استفاده می‌کنند. وظیفه بوت‌لودر این است که با استفاده از یک حافظه جانبی خارجی یا یک پروتکل ارتباطی هم‌چون UART، I2C ، USB و … کد جدید را دریافت نماید و جایگزین کد فعلی کند و سپس کنترل سخت‌افزار را به برنامه اصلی بسپارد.در این مجموعه بلاگ، تمرکز اصلی بر روی میکروکنترلرها بالاخص میکروکنترلرهای سری STM32‌ از شرکت STMicrocontroller است. در ادامه به مفهوم bootloader در این میکروکنترلرها و نوع پیاده‌سازی آن می‌پردازیم.به طور کلی می‌توان bootloaderها  را به دو دسته تقسیم نمود. نوع اول bootloader هایی است که درون هر میکرویی از قبل وجود دارد و می‌توان از آن‌ها برای اهداف خود استفاده کرد، و نوع دوم bootloader هایی که در کنار برنامه اصلی، خودمان تهیه می‌کنیم تا وظایف مدنظرمان را برعهده بگیرد. هرکدام از این دسته‌ها مزایا و معایبی دارند که بنا به نیاز خود می‌توانید از آن‌ها بهره ببرید. در فضای آدرس هر میکرویی یک بخشی از آن به bootloader اختصاص داده شده است. مزیت این دست bootloader ها این است که فضایی غیر از Flash اصلی پردازنده را اشغال نموده و بدین ترتیب کل فضای Flash را می‌توان به برنامه اصلی اختصاص داد .هچنین این جداسازی موجب می‌شود تا ایزولاسیونی میان bootloader و کد اصلی وجود داشته باشد که درصورت ایجاد خرابی در برنامه اصلی، bootloader در امان می‌ماند. علاوه بر این برنامه هایی از سمت سازنده میکرو به وجود آمده که به کمک آن‌ها می‌توان کد اصلی را آپدیت کرد.اما این bootloader ها معایبی را هم دارند که این موارد موجب می‌شود تا ما گاها به سراغ ایجاد bootloader شخصی خود بریم. یکی از محدودیت ها این است که متناسب با هر bootloader ای، دسترسی های محدودی برای آپدیت کد برای ما ایجاد می‌شود.به عنوان مثال در برخی میکروها دریافت کد جدید تنها از طریق پورت سریال میکرو امکان‌پذیر است. یا اینکه bootloader از مکانیزم خاصی برای آپدیت داده استفاده می‌کند که عملا آپدیت اتوماتیک کد از راه دور یا به اصطلاح FOTA را نمی‌توان با آن محقق نمود. بنابراین برای کار با این bootloader ها نیاز است که یک ارتباط محلی مانند سریال میان پردازنده و سیستم Host‌ که کد جدید در آن قرار دارد ایجاد شود و هچنین نیاز به برنامه ای واسط درون Host است که کد را دریافت و به میکرو منتقل نماید.شرکت ST یک فایل با نام AN2606 که در آن اطلاعات مربوط به bootloaderهای پردازنده‌های سری STM32 است را فراهم نموده که برای استفاده از bootloaderهای میکرو مطالعه آن ضروری‌ست. به علاوه برای کار با bootloader ها می‌توان از برنامه CubeProgrammer این شرکت برای بروززسانی کدهای خود استفاده نمودعلاوه بر Bootloader های اختصاصی هر میکروکنترلر که محدودیت هایی را برای شما ایجاد می‌کند، می‌توانید بر اساس نیاز خود Bootloader خود را ایجاد نمایید تا متناسب با خواسته های شما عمل کند. به عنوان مثال در یکی از پروژه هایی که پیش‌تر انجام داده‌یم، بنا به نیاز تجهیز فریم‌ور جدید باید از طریق ماژول مخابراتی برای تجهیز ارسال شده و درون حافظه EEPROM ای که در کنار میکروکنترلر قرار داشت ذخیره می‌شد. پس از ذخیره سازی آن، bootloader اجرا می‌شد، کد دریافتی را بررسی کرده و از صحت آن اطمینان حاصل کند. پس از مطمئن شدن از درستی کد، فریم‌ور برنامه اصلی را بروز رسانی کرده و به آن پرش می‌کرد. این درحالی است که در Bootloader های اختصاصی میکروکنترلرها عموما نمیتوانید از یک ماژول مخابراتی برای دریافت کد جدید استفاده نمایید. و یا از حافظه EEPROM دیتا را دریافت کرده و به صورت خودکار داده را بروز نماید. از محدودیت‌های دیگری که Bootloader های نهفته دارند، این است که امکان بررسی صحت داده دریافتی را ندارند و یا اینکه به صورت خودکار امکان بروز رسانی فریم‌ور را ندارند. بلکه نیاز به یک برنامه واسط است که درون سیستم Host‌ قرار دارد و با Bootloader ارتباط برقرار می‌کند و کد جدید را به میکروکنترلر منتقل می‌کند.در بخش بعدی میکروکنترلرهای STM32 را بررسی کرده و مدار سخت‌افزاری را برای ارتباط با Bootloader اختصاصی آن معرفی می‌نماییم. این مدار ، با مدارهای کلاسیکی که در دیتاشیت میکروکنترلرها پیدا می‌کنید متفاوت است و قابلیت جذابی دارد که بررسی آن خالی از لطف نیست. به همین دلیل به شما توصیه می‌کنیم تا زمانی را برای بررسی آن اختصاص دهید و از زیبایی و کارآمدی آن لذت ببرید.با ما همراه باشید …WWW.Sensify.ir</description>
                <category>میلاد صبری</category>
                <author>میلاد صبری</author>
                <pubDate>Tue, 20 Feb 2024 10:54:06 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با ماژول SIM800</title>
                <link>https://virgool.io/@milad.sabri74/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D8%A7%DA%98%D9%88%D9%84-sim800-qqss8hlayexs</link>
                <description>ماژول SIM800 یک ماژول GSM شرکت SIMCOM می باشد که قابلیت انتقال صوت، پیامک و انتقال داده در بستر 2G را به کاربر میدهد. Sim800 میتواند چهار باند فرکانسی 850 ،900 ، 1800 و 1900 مگاهرتز را پشتیبانی کند. به کمک پروتکل AT نهفته درون آن ،می توانید به سادگی برنامه های خود را توسعه و Time to market محصول را کاهش دهید.درون SIM800 اینترفیس های متفاوتی پیاده سازی شده است که از جمله ی آن می توان به ارتباط سریال، پروتکل USB ، ارتباط SPI ، نام برد. علاوه بر این دارای بخش RTC و قابلیت اتصال باتری بک آپ می باشد تا بتواند زمان و تاریخ را محاسبه و در خود بروز نگه دارد.به طور کلی و ساده می توان ماژول SIM800 را از طریق ارتباط سریال به میکرو سامانه متصل نمود و ارتباط را از طریق میکروکنترلر کنترل کرد. یکی از راه های ساده ارتباط با آن پروتکل AT است که می توان صحت ارتباط  را چک نمود ، تنظیمات مورد نیاز را انجام داد و اطلاعات را منتقل کرد.پس از اتصال SIM800 به میکرو کنترلر و یا حتی سیستم کامپیوتری خود از طریق ارتباط سریال ، با باز نمودن یک ترمینال و برقراری ارتباط می توان دستورات مورد نظر را برای ماژول ارسال نمود.به عنوان مثال برای تست صحت ارتباط میتوان دستور زیر را برای ماژول ارسال کرد:AT&lt;CR&gt;درصورت برقراری ارتباط ماژول پیغام OK را ارسال می نماید.در زیر تعدادی از دستورات ابتدایی و ساده پروتکل AT آورده شده است:دستور درخواست میزان قدرت سیگنالAT+CSQ&lt;CR&gt;دستور درخواست مشخصات سیم کارتAT+CCID&lt;CR&gt;دستورات ارسال پیامکAT+CMGF=1
AT+CMGS=”&lt;phoneNumber&gt;”&lt;CR&gt;
String SMS = &amp;quot this is my Text&amp;quotکه در حالت فوق &lt;phoneNumber&gt; شماره مدنظر شما برای ارسال پیامک است و پس از ارسال دستور دوم یک String را برای ماژول ارسال کنید که این به عنوان متن پیام شما تلقی می شود.در پست های آتی به ارتباطات تخصصی تر با ماژول های GSM و انجام کارهای هیجان انگیز می پردازیم. امیدوارم که این مطلب برای شما مفید بوده باشد.</description>
                <category>میلاد صبری</category>
                <author>میلاد صبری</author>
                <pubDate>Wed, 07 Apr 2021 10:16:23 +0430</pubDate>
            </item>
                    <item>
                <title>شروع کار با Git</title>
                <link>https://virgool.io/@milad.sabri74/%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-git-vhubn6bwheqb</link>
                <description>گیت یک سیستم کنترل ورژن یا VCS است که به کمک آن می توانیم پروژه های خود را مدیریت کنیم و به کمک قابلیت Distributed در آن چندین نفر هم زمان بر روی یک پروژه کار کنند و هر یک بخشی از آن را توسعه دهند. شاید تا کنون نام سایت های Github و یا Gitlab را شنیده باشید که این دو سایت نیز از git بهره برده و این امکان را در اختیار شما قرار می دهند که سرور پروژه شما درون یک ابر ذخیره شود و دسترسی بهتری به پروژه خود داشته باشید.در گیت هاب پروژه ها به صورت عمومی به اشتراک دیگران گذاشته می شود و شما علاوه بر اینکه می توانید پروژه خود را در این سرویس نگه داری نمایید ، به دیگر پروژه ها نیز دسترسی داشته و یک Fork از پروژه دیگران برای خود ایجاد کنید. و پس از توسعه به سازنده پروژه اعلام کنید که در صورت تمایل ، تغییرات شما را در پروژه خود اعمال کند و او نیز پس از بررسی و تایید، تغییرات شما را لحاظ می نماید. بدین صورت می توانید در پروژه های دیگران شریک شوید و به پیشرفت علم کمک کنید ;). گیت لب علاوه بر این موارد این امکان را به شما میدهد تا پروژه ها را به صورت خصوصی ایجاد کنید و دسترسی و میزان سطح دسترسی را فقط به افرادی که مدنظر شما هستند و با مقداری که شما میخواهید اعمال نمایید. برای مدیریت پروژه درون کامپیوتر خود نیاز به گیت دارید که به کمک آن تغییرات خود را به پروژه اضافه کنید ، آن ها را ثبت کنید ، لاگ بگیرید ، شاخه های مختلف ایجاد کنید و حتی دیباگ کردن کد را با گیت انجام دهید. گیت به قدری گسترده است که کسی نمیتواند ادعای تسلط کامل بر روی آن را داشته باشد و از سوی دیگر به قدری ساده و کاربردی است که امروزه برای کار در هر شرکتی فراگرفتن آن یک الزام تلقی می شود. لذا اگر میخواهید درون شرکتی استخدام شوید بهتر است ابتدا با دستورات ابتدایی آن آشنا شوید و آن ها را تمرین کنید و به مرور با جستجو در اینترنت مهارت خود را افزایش دهید. در ادامه برخی از دستورات مهم و کاربردی گیت و توضیحات مختصری از آن آورده شده است که امیدوارم برایتان مفید و کارساز باشد. قبل از شروع از شما انتظار میرود که گیت را درون سیستم خود نصب کرده باشید که برای این منظور میتوانید گیت را از این سایت دانلود نمایید. همچنین برای درک بهتر می توانید از آموزش رایگان آقای جادی میرمیرانی نیز بهره ببرید. این آموزش در سایت فرادرس قرار داده شده است.1- دستور Cloneبرای ایجاد یک کپی از پروژه درکامپیوتر خود می بایست از دستور clone به شکل زیر استفاده کنید:git clone &lt;URL&gt;
for example: git clone //sabri/Server_Git/AstroClock.git2- دستور Statusبرای آنکه وضعیت فایل های درون پروژه را مشاهده نمایید می­توانید از این دستور استفاده کنیدgit statusپس از آن سه حالت مختلف را به شما نشان می­دهد. حالت اول آن است که شما فایلی را درون پوشه پروژه اضافه نموده اید ولی هنوز آن را به پروژه Add نکرده اید که در این حالت لیستی از این فایل ها را با رنگ قرمز نشان می­دهد. حالت دوم آن ست که فایل ها را به پروژه Add کرده اید ولی هنوز commit نشده اند. که در این حالت لیستی از این فایل ها به رنگ سبز نمایش می­دهد و حالت سوم آن است که به شما پیام می­دهد فایلی برای commit وجود ندارد. در ادامه به مفهوم Add و Commit می­پردازیم.3- دستور Addپس از آنکه فایلی را اضافه نموده یا آن را تغییر داده اید نیاز است این تغییرات را به پروژه اضافه نمایید . برای این کار باید از دستور  Add استفاده نمایید.git add &lt;file name&gt;
for example: git add Readme.mdاگر تعدادی فایل را تغییر داده اید و می­خواهید همه­ی آن ها را با یکدیگر در یک دستور به پروژه اضافه نماید بدین صورت از دستور استفاده نمایید:git add -Aیاgit add .4- دستور Commitپس از اضافه نمودن فایل ها به پروژه نیاز است تا آن ها را با دستور commit و یک پیام که این تغییرات چه چیزی را نشان می دهد درون پروژه ثبت نمایید تا در صورت نیاز، مجددا به این نقطه بازگردید:git commit -m “&lt;your Descriptions&gt;”
for example: git commit -m “Add Readme File “5- دستور Logبه کمک این دستور می­توانید تمامی commit هایی که تا کنون ثبت شده است و محل قرارگیری هر شاخه و یا tag را مشاهده نمایید. برای این کار به شکل زیر عمل می­کنید:git log6- دستور Branchبه طور کلی زمانی که پروژه ایجاد می شود یک شاخه اصلی به نام شاخه master دارد و نسخه اصلی پروژه در این شاخه قرار می­گیرد. اگر شما در زمانی تصمیم بگیرید که تغییراتی را در پروژه اعمال کنید ولی با نسخه اصلی کار نداشته باشید یک شاخه جدید از master ایجاد می­کنید و به آن شاخه رفته و تغییرات خود را اعمال می­کنید. در صورتی که تغییرات شما نهایی شد ، به شاخه اصلی master بازگشته و master را با شاخه ایجاد شده ترکیب می­کنید تا این تغییرات درون شاخه اصلی نیز اعمال شود. این قابلیت این امکان را به شما می­دهد تا چندین نفر بر روی یک پروژه شروع به کار نمایند و شاخه های خود را ایجاد و نهایتا با شاخه اصلی ترکیب نمایند.دستور زیر تمامی شاخه های درون پروزه را نشان می­دهد:git branchدستور زیر یک شاخه ایجاد می­کند:git branch &lt;branchName&gt;
for example: git branch AddCalenderتوجه داشته باشید که با ایجاد شاخه شما به آن منتقل نمی­شوید بلکه باید به آن سوویچ کنید که در ادامه توضیحات آن آورده شده است.7- دستور Checkoutدرصورتی که بخواهید میان شاخه ها جابه­جا شوید از این دستور می­توانید کمک بگیرید:git checkout &lt;branchName&gt;
for example: git checkout AddCalenderتوجه داشته باشید که پس از این دستور در کنار اسم پروژه در محیط git به جای master نام شاخه ای که در آن حضور دارید را نمایش می­دهد.8- دستور Mergeدر زمانی که بخواهید دو شاخه را با هم ادغام کنید از این دستور استفاده می­کنید:git merge &lt;branchName&gt;
for example: git merge AddCalenderنکته: در زمانی که میخواهید شاخه ای را با شاخه master ادغام کنید ابتدا باید با استفاده از دستور checkout به شاخه master رفته و سپس اقدام به ادغام نمایید.9- دستور Tagبرای آنکه بتوانیم در هر بخشی که رسیدیم ورژن آن را مشخص کنیم تا در صورت نیاز به آن باز گردیم می­توانیم از دستور tag استفاده نماییم. دستور زیر تمامی tag های موجود را نشان می­دهد:git tagحال اگر بخواهیم نقطه فعلی را tag بزنیم از دستور زیر استفاده می­کنیم:git tag &lt;tagName&gt;
for example: git tag V2.110- دستور Pushتغییرات، commit ها و شاخه ها تا زمانی که آن ها را به سرور ارسال نکنید به صورت محلی باقی می­مانند و دیگران قادر به دیدن آن­ها نخواهند بود. لذا نیاز است تا پس از اعمال آن ها از دستور push استفاده نمایید.git push11- دستور Pullدستور pull دوگان دستور push  می باشد. و می­توانید آخرین تغییرات را از سرور دریافت نمایید.git pullنکته: محلی که پروژه درون سرور قرار دارد در log با نام origin master نشان داده می­شود.12- دستور Initاگر بخواهید پروژه ای را ایجاد نمایید. ابتدا به پوشه مورد نظر رفته و سپس دستور زیر را وارد می­کنید:git initدر این حالت یک پروژه به صورت محلی برای شما ایجاد می شود. اما اگر بخواهید که یک سرور برای پروژه خود در شبکه محلی ایجاد نمایید نیاز است ابتدا با دستور زیر به ساخت پروژه بپردازید و سپس پوشه ای که در آن قرار دارد را درون شبکه خود به اشتراک بگذارید. حال خود و دیگران با استفاده از دستور Clone میتوانید در پوشه مدنظر خود به پروژه دسترسی داشته باشید.git init &lt;ProjectName&gt;.git --bare
for example: git init AstroClock.git --bare13- دستور Diffبه کمک این دستور می­توانید تفاوت فایل موجود با آخرین Commit را مشاهده نمایید و خط به خط مقایسه کنید. برای این منظور از دستور زیر استفاده کنید:git diff &lt;FileName&gt;
for example: git diff calender.cpp</description>
                <category>میلاد صبری</category>
                <author>میلاد صبری</author>
                <pubDate>Tue, 06 Apr 2021 12:20:19 +0430</pubDate>
            </item>
            </channel>
</rss>