۱۵ فروردین
آردوینو فارسی
سلام بر دوستان همیشه همراه کانال آردوینو فارسی.
دوستان مطالب کانال رو دوست ندارید که لایک نمیکنید؟ یا میخواهید ادامه ندهم؟
توی این شرایط جنگی از قلب تهران دارم براتون مطلب آموزشی میگذارم، واقعا لایک نداره؟؟؟
#آردوینو_فارسی
@ArduinoFarsi_CC
دوستان مطالب کانال رو دوست ندارید که لایک نمیکنید؟ یا میخواهید ادامه ندهم؟
توی این شرایط جنگی از قلب تهران دارم براتون مطلب آموزشی میگذارم، واقعا لایک نداره؟؟؟
#آردوینو_فارسی
@ArduinoFarsi_CC
Please open Rubika to view this post
VIEW IN RUBIKA۱۵ فروردین
آردوینو فارسی
مدیریت منابع مشترک
وقتی چندین وظیفه به منابع مشترک (مانند حافظه، پرینتر، پورت سریال) دسترسی دارند یا نیاز دارند از وضعیت یکدیگر مطلع شوند تا کاری انجام دهند، باید باهم هماهنگ شوند. عدم هماهنگی منجر به "شرایط رقابت" (Race Condition) و داده های خراب می شود. مکانیزم های رایج هماهنگی عبارتند از:
• سمافور (Semaphore):
سمافور یک متغیر شمارنده صحیح است که توسط هسته مدیریت می شود. وظایف می توانند آن را "بگیرند" (Take) یا "پس دهند" (Give).
از سمافور برای کنترل دسترسی به مجموعه ای از منابع یکسان (مثلاً ۳ واحد حافظه) یا برای سیگنال دادن ساده بین وظایف استفاده می شود.
انواع سمافور:
1- سمافور باینری (Binary Semaphore):
سمافوری که فقط می تواند مقادیر ۰ یا ۱ داشته باشد. اغلب برای سیگنال دهی رویدادها استفاده می شود.
2- سمافور شمارشی (Counting Semaphore):
سمافوری که می تواند مقادیر غیرمنفی بیشتری داشته باشد و برای مدیریت دسترسی به چندین نمونه از یک منبع (مانند بافرها) مناسب است.
• موتکس (Mutex) با قفل انحصار متقابل (Mutual Exclusion):
نوع خاصی از سمافور باینری است که برای محافظت از بخش بحرانی (Critical Section) طراحی شده است. Mutex تضمین می کند که تنها یک وظیفه در هر لحظه می تواند به یک منبع یا بخش کد مشترک دسترسی داشته باشد.
تفاوت کلیدی Mutex با سمافور باینری ساده در داشتن مکانیزم "ارث بری اولویت" (Priority Inheritance) است. این مکانیزم از بروز مشکل "وارونگی اولویت" (Priority Inversion) جلوگیری می کند.
در Priority Inversion، یک وظیفه با اولویت متوسط می تواند به طور نامحدود اجرای یک وظیفه با اولویت بالا را مسدود کند اگر آن وظیفه با اولویت بالا در انتظار Mutex ای باشد که توسط یک وظیفه با اولویت پایین قفل شده است.
برای تبادل داده بین وظایف، RTOS، مکانیزم های امن و ساختاریافته ای ارائه می دهد:
• صف (Queue):
این امن ترین و رایج ترین روش است. یک صف یک ساختار داده FIFO (اولین ورودی، اولین خروجی) است. وظایف می توانند آیتم های داده (به صورت کپی) را در صف قرار دهند (Send) و از آن بخوانند (Receive).
اگر صف پر باشد، وظیفه ارسال کننده می تواند مسدود شود تا فضا آزاد شود.
به طور مشابه، اگر صف خالی باشد، وظیفه دریافت کننده می تواند مسدود شود تا داده ای وارد صف شود.
این مکانیزم های مسدودسازی خودکار، هماهنگی کامل بین تولیدکننده و مصرف کننده را فراهم می کنند.
• صندوق پستی (Mailbox):
در برخی RTOS ها، Mailbox شبیه یک صف با طول یک (یک سلول) است که معمولاً برای ارسال اشاره گر (Pointer) به داده ها، به جای خود داده، استفاده می شود. این کار از کپی برداری غیرضروری داده جلوگیری می کند اما مدیریت مالکیت حافظه را بر عهده برنامه نویس می گذارد.
•پرچم ها/گروه رویداد (Event Flags / Event Groups):
این مکانیزم به یک وظیفه اجازه می دهد منتظر ترکیبی از رویدادهای مختلف باشد که ممکن است توسط چندین وظیفه دیگر ایجاد شوند.
هر رویداد با یک بیت (پرچم) در یک کلمه (Word) نشان داده می شود. یک وظیقه می تواند منتظر باشد تا، برای مثال، پرچم ۱ و پرچم ۳ روشن شوند، یا پرچم ۲ یا پرچم ۴ سپس کار خود را شروع کند.
#RTOS
@ArduinoFarsi_CC
وقتی چندین وظیفه به منابع مشترک (مانند حافظه، پرینتر، پورت سریال) دسترسی دارند یا نیاز دارند از وضعیت یکدیگر مطلع شوند تا کاری انجام دهند، باید باهم هماهنگ شوند. عدم هماهنگی منجر به "شرایط رقابت" (Race Condition) و داده های خراب می شود. مکانیزم های رایج هماهنگی عبارتند از:
• سمافور (Semaphore):
سمافور یک متغیر شمارنده صحیح است که توسط هسته مدیریت می شود. وظایف می توانند آن را "بگیرند" (Take) یا "پس دهند" (Give).
از سمافور برای کنترل دسترسی به مجموعه ای از منابع یکسان (مثلاً ۳ واحد حافظه) یا برای سیگنال دادن ساده بین وظایف استفاده می شود.
انواع سمافور:
1- سمافور باینری (Binary Semaphore):
سمافوری که فقط می تواند مقادیر ۰ یا ۱ داشته باشد. اغلب برای سیگنال دهی رویدادها استفاده می شود.
2- سمافور شمارشی (Counting Semaphore):
سمافوری که می تواند مقادیر غیرمنفی بیشتری داشته باشد و برای مدیریت دسترسی به چندین نمونه از یک منبع (مانند بافرها) مناسب است.
• موتکس (Mutex) با قفل انحصار متقابل (Mutual Exclusion):
نوع خاصی از سمافور باینری است که برای محافظت از بخش بحرانی (Critical Section) طراحی شده است. Mutex تضمین می کند که تنها یک وظیفه در هر لحظه می تواند به یک منبع یا بخش کد مشترک دسترسی داشته باشد.
تفاوت کلیدی Mutex با سمافور باینری ساده در داشتن مکانیزم "ارث بری اولویت" (Priority Inheritance) است. این مکانیزم از بروز مشکل "وارونگی اولویت" (Priority Inversion) جلوگیری می کند.
در Priority Inversion، یک وظیفه با اولویت متوسط می تواند به طور نامحدود اجرای یک وظیفه با اولویت بالا را مسدود کند اگر آن وظیفه با اولویت بالا در انتظار Mutex ای باشد که توسط یک وظیفه با اولویت پایین قفل شده است.
برای تبادل داده بین وظایف، RTOS، مکانیزم های امن و ساختاریافته ای ارائه می دهد:
• صف (Queue):
این امن ترین و رایج ترین روش است. یک صف یک ساختار داده FIFO (اولین ورودی، اولین خروجی) است. وظایف می توانند آیتم های داده (به صورت کپی) را در صف قرار دهند (Send) و از آن بخوانند (Receive).
اگر صف پر باشد، وظیفه ارسال کننده می تواند مسدود شود تا فضا آزاد شود.
به طور مشابه، اگر صف خالی باشد، وظیفه دریافت کننده می تواند مسدود شود تا داده ای وارد صف شود.
این مکانیزم های مسدودسازی خودکار، هماهنگی کامل بین تولیدکننده و مصرف کننده را فراهم می کنند.
• صندوق پستی (Mailbox):
در برخی RTOS ها، Mailbox شبیه یک صف با طول یک (یک سلول) است که معمولاً برای ارسال اشاره گر (Pointer) به داده ها، به جای خود داده، استفاده می شود. این کار از کپی برداری غیرضروری داده جلوگیری می کند اما مدیریت مالکیت حافظه را بر عهده برنامه نویس می گذارد.
•پرچم ها/گروه رویداد (Event Flags / Event Groups):
این مکانیزم به یک وظیفه اجازه می دهد منتظر ترکیبی از رویدادهای مختلف باشد که ممکن است توسط چندین وظیفه دیگر ایجاد شوند.
هر رویداد با یک بیت (پرچم) در یک کلمه (Word) نشان داده می شود. یک وظیقه می تواند منتظر باشد تا، برای مثال، پرچم ۱ و پرچم ۳ روشن شوند، یا پرچم ۲ یا پرچم ۴ سپس کار خود را شروع کند.
#RTOS
@ArduinoFarsi_CC
Please open Rubika to view this post
VIEW IN RUBIKA۱۵ فروردین
آردوینو فارسی
مدیریت زمان
برای مدیریت زمان، RTOS توابعی در سطح وظیفه و سیستم ارائه می دهد:
• تأخیر (Delay/Sleep):
توابعی مانند vTaskDelay(pdMS_TO_TICKS(100) باعث می شوند وظیفه فعلی برای مدت مشخصی (مثلاً ۱۰۰ میلی ثانیه) به حالت Blocked برود و پردازنده را برای اجرای سایر وظایف آماده، آزاد کند.
این با حلقه های انتظار بیهوده (Busy-wait loops) که منابع CPU را هدر می دهند، کاملاً متفاوت است.
• تایمرها (Timers):
خود RTOS ها معمولاً امکان ایجاد تایمرهای نرم افزاری را فراهم می کنند.
این تایمرها می توانند یک باره (One-shot) یا تناوبی (Periodic) باشند.
پس از اتمام زمان تایمر، می توان یک تابع فراخوانی (Callback Function) مشخص شده را اجرا کرد یا یک وظیفه (Task) را فعال نمود.
این تایمرها مستقل از وظایف هستند و توسط هسته RTOS مدیریت می شوند.
این مفاهیم، که تا اینجا بیان شد، پایه های اصلی و اساسی هر RTOS هستند و درک عمیق آن ها برای طراحی سیستم های بلادرنگ قابل اطمینان و کارآمد ضروری است.
در بخش های بعدی، به پیاده سازی عملی این مفاهیم در محیط FreeRTOS بر روی میکروکنترلر ESP32 خواهیم پرداخت.
#RTOS
@ArduinoFarsi_CC
برای مدیریت زمان، RTOS توابعی در سطح وظیفه و سیستم ارائه می دهد:
• تأخیر (Delay/Sleep):
توابعی مانند vTaskDelay(pdMS_TO_TICKS(100) باعث می شوند وظیفه فعلی برای مدت مشخصی (مثلاً ۱۰۰ میلی ثانیه) به حالت Blocked برود و پردازنده را برای اجرای سایر وظایف آماده، آزاد کند.
این با حلقه های انتظار بیهوده (Busy-wait loops) که منابع CPU را هدر می دهند، کاملاً متفاوت است.
• تایمرها (Timers):
خود RTOS ها معمولاً امکان ایجاد تایمرهای نرم افزاری را فراهم می کنند.
این تایمرها می توانند یک باره (One-shot) یا تناوبی (Periodic) باشند.
پس از اتمام زمان تایمر، می توان یک تابع فراخوانی (Callback Function) مشخص شده را اجرا کرد یا یک وظیفه (Task) را فعال نمود.
این تایمرها مستقل از وظایف هستند و توسط هسته RTOS مدیریت می شوند.
این مفاهیم، که تا اینجا بیان شد، پایه های اصلی و اساسی هر RTOS هستند و درک عمیق آن ها برای طراحی سیستم های بلادرنگ قابل اطمینان و کارآمد ضروری است.
در بخش های بعدی، به پیاده سازی عملی این مفاهیم در محیط FreeRTOS بر روی میکروکنترلر ESP32 خواهیم پرداخت.
#RTOS
@ArduinoFarsi_CC
Please open Rubika to view this post
VIEW IN RUBIKA۱۶ فروردین
آردوینو فارسی
اصلاحیه مهم برای پروژه ساخت سیگنال ژنراتور با تایمر ۱ آردوینو UNO در حالت Fast PWM
در نسخهی قبلی پروژه، انتخاب Prescaler بهصورت دستی انجام شده بود. پس از تست با اسیلوسکوپ مشخص شد که در بازهی فرکانسی ۵٫۵ تا ۱۰ کیلوهرتز مقدار فرکانس خروجی کمی بیشتر از مقدار نمایشدادهشده روی LCD است.
این اختلاف بهدلیل انتخاب غیر بهینه Prescaler رخ میداد.
تابع انتخاب Prescaler بازنویسی و اصلاح شد تا مقدار TOP بهصورت دقیق و کاملاً محاسباتی تعیین شود.
با نسخهٔ جدید، انتخاب Prescaler کاملاً خودکار است و فرکانس در تمام بازهها، بدون خطا و با دقت بسیار بالا تولید میشود.
نسخهٔ اصلاحشدهٔ تابع را در فایل جدید پروژه قرار دادهام.
اگر قبلاً نسخه قدیمی را دریافت کردهاید، لطفاً این اصلاحیه را اعمال کنید.
#آردوینو_فارسی
#SignalGenerator
@ArduinoFarsi_CC
در نسخهی قبلی پروژه، انتخاب Prescaler بهصورت دستی انجام شده بود. پس از تست با اسیلوسکوپ مشخص شد که در بازهی فرکانسی ۵٫۵ تا ۱۰ کیلوهرتز مقدار فرکانس خروجی کمی بیشتر از مقدار نمایشدادهشده روی LCD است.
این اختلاف بهدلیل انتخاب غیر بهینه Prescaler رخ میداد.
تابع انتخاب Prescaler بازنویسی و اصلاح شد تا مقدار TOP بهصورت دقیق و کاملاً محاسباتی تعیین شود.
با نسخهٔ جدید، انتخاب Prescaler کاملاً خودکار است و فرکانس در تمام بازهها، بدون خطا و با دقت بسیار بالا تولید میشود.
نسخهٔ اصلاحشدهٔ تابع را در فایل جدید پروژه قرار دادهام.
اگر قبلاً نسخه قدیمی را دریافت کردهاید، لطفاً این اصلاحیه را اعمال کنید.
#آردوینو_فارسی
#SignalGenerator
@ArduinoFarsi_CC
Please open Rubika to view this post
VIEW IN RUBIKA۱۶ فروردین
آردوینو فارسی
دوستان عزیز، ادامه بحث RTOS از فردا شروع میشه
با موضوع FreeRTOS در برد ESP32 و ساخت پروژه های عملی با آن، برای درک بیشتر مفاهیمی که تا الان در مورد RTOS بیان شد.
لطفا مطالب بیان شده را یکبار دیگه مرور کنید و سوالات خودتون رو در مورد قسمت هایی که متوجه نمی شوید در پی وی بپرسید. تا قبل از اینکه وارد بحث اصلی بشیم، توضیح بدهم. در غیر اینصورت، یاد نمی گیرید.
#آردوینو_فارسی
#RTOS
@ArduinoFarsi_CC
با موضوع FreeRTOS در برد ESP32 و ساخت پروژه های عملی با آن، برای درک بیشتر مفاهیمی که تا الان در مورد RTOS بیان شد.
لطفا مطالب بیان شده را یکبار دیگه مرور کنید و سوالات خودتون رو در مورد قسمت هایی که متوجه نمی شوید در پی وی بپرسید. تا قبل از اینکه وارد بحث اصلی بشیم، توضیح بدهم. در غیر اینصورت، یاد نمی گیرید.
#آردوینو_فارسی
#RTOS
@ArduinoFarsi_CC
Please open Rubika to view this post
VIEW IN RUBIKA۳۱ فروردین
آردوینو فارسی
Please open Rubika to view this post
VIEW IN RUBIKA۳۱ فروردین
آردوینو فارسی
Please open Rubika to view this post
VIEW IN RUBIKA۱ اردیبهشت
۲ اردیبهشت
۲ اردیبهشت
آردوینو فارسی
دوستان، انرژی هاتون افتاده ها...
نه لایک، نه ادد کردن دوستان دیگه به کانال، نه چیزی...
ببینم میتونید تا قبل از آموزش بعدی، کانال رو 200 نفری کنید یا نه؟
من خودم نمیخواهم ادد کنم. یک کاری رو هم شما انجام بدید.
نه لایک، نه ادد کردن دوستان دیگه به کانال، نه چیزی...
ببینم میتونید تا قبل از آموزش بعدی، کانال رو 200 نفری کنید یا نه؟
من خودم نمیخواهم ادد کنم. یک کاری رو هم شما انجام بدید.
Please open Rubika to view this post
VIEW IN RUBIKA۲ اردیبهشت
آردوینو فارسی
حال خوب دریاچه ارومیه؛ حجم آب به ۲ میلیارد و ۸۹۰ میلیون مترمکعب رسید، بیشترین میزان آب در ۵ سال گذشته
#آردوینو_فارس
#آردوینو_فارس
Please open Rubika to view this post
VIEW IN RUBIKA۴ اردیبهشت
آردوینو فارسی
شبکه اجتماعی که ورود انسان ها به آن ممنوع است
یک شبکه اجتماعی علمی جدید با نام Agent4Science راهاندازی شده که در آن تنها عاملهای مبتنی بر هوش مصنوعی میتوانند مقالات پژوهشی را منتشر کرده و درباره آنها به بحث بپردازند.
#آردوینو_فارس
یک شبکه اجتماعی علمی جدید با نام Agent4Science راهاندازی شده که در آن تنها عاملهای مبتنی بر هوش مصنوعی میتوانند مقالات پژوهشی را منتشر کرده و درباره آنها به بحث بپردازند.
#آردوینو_فارس
Please open Rubika to view this post
VIEW IN RUBIKA۱۸ اردیبهشت
۲۰ اردیبهشت
۲۲ اردیبهشت
آردوینو فارسی
افزایش بیسابقه قیمت قطعات الکترونیکی به دلیل تقاضای هوش مصنوعی، کمبود جهانی، نرخ ارز و محدودیتهای واردات
speech_balloonحمیدرضا واشقانی فراهانی، رئیس هیات مدیره انجمن واردکنندگان کالا و تجهیزات رایانهای:
🗣از سال گذشته، رشد هوش مصنوعی و تغییر جهت تولید کارخانجات به سمت این حوزه، کمبود و افزایش ۳ تا ۴ برابری قیمت جهانی قطعاتی مثل حافظه و میکروچیپ را رقم زد که همراه با گرانی ارز، تحریمها و مشکلات تخصیص در ایران، قیمت کالاهای فناوری اطلاعات (از لپتاپ تا تلفن همراه) را بین ۳۰ تا ۵۰ درصد و برخی اقلام را تا چند برابر افزایش داده است.
#آردوینو_فارسی
speech_balloonحمیدرضا واشقانی فراهانی، رئیس هیات مدیره انجمن واردکنندگان کالا و تجهیزات رایانهای:
🗣از سال گذشته، رشد هوش مصنوعی و تغییر جهت تولید کارخانجات به سمت این حوزه، کمبود و افزایش ۳ تا ۴ برابری قیمت جهانی قطعاتی مثل حافظه و میکروچیپ را رقم زد که همراه با گرانی ارز، تحریمها و مشکلات تخصیص در ایران، قیمت کالاهای فناوری اطلاعات (از لپتاپ تا تلفن همراه) را بین ۳۰ تا ۵۰ درصد و برخی اقلام را تا چند برابر افزایش داده است.
#آردوینو_فارسی
Please open Rubika to view this post
VIEW IN RUBIKA۲۶ اردیبهشت
آردوینو فارسی
سلام دوستان عزیز
کسی کتابخانه زیر رو داره برام بفرسته؟
AsyncDNSServer
ممنون
کسی کتابخانه زیر رو داره برام بفرسته؟
AsyncDNSServer
ممنون
Please open Rubika to view this post
VIEW IN RUBIKA۲۶ اردیبهشت
آردوینو فارسی
خدا رو شکر تو ایران، دانلود فایل از گیت هاب هم پولی شد باید اشتراک بخریم:
https://avasam.ir/post/get-files-by-github
https://avasam.ir/post/get-files-by-github
Please open Rubika to view this post
VIEW IN RUBIKA۱ خرداد
آردوینو فارسی
با سلام و احترام خدمت دوستان عزیز.
دوستان بدلیل انجام یک پروژه حساس، بین آموزش ها قدیری تاخیر افتاد.
انشاالله از سه چهار روز دیگه آموزش ها رو ادامه میدیم.
دوستان بدلیل انجام یک پروژه حساس، بین آموزش ها قدیری تاخیر افتاد.
انشاالله از سه چهار روز دیگه آموزش ها رو ادامه میدیم.
Please open Rubika to view this post
VIEW IN RUBIKA