دوره جامع آموزش برنامه نویسی میکروکنترلر ARM

پس از مشاهده این دوره آموزشی به زبان برنامه نویسی C و امبدد C برای برنامه نویسی میکروکنترلر مسلط میشید، مطالب کاربردی اسمبلی ARM رو یادمیگیرد. آموزش در قالب بررسی مثال ها و نمونه کد ها روی میکروکنترلر STM32F103 انجام شده، و این دوره آموزشی همزمان برای شروع یادگیری میکروکنترلرهای STM32 و یادگیری پریفرال های پایه هم طراحی شده.

سطح دوره از صفر شروع شده، و تمامی دانش برنامه نویسی مورد نیاز برای برنامه نویسی میکروکنترلر های ARM در این دوره تدریس میشه، این دوره برای کسانی که میخوان برنامه نویسی میکروکنترلر STM32 رو شروع کنند و یا مهارت برنامه نویسی خودشون رو تکمیل کنند مناسب هست.

این دوره آموزشی برای حل مشکلات مشخصی طراحی شده:

 

  • در زمان برنامه نویسی میکروکنترلر تسلط کافی ندارید و احساس میکنید بخش های زیادی از کد براتون ناشناخته است.
  • آموزش هایی که تا الان دیدید نتونسته اونجوری که میخواستید، مطلب رو بهتون یاد بده.
  • حجم زیاد مطالب شما رو سردرگم کرده و دنبال یک دوره آموزشی هستید که همه چیز رو بگه.
  • در شروع کار هستید و دوست دارید سریع یادبگیرید.
برنامه نویسی میکروکنترلر کار پیچیده ایه و وقتی اول راهی پیشرفت سخت تره چون نمیدونی چی به چیه. با این دوره آموزشی مطالب رو کامل و سریع یادمیگیری.
راه حل ها

برنامه نویس میکروکنترلر ARM چیکار میکنه؟

 
  • با زبان برنامه نویسی C و با استفاده از کتابخونه CMSIS یک برنامه در نرم افزار STM32CubeIDE مینویسه. 
  • با کامپایلر GCC برنامه رو به زبان ماشین ترجمه میکنه و برنامه در فلش میکروکنترلر STM32 نوشته میشه.
  • در محیط دیباگ اجرای دستورالعمل های اسمبلی ARM رو توسط سی پی یو cortex-m3 میبینه و کد رو دیباگ میکنه.
در دوره جامع برنامه نویسی میکروکنترلر ARM ، در جریان کد نویسی روی میکروکنترلر STM32F103  به این مباحث مسلط میشید.
 

چجوری بدون دوره آموزشی برنامه نویسی میکروکنترلر رو یادبگیریم؟

 

  1. رفرنس منوال ها رو می خونی که نحوه ی استفاده از ابزار رو یادبگیری.
  2. کاربردهای ابزار رو برای حل مسئله ها با تمرین یادمیگیری.

دوره جامع آموزش برنامه نویسی میکروکنترلر ARM همین فرایند رو برات لذت بخش تر و سریعتر میکنه. در این دوره همزمان با یادگیری کاربردهای ابزارها در عمل، در قالب بررسی مثال ها و case study ها، خوندن منابع اصلی رو هم آموزش میبینید. 

 

ویژگی های دوره جامع آموزش برنامه نویسی میکروکنترلر ARM

 

مثال محور: این دوره مثال محور یا case study محور هست. با یک مثال براتون معنیش رو میگم: در جلسه ی یونیون 5 تا از کاربرد های یونیون بررسی میشه به صورت طرح مسئله و سپس ارائه راه حل با یونیون. هر کدوم از این 5 کاربرد یا مثال یا case study ، یک پروژه کامل نیستند بلکه بخش های کوچک پروژه ها هستند. در این دوره با مثال یادمیگیرید با هر ابزار چه مسئله هایی رو میتونید حل کنید.

 

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

این دوره آموزشی به شما رفرنس منوال خوندن هم یاد میده. مثلا اگر من به شما یاد بدم چجوری باید رفرنس منوال معماری CPU cortex-m3 رو بخونید، خودتون میتونید رفرنس منوال های معماری CPU های دیگه رو هم بخونید.

نظر دانشجویان

آرمان رضایی

هر چقدر میرم جلو خیلی جذاب تر میشه. خیلی ریز بهریز و با جزییات درس دادید مخصوصا زبان c رو حتی از استاد دانشگاه هم بهتر تدریس میکنید و واقعاً فن بیان قوی دارین.

علیرضا سلطانی

من 90 درصد آموزشای STM32 رو خریدم، هیچ کدومشون مثل آموزش شما نبود. جلسه آموزش بیت فیلد رو امروز دیدم تا حالا آموزش به این با کیفیتی ندیده بودم خیلی عالی بود.

شکل دوره

دوره آموزشی بصورت فایل های ویدئویی ضبط شده صفحه ی کامپیوتر هست با صدای مدرس. در کل دوره تدریس همراه با نوشتن و دیباگ کد های نمونه روی میکروکنترلر STM32F103C8  در نرم افزار STM32CubeIDE انجام میشه. برای اینکه همزمان با مشاهده دوره خودتون کدنویسی کنید به قطعات زیر نیازدازید:

  • برد بلو پیل دارای میکروکنترلر STM32F103C8
  • پروگرمر ST-Link v2
ویدئوهای نمونه در یوتوب

قبل از اقدام برای خرید دوره جامع برنامه نویسی میکروکنترلر ARM ویدئوهای نمونه دوره آموزشی رو در یوتوب ببینید. جلسه اول از آموزش زبان برنامه نویسی C  و جلسه اول آموزش زبان اسمبلی ARM رو میتونید ببینید و با نحوه ی تدریس آشنا بشید.

قصد خرید دوره های آموزشی رو دارید؟

1- دریافت اطلاعات پرداخت با پیامک به شماره 09101710738 .

2-  پس از واریز وجه، لایسنس دوره (یک کد) در تلگرام برای شما ارسال میشه.

3- لایسنس رو در اسپات پلیر وارد کنید و دوره قابل مشاهده است.

4- در زمان مشاهده دوره برای رفع اشکال در تلگرام پیام بدید.

خلاصه ی سرفصل ها

دوره آموزشی بصورت فایل های ویدئویی ضبط شده صفحه ی کامپیوتر هست با صدای مدرس. در کل دوره تدریس همراه با نوشتن و دیباگ کد های نمونه روی میکروکنترلر STM32F103C8  انجام میشه. تو این دوره همه چی از سطح صفر تدریس شده و پیشنیاز نداره. 

 

فصل اول : زبان سی | 6 ساعت

آموزش مباحث عمومی زبان برنامه نویسی C ، همراه با کد نویسی و دیباگ کد ها روی STM32F103 ، همزمان هم نکات استفاده از STM32CubeIDE و کلا هر چی دکمه در این نرم افزار وجود داره رو یادمیگیرید.

فصل دوم : کامپایلر جی سی سی | 4 ساعت

در هنگام برنامه نویسی با زبان C میتونیم از امکاناتی استفاده کنیم که جز زبان C نیست و کامپایلر این امکانات رو برامون فراهم کرده مثل متغیر های fixed point . همچنین در هنگام کامپایل کد تنظیماتی مربوط به کامپایلر  GCC وجود داره که باید بدونید. در این فصل مباحث مربوط به کامپایلر GCC رو آموزش میبینید.

فصل سوم : CMSIS و دسترسی به حافظه در زبان سی | 8 ساعت

در این فصل بصورت تخصصی نحوه ی دسترسی به حافظه در زبان سی رو آموزش میبیند و نکات کاربردی زیادی که در مورد استراکچر و بیت فیلد و یونیون باید بدونید. لایه ی نرم افزاری CMSIS هم در این فصل آموزش داده میشه، طوری که خودتون بتونید این کتابخونه رو بنویسید.

فصل چهارم : پریپراسسور | 3 ساعت

هر چیزی مربوط به پریپراسسور در زبان برنامه نویسی C و ماکرو ها که باید بلد باشید در این فصل جمع شده.

فصل پنجم : آرایه ها و اگوریتم ها | 5 ساعت

بخش اول این فصل مربوط به رشته ها و نمایش اونها و printf در دیباگ هست و تمام نکات استفاده از تابع printf آمورش داده شده.

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

فصل ششم: پریفرال های پایه | 3 ساعت

برنامه نویسی پریفرال های پایه میکروکنترلر STM32F103 بصورت رجیستری و دسترسی مستقیم به بیت با بیت فیلد.

فصل هفتم : فلش ، رم و لینکراسکریپت | 4 ساعت

  • نوشتن در فلش با رجیسترها 
  • بوت لودر STM32 
  • داینامیک مموری آلوکیشن 
  • لینکر اسکریپت و زبان لینکر کامند

فصل هشتم : اسمبلی آرم | 4 ساعت

  • inline اسمبلی 
  • منوال architecture arm v7 
  • اینستراکشن، انکودینگ، سودو کد و سودو فانکشن 
  • فلگ ها و رجیستر APSR و دستورات شرطی 
  • دستورات MOV, MVN, ADD, CMP همراه با شیفت ها 
  • اینستراکشن های Load و Store
  •  extended asm 
  • اینستراکشن های branch و push ، pop
سرفصل ها

زبان برنامه نویسی C و نرم افزار STM32CubeIDE

 

منابعی که در این فصل بررسی میشن:

  • STM32F103x Datasheet
  • The C Programming Language by Kernighan & Ritchie
  • The GNU C Reference Manual
  • STM32CubeIDE user guide_UM2609

 

Datasheet میکروکنترلر stm32f103

  • نقشه ی حافظه ( ساختار حافظه ، جایگاه flash ، sram ، stm32 peripheral register ، cortex-m3 peripheral ، system memory )
  • پریفرال ها و رجیسترهای STM32
  • باسها
  • cpu ، instruction set ، رجیسترهای cpu
  • بررسی block diagram و نحوه ی عملکرد میکروکنترلر با مثال ، add ldr str instructions
  • خوانواده میکروکنترلر : F103 , performance line , low density , medium density , high density
  • stm32 Ordering information scheme
  • پین ها و شماتیک blue pill : تغذیه ، ریست ، کلاک ، بوت ، پورتها ، پروگرم و دیباگ
  • Boot mode STM32F103
  • جدول 5 : مشخصات پین ها
  • Absolute maximum rating جدول 6 و 7
  • sink & source
  • injected and leakage current
  • Operating condition جدول 9
  • I/O port characteristic ، بررسی حد پایین و بالای ولتاژ برای پین های ورودی و خروجی
  • CMOS & TTL
  • Output driving current ، بررسی جریان پین خروجی در ولتاژ های متفاوت ، جدول 36
  • Relaxed Vol/Voh

زبان برنامه نویسی C در برنامه نویسی STM32

  • کامنت های یک خطی و چند خطی
  • تعریف متغیر
  • انواع متغیر اولیه: char , short , int
  • ساخت نوع جدید متغیر با typedef
  • fixed width data type
  • Fixed width integer data types , 8 , 16 , 32 ,64 bits
  • Float & double
  • Declaration & declaration list & Variable initialization
  • Literals and constants
  • نوشتن integer literal ها در مبنای 8 و 16 و10 ، نوشتن float literal ها
  • Literal postfix : U , UL , ULL , LL , F
  • const qualifier
  • متغیر های local & global و تفاوت initialization
  • Expression ها ، constant & variable
  • expression های حاوی operator ها و operand ها
  • arithmetic operator : + , – , * , / , % : نوع و مقدار arithmetic expression
  • Implicit type conversion : بررسی مثال
  • Wider types
  • assignment : += , *= , /= , -= , %= , =  : نوع و مقدار assignment expression
  • عملگر assignment و integer های با عرض مختلف
  • R value & L value
  • ++ و ، تاثیر ++ و قبل و بعد از expression
  • relational : == , != , < , <= , > , >= : نوع و مقدار relational expression
  • عملگر تغییر نوع و explicit type conversion
  • logical : ! , && , ||  : نوع و مقدار logical expression
  • conditional ؟: ، نوع و مقدار conditional expression
  • اولویت عملگر ها : precedence and associativity
  • شرط if , if – else , if – else if – else
  • Compound statement
  • while
  • حلقه ی for : initialization , condition , increment
  • مقایسه while & for
  • فرار از حلقه : return
  • مکانیزم فرار از حلقه :break
  • فرار از حلقه : goto
  • حلقه do while
  • Switch case
  • مقایسه if و switch و موارد استفاده هر کدام
  • continue در حلقه for و while
  • لیبل گذاری و goto
  • کاربرد های goto و محدودیت ها
  • معرفی پوینتر ، تعریف پوینتر
  • Reference operator & , dereference operator
  • پوینتر به پوینتر
  • Dangling pointer , wild pointer
  • void پوینتر و محدودیت ها
  • NULL pointer و کاربرد
  • Call by value , call by reference
  • نوع void
  • معرفی تابع، return type و بررسی فراخوانی تابع توسط cpu
  • بررسی متغیر های داخل تابع و آرگومان های ورودی و مکان در stack
  • پروتوتایپ تابع و implicit declaration
  • نوشتن تابع delay و nested loops
  • الگوریتم های iterative و recursive با بررسی مثال فاکتوریل
  • بررسی stack و الگوریتم های recursive

نرم افزار STM32CubeIDE

  • معرفی و ساخت Workspace
  • لغو دانلود های غیر ضروری
  • stm32 Target selection
  • ساخت پروژه bare metal برای STM32
  • تغییر فونت و اندازه
  • دسترسی به pdf ها و ویدئو ها در target selection و information center STM32
  • Compile , download and debug , elf file, edit launch config
  • دیباگ خط به خط کد : step into , step over , step return
  • نمای console
  • نمای problem
  • پرسپکتیو : show text , close , reset , open
  • ساخت perspective : perspective save as
  • شخصی سازی perspective : customize perspective
  • تنظیم toolbars , menu & shortcuts در perspective ها
  • Debug tools: resume , terminate , suspend
  • مدیریت toolbars و customize perspective و hide/show toolbar
  • Show view در perspective های مختلف و دسترسی به تمام view ها
  • Whitespace ها و نمایش whitespace
  • Clone کردن پنجره
  • Toggle split editor, horizontal & vertical
  • Full screen , maximize and minimize active view
  • منوی help : st-link upgrade
  • call hierarchy : show callees , show callers
  • type hierarchy
  • task
  • minimap
  • outline
  • properties
  • template
  • bookmark
  • Annotation ها : error, warning, bookmark, task, search, breakpoint
  • جابجایی بین annotation ها
  • Search and replace
  • نماهای expression & live expression & variable و تفاوت ها
  • Number format in expression & live expression & variable
  • expression : detail view
  • expression : layout , vertical , horizontal , automatic , expression view only
  • expression : show columns , select columns , address column
  • expression : add expression group
  • expression : number format for each expression , restore to preferences
  • expression : find expression
  • variable : select columns ، location  و تفاوت با address
  • memory : مشاهده متغیرها در حافظه و rendering
  • جابجایی نماها در perspective : detach , open new window
  • نمای registers : مشاهده ی رجیستر های cpu در هنگام دیباگ STM32
  • Break point ها و toggle break point و skip all break point
  • Line break : توقف کد در بخش دیباگ بدلیل رسیدن به یک خط از پیش تایین شده.
  • Method break point : توقف کد در بخش دیباگ بدلیل رسیدن به تابع
  • نمای break point و غیر فعال کردن break point ها
  • اضافه کردن watch point با استفاده از نمای expression
  • متوقف کردن debug در نتیجه خواندن یا نوشتن در یک آدرس
  • Add dynamic printf : پرینت کردن مقدار متغیر در صورت عبور cpu از یک لاین مشخص کد.

  

کامپایلر GCC

منابعی که در این فصل بررسی میشن:

  • Using the GNU Compiler Collection

ورژن های زبان برنامه نویسی  C ، کامپایلر GCC ، فایل ها و کلاس های ذخیره سازی

  • معرفی نرم افزار keil و ساخت پروژه خالی در keil
  • ورژن های c ، c80 ، c90 ، c99 ، c11 و c17
  • محدودویت های ورژن  c89 در مورد for
  • ورژندر keil
  • تغییر ورژندر cubeide
  • معرفی کامپایلر ARMCC در keil
  • کامپایلر GCC در STM32CubeIDE
  • معرفی GNU project
  • فایلهای .c و .h و اضافه کردن به پروژه
  • ساخت کتابخانه
  • معرفی مکان فایل های .c و .h به نرم افزار STM32CubeIDE
  • بررسی نحوه ی عملکرد و اجزای کامپایلر gcc و وظیفه ی هر بخش
  • preprocessor , compiler , assembler , linker , locater
  • فایل های .c , .h , .s , .i , .o , .a  در مراحل مختلف کامپایل
  • section  ها و ساختار فایل assembly
  • .text , .rodata , .data , .bss
  • symbol table , import table , export table با مثال
  • فرایند relocation در مرحله linker
  • بررسی symbol resolution در مرحله linker
  • مرحله locater و فایل linker script
  • section های ram
  • Section های flash
  • بررسی تمام storage class ها با مثال
  • کلاس ذخیره سازی static برای متغیر های local
  • static برای متغیر های global
  • کلاس ذخیره سازی static برای متغیر های داخل header file
  • static برای توابع محدود به فایل
  • کلاس ذخیره سازی extern برای متغیر global
  • auto برای متغیر local
  • کلاس ذخیره سازی register برای متغیر local

اکستنشن های GCC

  • اعداد منفی در مبنای 2 : روش بیت علامت
  • روش one’s compliment
  • two’s compliment
  • مقایسه و بررسی مزایا و معایب روش های مختلف نمایش اعداد منفی در مبنای 2
  • مروری بر نمایش integer  ها در مبنای 2
  • نمایش اعداد اعشاری در مبنای 2
  • تبدیل مبنا با اعشار
  • استاندارد ieee 745 و floating point
  • معرفی اعداد Fixed point با مکان ممیز ثابت
  • نوع های متغیر _Fract  و _Accum و تمام مشتقات
  • طراحی چند آزمایش در مورد ویژگی های متغیر های از نوع _Accum
  • اعداد fixed point در بخش debug
  • اجزای متغیر های fiexed point : integer part , fractional part , sign bit
  • مقایسه متغیر های fixed point  و floating point
  • منوال Using the GNU Compiler Collection
  • پسوند ها برای اعداد fixed point
  • اعمال ریاضی روی fixed point
  • معرفی extension ها و بررسی Extensions to the C Language Family در using the GCC
  • بررسی locally declared labels : لیبل های داخل بلوک کد
  • labels as values : مقدار label
  • بررسی nested functions : تابع داخل تابع ، توابع local
  • typeof
  • معرفی GCC Command Options
  • Attributes
  • roject properties و تنظیمات کامپایلر در stm32cubeide
  • آپشن های نوشته شده در MCU GCC Compiler  از داکیومنت Using the GCC
  • ARM options
  • آپشن -mcpu=name
  • option  -mtune=name  
  • آپشن های کنترل استاندارد C
  • -std=gnu11 ، تنظیم آپشن از تب general
  • آپشن های  debug , -g0 , -g3 ، تنظیم آپشن از تب  debugging
  • کنترل preprocessor
  • آپشن -D ، تنظیم آپشن از تب  preprocessor
  • معرفی مکان فایل های header از بخش include path
  • مکان فایل های header از بخش path and symbols
  • -I برای معرفی مکان فایل های header به کامپایلر
  • آپشن های کنترل optimization
  • تفاوت آپشن و فلگ
  • آپشن -O0 دسترسی از تب optimization
  • فلگ های -ffunction-sections -fdata-sections
  • آپشن -Wall درخواست warning
  • -specs و معرفی کتابخانه های استاندارد به کامپایلر
  • آپشن -mfloat-abi و پیاده سازی floating point arithmetic با نرم افرار
  • -mthumb و -marm
  • آپشن های کنترل خروجی GCC
  • -c ، عدم اجرای linker
  • آپشن -S ، توقف قبل از assembler
  • -E ، فقط preprocessor اجرا شود
  • آپشن -x language assembler-with-cpp
  • مشخص کردن فایل های ورودی از تب preprocessor

  

دسترسی به حافظه در زبان برنامه نویسی C

منابعی که در این فصل بررسی میشن:

  • STM32F10 Reference manual_RM0008
  • Using the GNU Compiler Collection

رفرنس منوال و پریفرال GPIO میکروکنترلر STM32F103

  • لیست کلمات اختصاری ویژگی بیت: rw, r, w, rc_w1, rc_w0, rc_r, rs, r_w, t
  • Memory and bus architecture 
  • بررسی بلوک دیاگرام و نحوه ی عملکرد پریفرال GPIO میکروکنترلر STM32F103
  • دیود های محافظت
  • Pull up & pull down
  • Push pull & open drain
  • بیت های MODE و CNF و تنظیمات پین در حالت های مختلف
  • رجیستر های IDR , ORD , BSRR , BRR
  • مکانیزم قفل کردن تنظیمات GPIO و رجیستر LCKK
  • وصل کردن کلاک پریفرال ها ، پریفرال RCC و رجیستر RCC_APB2ENR
  • محاسبه آدرس رجیستر های و تنظیمات مورد نیاز برای ال ای دی چشمکزن

ساخت پوینتر در زبان برنامه نویسی C

  • نمای SFRs و تغییر مقدار رجیسترها
  • Led چشمک بدون کد نویسی با استفاده از قابلیت های debug در cubeide
  • ساخت پوینتر برای هر رجیستر با کست کردن آدرس
  • Led چشمک زن بدون bitwise operator
  • Bitwise operator : and , or , left shift , right shift , xor , not
  • ساخت ماسک بیت با left shift
  • یک کردن بیت با bitwise or
  • صفر کردن بیت با bitwise and  و  not
  • تاگل کردن بیت با bitwise xor
  • خواندن بیت با bitwise and و right shift
  • led چشمک زن با bitwise operator
  • استفاده از پوینتر به عنوان آرایه
  • ساخت ماشین حساب بیتی در labview

استراکچر و CMSIS استاندارد

  • struct تعریف مقداردهی اولیه ، دسترسی به اعضا struct tag , typedef struct
  • استراکچر در حافظه
  • پوینتر به struct ، کست کردن آدرس و دسترسی به حافظه در قالب استراکچر
  • ساخت نوع استراکچر قالب رجیسترهای پریفرال،کست کردن آدرس پریفرال
  • دسترسی به رجیسترها درقالب اعضای استراکچر
  • Define  ها در پنجره ی define symbols
  • اضافه کردن لایه ی نرم افزاری CMSIS
  • بررسی فایلh
  • فایلh (peripheral access layer) در لایه نرم افزاری CMSIS
  • Peripheral structure , peripheral memory map , peripheral declaration bit definition
  • Led چشمک زن با CMSIS

بیت فیلد و ساخت فایل های CMSIS جدید

  • بیت فیلد ، تعریف ، مقدار دهی اولیه و دسترسی
  • one byte , 2 byte and 4 byte boundaries
  • جایگیری بیت فیلد در حافظه و boundaries
  • اندازه بیت فیلد
  • کاربرد بیت فیلد در استفاده بهینه از حافظه
  • کست کردن آدرس متغیر ها در قالب پوینتر به بیت فیلد
  • بیت فیلد جایگزین bitwise operator
  • ساخت بیت فیلد قالب رجیستر CRH ، دسترسی به رجیسترها با بیت فیلد
  • نوشتن bit definition های جدید ، متناسب با بیت فیلد
  • Led چشمک زن با بیت فیلد
  • یکی کردن MODE  و CNF در بیت فیلد
  • دانلون فایلsvd با نرم افزار keil
  • ساخت فایل device دارای بیت فیلد باexe
  • جایگزین کردن فایل هدر جدید
  • و اصلاح device peripheral access layer header file

یونیون و کاربردها

  • Union تعریف مقداردهی اولیه ، دسترسی به اعضا union , union tag , typedef union
  • بررسی مثال خروجی سنسور dht22 و Checksum
  • تفکیک integer های بزرگ به کوچک با bitwise operator ها
  • اتصال integer های کوچک و ساخت integer های بزرگتر با bitwise operator ها
  • کاربرد union برای پردازش داده های سنسور ، آرایه و استراکچر در union ، جایگزینbitwise operator
  • نحوه ی ذخیره سازی اعداد در حافظه : big endian & little endian
  • ذخیره سازی اعضای union در حافظه و تاثیر little endian بر union
  • union برای ساخت بافر های کوچک
  • کاربرد union در آرایه های با اعضای متفاوت
  • union در دسترسی به رجیسترهای پریفرال ها
  • Underlying type
  • اصلاح بیت فیلد برای پریفرال های باس AHB

Alignment & packing

  • Structure padding
  • Alignment و محدودیت های دسترسی cpu  به حافظه
  • ldrb strb, Alignment =1 , byte boundaries
  • lrdh strh , Alignment = 2 , half word
  • ldr str , Alignment = 4 , word boundaries
  • strd ldrd , Alignment = 8 , double word 
  • alignment و اندازه استراکچر : 5 مثال
  • عملگر __alignof__
  • __attribute__((aligned())) برای استراکچر
  • اصلاح alignment برای بهینه سازی کپی استراکچر
  • __attribute__((aligned())) و typedef برای سایر انواع متغیر
  • Packing با اصلاح alignment نوع اعضای استراکچر
  • __attribute__((aligned())) برای متغیرها
  • افزایش alignment اعضای استراکچر
  • پک کل استراکچر با استفاده از __attribute__((__packed__))
  • Packing انتخابی اعضای استراکچر با __attribute__((packed))
  • pragma pack(1)
  • pragma pack(1) pack()
  • pragma pack(1) pack(push) pack(pop)

 

پریپراسسور در زبان برنامه نویسی C

 

منابعی که در این فصل بررسی میشن:

  • Using the GNU Compiler Collection
  • The C Preprocessor

پریپراسسور دیرکتیوها در زبان برنامه نویسی سی

  • معرفی پریپراسسور directives
  • Object like macros
  • نوشتن bit definition
  • نوشتن peripheral declaration
  • #include & #import
  • #ifndef و header guard
  • #pragma once
  • ifdef و فایل های config
  • #if , #else , #elif
  • #error , #warning
  • عملگر defined
  • تعریف و نحوه ی استفاده از Function like macros
  • نحوه عملکرد پریپراسسور، اسم ماکرو و expansion ماکرو
  • استفاده از ماکرو های set , clear , toggle , read , modify برای تغییر رجیسترها

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

  • مقایسه تابع و ماکرو با بررسی اسمبلی کد در محیط دیباگ
  • دریافت ورودی ها در ماکرو و تابع
  • تفاوت ماکرو و تابع در دیباگ
  • بررسی اهمیت پرانتز برای ورودی های ماکرو
  • تاثیر پرانتز روی اسمبلی کد اکسپنشن ماکرو
  • مقایسه عملگر ++ در ورودی ماکرو و تابع با بررسی کد اسمبلی
  • بررسی خروجی تابع به عنوان ورودی ماکرو و تابع
  • فراخوانی تابع و ماکرو با ماکرو، مثال ماکرو call
  • کجا از ماکرو و کجا از تابع استفاده کنیم
  • معرفی داکیومنت The C Preprocessor
  • بررسی دام های ماکرو از داکیومنت The C Preprocessor
  • Misnesting و دلایل پرهیز از آن
  • بالانس نبودن پرانتز ها در ماکرو
  • Operator precedence problem
  • بررسی duplication of side effect
  • self-referential macro
  • بررسی اسکوپ متغیرهای داخل بلوک کد
  • بلوک کد به عنوان ماکرو و نوشتن ماکرو در برکت
  • ماکرو ، compound statement و سمی کالن اضافه
  • مقایسه جایگیری متغیرهای ماکرو و تابع در استک با بررسی خط به خط اسمبلی و حافظه
  • بررسی قدم به قدم استک و رجیستر استک پوینتر و r7
  • اینستراکشن push
  • کاربرد رجیستر r7 در مدیریت استک
  • آدرس دهی متغیرهای local در اسمبلی
  • بررسی اسمبلی اینستراکشن های خروج متغیرهای local از استک
  • نوشتن compound statement در چند خط
  • ماکرو با do{}while(0) و مزایا
  • اصلاح side effect های ماکرو ، دریافت متغیر در ماکرو
  • بررسی امکان gcc ،statement and declarations in expressions
  • ماکرو compound statement  با مقدار،statement در پرانتر
  • تعریف توابع inline و مقایسه ماکرو و تابع inline
  • بررسی ارور لینکر در مورد کلمه کلیدی inline و دو راه حل
  • تنظیمات optimization و تاثیر بر inline شدن ماکرو
  • معرفی attribute های توابع از داکیومنت using gcc
  • نحوه معرفی ویژگی های توابع به کامپایلر و کلمه کلیدی __attribute__
  • ویژگی always_inline برای inline کردن ماکرو به اجبار

 

آرایه ها، رشته ها، الگوریتم های سرچ و سورت ، swv و printf

منابعی که در این فصل بررسی میشن:

  • Using the GNU Compiler Collection
  • The Red Hat newlib C Library
  • STM32cubeide user guide_UM2609

مقدمه آرایه و رشته در زبان برنامه نویسی سی

  • تعریف آرایه ، بررسی آرایه در حافظه ، بررسی کد اسمبلی دسترسی به اعضای آرایه
  • تفاوت آرایه و پوینتر ، ایدنکس آرایه و *pointer
  • ایندکس آرایه و pointer arithmetic در اسمبلی
  • پوینتر و آرایه ورودی تابع
  • عملگر sizeof و اندازه آرایه
  • کاراکترها و جدول اسکی
  • تعریف و مقداردهی رشته

تابع printf در دیباگ میکروکنترلر STM32

  • معرفی پریفرال ITM
  • بررسی سخت افزار و نرم افزار مورد نیاز برای serial wire viewer STM32
  • بررسی تابع write  و تابع ITM_SendChar
  • تنظیمات مورد نیاز printf
  • استفاده از تابع printf  با SWV
  • مقایسه اسکیپ سیکوئنس \n و \r
  • اسکیپ سیکوئنس \” , \’ , \t , \? , \\
  • \ooo , \xhh
  • معرفی منوال the red had newib C library
  • ورودی ها و خروجی های printf
  • بررسی کامل format specifier ها با مثال
  • تایپ ها %% ، پرینت درصد
  • i , %d , %u , %p  ، پرینت اینتیجر در مبنای 10 و پوینتر
  • f , %e , %g  ، پرینت اعشاری
  • c , %s  ، پرینت کاراکتر و رشته
  • x , %o  ، پرینت در مبنای 8 و 16
  • تاثیر سایز های hh , h , ll , l روی تایپ i  و d
  • سایز های hh , h , ll , l روی تایپ x
  • روش های متفاوت نوشتن precision در format specifier
  • مشخص کردن تعداد ارقام اعشار با precision برای تایپ های e , f , g
  • تعداد کاراکتر ها در رشته با precision
  • عرض در format specifier برای تایپ d
  • استفاده از فلگ minus
  • فلگ zero
  • استفاده از فلگ پرانتز
  • فلگ کاما
  • plus
  • استفاده از فلگ # برای نوع های o , x
  • فلگ اسپیس
  • تغییر ترتیب ورودی های تابع printf با پارامترها

الگوریتم های سرچ و سورت آرایه در زبان برنامه نویسی سی

  • تابع rand  و تولید اعداد رندوم
  • تابع برای پر کردن آرایه ، کپی آرایه ، پیدا کردن مینیمم و ماکزیمم
  • الگوریتم selection sort  و پیاده سازی
  • bubble sort  و پیاده سازی
  • بهبود الگوریتم bubble sort  و پیاده سازی
  • الگوریتم insertion sort  و پیاده سازی
  • گپ و اضافه کردن گپ به الگوریتم selection sort  و پیاده سازی
  • الگوریتم shell sort  و پیاده سازی
  • quick sort  و پارتیشن بندی آرایه
  • پیاده سازی الگوریتم پارتیشن بندی آرایه
  • quick sort  با دو روش
  • معرفی تابع qsort (gcc sort)  وپیاده سازی
  • سورت کردن آرایه ی استراکچری
  • مقایسه عملکرد الگوریتم های selection  و bubble  و insertion و shell و quick و qsort با مقایسه cpu cycle

 

پریفرال های RCC ، EXTI ، NVIC ، SYSTICK در میکروکنترلر STM32F1

منابعی که در این فصل بررسی میشن:

  • cortex-m3 programming manual
  • STM32F1 reference manuaul

پریفرال RCC در میکروکنترلر های STM32F1

  • مدار reset در میکروکنترلر های STM32F1
  • معرفی Clock tree
  • منابع کلاک، کریستال ها و مدارهای RC
  • تفاوت ماژول منبع کلاک و کریستال
  • کلاک HSI و بیت های HSION و HSIRDY در رجیستر RCC_CR
  • فعال کردن کلاک HSE و بیت های HSEON و HSERDY در رجیستر RCC_CR
  • استفاده از منبع کلاک بجای کریستال و بیت HSEBYP در رجیستر RCC_CR
  • تقسیم کلاک HSE بر دو در ورودی PLL و بیت PLLXTPRE در رجیستر RCC_CFGR
  • معرفی PLL
  • مشخص کردن ورودی PLL با بیت PLLSRC در رجیستر RCC_CFGR
  • ضریب PLL در بیت PLLMUL در رجیستر RCC_CFGR
  • تنظیم AHB Prescaler با بیت HPRE در رجیستر RCC_CFGR
  • کلاک پریفرال های باس APB1 با بیت PPRE1 در رجیستر RCC_CFGR
  • تنظیم کلاک پریفرال های باس APB2 با بیت PPRE2 در رجیستر RCC_CFGR
  • کلاک ADC با بیت ADCPRE در رجیستر RCC_CFGR
  • تنظیم کلاک USB با بیت USBPRE در رجیستر RCC_CFGR
  • روشن کردن PLL با بیت های PLLON و PLLRDY در رجیستر RCC_CR
  • منبع SYSCLK با بیت های SW و SWS در رجیستر RCC_CFGR
  • فعال کردن Prefetch در بیت PRFTBE در رجیستر FLASH_ACR
  • تنظیم two wait state در بیت های LATENCY رجیستر FLASH_ACR
  • نوشتن تابع تنظیم کلاک میکروکنترلر با رجیسترها
  • پین MCO و خروجی کلاک ، بیت های MCO در رجیستر RCC_CFGR
  • تنظیم پین MCO و اندازه گیری کلاک PLL/2 با اسیلوسکوپ
  • بررسی نحوه ی تنظیم کلاک توسط کتابخانه HAL
  • ماکروهای فعالسازی کلاک در کتابخانه HAL
  • نوشتن تابع فعالسازی کلاک پریفرال ها با پوینتر void

پریفرال EXTI، شمردن تعداد دفعات فشرده شدن کلید با Polling در STM32

  • سون سگمنت کاتد مشترک و انتخاب مقاومت ها
  • مشخص کردن اعدادی که در رجیستر BSRR باید نوشته بشن برای نمایش اعداد 0 تا 9 در سون سگمنت
  • انجام پروژه ی نمایش اعداد در سون سگمنت
  • تنظیم پین در حالت ورودی دیجیتال ، راه اندازی Push button و مدار Debouncing
  • بررسی interrupt و polling
  • لاین های اینتراپت خارجی و ساختار پریفرال EXTI
  • اینتراپت در لبه ی بالارونده، رجیستر EXTI_RTSR
  • اینتراپت در لبه ی پایین روند، رجیستر EXTI_FTSR
  • فعال کردن نرم افزاری اینتراپت های خارجی با رجیستر EXTI_SWIER
  • فعال سازی اینتراپت های خارجی در رجیستر EXTI_IMR
  • Pending request register
  • تفاوت اینتراپت و ایونت
  • فعال سازی event در رجیستر EXTI_EMR
  • اتصال پین ها به لاین های اینتراپت با رجیستر های EXTICR در پریفرال AFIO
  • پروژه شمردن تعداد دفعات فشرده شدن Push button و نمایش در Seven segment با برنامه نویسی رجیستری

پوینتر به تابع در زبان C

  • معرفی ، تعریف و مقدار دهی پوینتر به تابع
  • فراخوانی تابع با استفاده از پوینتر به تابع
  • کاربرد های پوینتر به تابع
  • پوینتر به تابع عضوی از استراکچر
  • Object oriented programming در زبان سی با پوینتر به تابع
  • تعریف و مقدار دهی اولیه ی آرایه ای از پوینتر ها به تابع
  • آرایه از پوینترها به تابع برای انتخاب توابع ، جایگزین if

پریفرال NVIC ، فایل core_cm3.h و تنظیم اینتراپت ها

  • حالت کاری thread mode و handler mode
  • اینتراپت های CPU و اینتراپت های device
  • جدول vector table و آدرس توابع IRQ
  • فراخوانی تابع روتین اینتراپت
  • بررسی وضعیت pending و active
  • معرفی cortex-m3 technical reference manual
  • معرفی cortex-m3 programming manual
  • اولویت و شماره اینتراپت ها
  • فعال کردن اینتراپت های در رجیستر های ISERx در پریفرال NVIC
  • غیر فعال کردن اینتراپت ها در رجیسترهای ICERx در پریفرال NVIC
  • فعال کردن Pending در رجیسترهای ISPRx در پریفرال NVIC
  • غیر فعال کردن Pending در رجیستر های ICPRx در پریفرال NVIC
  • خوندن وضعیت Active در IABRx در پریفرال NVIC
  • اولویت بندی اینتراپت ها در رجیسترهای IPRx در پریفرال NVIC
  • بیت های Preemption priority و Sub-priority
  • تنظیم گروه بندی اولویت در بیت های PRIGROP
  • بررسی IRQn_Type ، شماره گزاری اینتراپت ها در لایه ی نرم افزاری CMSIS
  • معرفی فایلh
  • بررسی استراکچر قالب رجیسترهای پریفرال NVIC در فایلh
  • توابع فایلh برای تنظیم پریفرال NVIC
  • بررسی تابع NVIC_EnbleIRQ
  • محاسبه ی باقیمانده تقسیم بر 32 با AND کردن شماره اینتراپت با 0x1F
  • خارج قسمت تقسیم بر 32 با شیفت راست شماره اینتراپت
  • پروژه تنظیم اینتراپت خارجی با استفاده از توابع فایلh
  • گروه بندی اولیت با تابع NVIC_SetPriorityGrouping
  • اولویت اینتراپت با تابع NVIC_SetPriority
  • انکود کردن گروه بندی با تابع NVIC_EncodePriority
  • خوندن Priority group با تابع NVIC_GetPriorityGrouping
  • صفر کردن Flag interrupt
  • vector table در فایل startup
  • نوشتن توابع IRQHandler در فایلc
  • تعریف آرایه ی از پوینترها به توابع برای مدیریت توابع callback اینتراپت های EXTI
  • نوشتن تابع callback اینتراپت پین PB6 و مقدار دهی پوینتر به تابع
  • تابع برای مدیریت اینتراپت های پریفرال EXTI
  • ماکرو برای فراخوانی پوینترها به توابع callback
  • پروژه اینتراپت خارجی پین PB6 و افزایش عدد نمایش داده شده در سون سگمنت با فشردن کلید

 

حافظه ی فلش، رم و لینکر اسکریپت

منابعی که در این فصل بررسی میشن:

  • stm32 flash memory programming manual
  • Using ld

نوشتن در فلش میکروکنترلر STM32F1 بصورت رجیستری

  • معرفی منوال stm32 flash memory programming manual
  • روش های ICP و IAP در پروگرم کردن فلش
  • بررسی ساختار فلش main memory , information block و صفحه ها
  • خوندن flash
  • پریفرال flash program and erase controller
  • مقدار رجیستر های کلید
  • باز کردن قفل فلش ، رجیستر FLASH_KEYR و مقادیر کلید 1 و کلید 2
  • پیاده سازی الگوریتم پاک کردن یک صفحه در فلش
  • یک کردن بیت PER ، نوشتن آدرس در FAR ، بیت STRT
  • چک کردن بیت lock ، یک کردن بیت PG ، نوشتن داده ها با دسترسی 16 بیتی در فلش
  • بیت bsy
  • فرایند باز کردن قفل option byte و رجیستر FLASH_OPTKEYR ، چک کردن بیت OPTWRE
  • الگوریتم پاک کردن option byte ، بیت OPTER
  • نوشتن در option bytes و بیت OPTPG
  • آپشن بایت RDP  و محافظت فلش در برابر خوانده شدن
  • مقدار 0xff و RDPRT و سایر مقادیر در آپشن بایت RDP
  • بررسی نقشه رجیسترهای flash
  • بایت کم ارزش و پر ارزش option byte
  • تنظیمات آپشن بایت USER
  • آپشن بایت های Data0 و Data1
  • WRP0  تا WRP4 برای محافظت هر 4 صفحه در برابر نوشتن
  • اصلاح بیت فیلد های فلش
  • نوشتن کد باز کردن قفل فلش ، پاک کردن فلش و نوشتن در فلش با رجیسترها
  • پاک کردن صفحه آخر فلش و ذخیره اعداد دلخواه ، بررسی حافظه در دیباگ
  • ساخت آرایه در نمای expression برای مشاهده فلش در دیباگ
  • پوینتر و استراکچر برای دسترسی به آپشن بایت ها
  • نوشتن کد باز کردن قفل آپشن بایت ها ، پاک کردن آپشن بایت ها و نوشتن با رجیسترها
  • ساخت متغیر کمکی برای دسترسی به بیت های آپشن بایت ها
  • تنظیمات محافظت در برابر خواندن با RDP
  • محافظت در برابر نوشتن با WRP
  • تغییر آپشن بایت های RDP و WRP و باز کردن قفل فلش با نرم افزارst link utility

بوت لودر STM32

  • معرفی منوال AN2606
  • بررسی سخت افزار مورد نیاز برای استفاده از bootloader ، پینهای PA9 و PA10
  • اتصالات مبدل usart to usb برای استفاده از stm32 bootloader
  • تنظیمات نرم افزار STM32CubeProgrammer برای استفاده از bootloader
  • بررسی تنظیمات پین های bootmode برای استفاده از bootloader

داینامیک مموری آلوکیشن 

  • dynamic memory allocation و منطقه heap
  • مقایسه دینامیک و استاتیک memory allocation
  • کتابخانهh از فایل the red hat newlib C library
  • ورودی و خروجی و نحوه عملکرد تابع malloc
  • نوع متغیر size_t
  • مثال کلاس دانشجویان ( آرایه ای از آدرس های استراکچرهای مربوط به دانشجو)
  • ساخت آرایه ای از پوینتر ها برای ذخیره سازی دانشجویان
  • آرایه ای از پوینترها ورودی به تابع ، دو روش
  • پرینت کلاس دانشجویان
  • نحوه صحیح مقدار دهی به رشته با تابع strcpy
  • محاسبه تعداد اعضای آرایه با sizeof
  • کاربرد null pointer  در مثال دانشجویان
  • استفاده از تابع malloc برای ذخیره دانشجویان جدید
  • چک کردن خروجی تابع malloc
  • حافظه heap در دیباگ
  • ورودی ها و خروجی های تابع calloc
  • تفاوت کاربرد calloc  و malloc
  • صفر کردن حافظه توسط تابع calloc
  • اهمیت تابع calloc برای آرایه ای از پوینترها
  • ساخت آرایه با طول متغیر
  • ذخیره سازی اندازه آرایه با طول متغیر
  • ورودی ها ، خروجی ها و نحوه عملکرد realloc
  • تابع realloc و آرایه با طول متغیر
  • نوشتن تابع برای صفر کردن حافظه بعد از realloc
  • ورودی ها و خروجی ها تابع free و نحوه ی عملکرد
  • استفاده از تابع free برای آزاد کردن حافظه

زبان لینکر کامند و فایل لینکر اسکریپت

  • فایل لینکر اسکریپت و زبان برنامه نویسی linker command language
  • کامنت در لینکر اسکریپت
  • مروری بر وظایف ، ورودی های لینکر و خروجی لینکر
  • وظایف فایل لینکر اسکریپت
  • معرفی منوال using ld
  • داکیومنت using ld : فصل اول مقدمه
  • command line option  های لینکر اسکریپت در تنظیمات پروژه در STM32CubeIDE
  • فراخوانی نرم افزار لینکر با کامند ld
  • بررسی آپشن -o برای تغییر نام فایل .o خروجی
  • آپشن -Wl برای آپشن های لینکر در زمان فراخوانی غیر مستقیم
  • ورودی های فراخوانی نرم افزار linker
  • آپشن -T برای معرفی فایل linker script به لینکر
  • –gc-sections برای پاک کردن سکشن های استفاده نشده
  • آپشن –start-group و –end-group برای معرفی فایل های آرشیو کتابخانه های استاندارد
  • -lc و -lm
  • ویژگی های loadable , allocatable , readable , executable  برای سکشن ها
  • آدرس های VMA و LMA برای هر سکشن
  • بررسی آدرس های VMA و LMA برای سکشن .data
  • فرمت لینکر اسکریپت ، ساختار کلی فایل لینکر اسکریپت
  • کامند ها در لینکر اسکریپت ، کلمات کلیدی و مقدار دهی به سمبل
  • بررسی یک فایل linker script ساده
  • حداقل ها در کامند SECTIONS
  • کاربرد سمبل location counter در کامند SECTIONS
  • سمبل ها در لینکر اسکریپت ، تعریف و مقدار دهی سمبل
  • نوع اکسپرشن ها در لینکر اسکریپت
  • ثابت ها در لینکر اسکریپت
  • پسوند های k و m
  • استفاده از توابع لینکر اسکریپت داخل اکسپرشن
  • ORIGIN
  • تابع LENGTH
  • تعریف مناطق حافظه با کامند memory
  • مشخص کردن اسم ، مبدا و حجم منطقه های حافظه
  • ویژگی های حافظه در کامند memory : executable , read-only , writable
  • اصلاح حجم flash در پنجره build analyzer با اصلاح کامند memory
  • کامند ENTRY و مشخص کردن تابع Reset_Handler به عنوان نقطه شروع برنامه
  • سایر روش های مشخص کردن نقطه ی شروع برنامه
  • کامند SECTIONS و وظایف
  • sections-command ها
  • توضیحات سکشن خروجی
  • output-section-command
  • توضیحات سکشن ورودی
  • الگوهای رشته ها ، wildcard patterns
  • کاراکتر استریسک و wildcard patterns
  • علامت سوال و wildcard patterns
  • استفاده از wildcard در توضیحات سکشن ورودی
  • مثال اول تغییر لینکر اسکریپت: قرار دادن تابع در منطقه جدید حافظه فلش
  • پاتیشن بندی فلش و اضافه کردن سکشن جدید در کامند مموری
  • تعریف سکشن خروجی جدید در کامدن سکشن برای تابع
  • قرار دادن تابع در سکشن ورودی دلخواه با اتربیوت سکشن
  • مثال دوم تغییر لینکر اسکریپت: قرار دادن ثابت در منطقه جدید حافظه فلش
  • پاتیشن بندی فلش و اضافه کردن سکشن جدید در کامند مموری
  • تعریف سکشن خروجی جدید در کامند سکشن برای ثابت
  • قرار دادن ثابت در سکشن ورودی دلخواه با اتربیوت سکشن

 اسمبلی ARM

منابعی که در این فصل بررسی میشن:

  • ARM®v7-M Architecture Reference Manual
  • Using as
  • Cortex-m3 programming manual_PM0056

اسمبلی ARM

  • معرفی inline assembly ، نوشتن اسمبلی اینستراکشن ها در فایل .c
  • Basic asm و extended asm
  • معرفی و نوشتن اینستراکشن ، نمانیک و آپراند ها
  • منوال architecture arm v7
  • آرکیتکچر پروفایل ها A , R , M
  • اینستراکشن ست arm , thumb
  • انواع متغیر برای cpu
  • بررسی مقدار اینستراکشن mov و انکودینگ
  • محاسبه ی کد باینری اینستراکشن mov
  • اینستراکشن immediate و register
  • بررسی تفاوت انکودینگ ها در اینستراکشن mov
  • عملیات اینستراکشن ، سودو کد و سودو فانکشن
  • سودو کد اینستراکشن mov
  • imm32 و zeroextend
  • رجیستر Rd در انکودینگ های mov
  • فیلد qualifier
  • رجیستر APSR و وضعیت اجرای برنامه
  • تعریف و کاربرد فلگ ها
  • ، شناسایی عدد منفی
  • فلگ z ، شناسایی صفر
  • آپدیت کردن فلگ با S ، بررسی setflag در انکودینگ های mov
  • تست آپدیت کردن فلگ های N و Z با اینستراکشن mov
  • نوشتن عدد منفی در رجیستر cpu
  • اینستراکشن mvn
  • اجرای شرطی اینستراکشن ها
  • کاربرد اینستراکشن if then و it block
  • شرایط اینستراکشن های it block ،x , y , z
  • بررسی انکودینگ اینستراکشن it
  • کاندیشن ها و نمانیک اکستنشن ، کاندیشن اول در it block
  • وe در it instruction
  • شرطی اجرا کردن اینستراکشن mov
  • فیلد کاندیشنال
  • کاندیشن ها در it block
  • اینستراکشن cmp و انکودینگ ها
  • cmp و فلگ z
  • بررسی عملکرد و انکودینگ اینستراکشن add(immediate)
  • عملکرد و انکودینگ اینستراکشن add(register)
  • شیفت در اینستراکشن add
  • انکودینگ شیفت ، نوع و مقدار شیفت
  • انواع شیفت ها با مثال lsl , lsr , asr
  • carry در add
  • فلگ over flow در add

اینستراکشن های Load و Store

  • معرفی اینستراکشن ldrb , ldrh , ldr
  • عملوند های اینستراکشن ldr ( immediate )
  • اینستراکشن ldr ( literal )
  • حالت آدرس دادن PC relative
  • label در اینستراکشن ldr ( literal )
  • معرفی رفرنس منوال Using as
  • معرفی دیرکتیو ها
  • سینتکس و کاربرد دیرکتیو .equ
  • لود کردن اعداد 32 بیتی در رجیسترهای CPU 
  • بخش literal pool برای ذخیره سازی ثابت ها بعد از توابع
  • بررسی کد نوشته شده توسط کامپایلر برای مقدار دهی متغیر ها
  • اینستراکشن str ( immediate )
  • بررسی اینستراکشن str (register )
  • دسترسی به اعضای آرایه و استراکچر و محاسبه آدرس در اسمبلی
  • اینستراکشن ldr و str از نوع immediate برای دسترسی به اعضای آرایه و استراکچر در زبان اسمبلی

کد اسمبلی در فایل های .c همراه با ورودی و خروجی ، extended asm

  • بررسی سینتکس extended asm در منوال using the gnu compiler 
  • عملوند های خروجی در extended asm
  • عملوند های ورودی در extended asm
  • نوشتن مثال های extended asm
  • دسترسی به متغیر های زبان سی از اسمبلی با آدرس
  • asm symbolic name
  • قید های ورودی های extended asm
  • قید های خروجی های extended asm
  • قید رجیستر r
  • constraint modifier های = و +
  • expression  در عملوند های ورودی
  • مفهوم constraint
  • قید whitespace
  • قید m ، memory operand
  • o constraint
  • دسترسی به متغیر های زبان سی از اسمبلی بصورت مستقیم
  • قید های اختصاصی خانواده ARM
  • I constraint برای ثابت های هشت بیتی

اینستراکشن های branch و push ، pop

  • اینستراکشن B ، جامپ به label
  • بررسی اسمبلی کد if else if نوشته شده توسط کامپایلر
  • پیاده سازی if else if در اسمبلی با cmp و b
  • conditional branch و beq
  • اینستراکشن شرطی bpl
  • تاثیر اینستراکشن های cmp و subs روی فلگ carry
  • تفریق در اینستراکشن های cmp و subs
  • شرط hi و اینستراکشن شرطی bhi
  • بررسی شرط ls و اینستراکشن شرطی bls
  • do{}while در زبان اسمبلی آرم
  • while{} در زبان اسمبلی آرم
  • switch case در زبان اسمبلی آرم
  • اینستراکشن branch with link ، bl 
  • بررسی کاربرد اینستراکشن bl در فراخوانی توابع
  • عملکرد اینستراکشن bl و link register
  • اینستراکشن branch and exchange ، bx
  • تغییر instruction execution state
  • کاربرد bx در برگشت از توابع
  • بررسی مدیریت استک در اسمبلی
  • اینستراکشن push
  • رجیستر stack pointer
  • نقش رجیستر r7 در مدیریت استک
  • اینستراکشن pop
  • جامپ با تغییر رجیستر program counter با استفاده از اینستراکشن pop
  • بررسی ترتیب قرار گیری و خروج مقدار رجیستر های cpu در حافظه استک با اینستراکشن های push و pop
  • bitcount در عملیات push و pop
  • MemA در عملیات push و pop
  • link register در استک
ابزارهای برنامه نویس میکروکنترلر ARM


سازندگان ابزارهای برنامه نویسی میکروکنترلر ARM

معرفی منابع اصلی یادگیری برنامه نویسی سیستم های امبدد که در این دوره آموزشی با اونها آشنا میشید. 

GNU

سازنده کامپایلر GCC

ST

سازنده میکروکنترلر STM32

ARM

طراح CPU cortex-m3

Red Hat

نویسنده ی کتابخانه های استاندارد

 آموزش نرم افزار STM32CubeIDE

 
نرم افزار رایگان شرکت ST که محیط نوشتن و دیباگ برنامه رو برامون فراهم میکنه. STM32CubeIDE نسبت به keil امکانات بیشتر و محیط زیباتری داره.

منابع اصلی نرم افزار STM32CubeIDE :  

st_logo

STM32CubeIDE user guide

راهنمای استفاده از STM32CubeIDE

 آموزش زبان برنامه نویسی سی

 
زبان سی، زبان برنامه نویسی سیستم عامل ها و میکروکنترلرها است، اگه نخوای اسمبلی بنویسی، بدون زبان سی هیچ کامپیوتری نمیتونه کار کنه. 
حالا چرا مهمترین کارها مثل برنامه سیستم عامل با زبان سی نوشته میشه؟
” چون زبان سی ساده طراحی شده و به اسمبلی نزدیکه ، با تمرین به راحتی میتونید با دیدن کد سی ، کد اسمبلی که کامپایلر مینویسه رو بفهمید.” 
 

منابع اصلی زبان برنامه نویسی سی : 

gnu

The GNU C Reference Manual

رفرنس منوال زبان برنامه نویسی سی

کتابخانه های استاندارد زبان سی

 
نحوه ی استفاده از توابعی مثل printf رو از رفرنس منوال های Red Hat میخونیم.
 

منابع اصلی زبان برنامه نویسی سی : 

redhat

Red Hat newlib C Library

کتابخانه های استاندارد زبان سی

آموزش عملی زبان اسمبلی آرم با STM32

 

همه ی برنامه نویسای میکروکنترلر برای پیدا کردن منشا ارورها و درک نحوه ی اجرای برنامه حداقل باید بتونن اسمبلی بخونن. 

برای اینکه برنامه نویس سی باشید باید اسمبلی بفهمید. 

منابع اصلی زبان اسمبلی آرم برای CPU cortex-m3 : 

arm

ARM®v7-M Architecture

راهنمای اینستراکشن های اسمبلی

gnu

Using as

راهنمای قواعد زبان اسمبلی

آموزش زبان لینکر کامند و فایل لینکراسکریپت

 

در همه ی پروژه ها یک فایل با پسوند .ld به نام لینکر اسکریپت وجود داره که با زبان برنامه نویسی لینکرکامند نوشته شده. این فایل ساختار حافظه رو مشخص میکنه. 

فایل لینکر اسکریپت بصورت خودکار به پروژه های ما اضافه میشه ولی برای بعضی کارها باید بتونیم تغییرش بدیم یا اگر نیاز بود از اول بنویسیمش.

منبع اصلی زبان لینکرکامند : 

gnu

Using ld

راهنمای زبان لینکرکامند

آموزش کامپایلر GCC

 

کامپایلر GCC، همون کامپایلر لینوکس، محبوب ترین کامپایلر سی در دنیا و رایگان هست. کامپایلر یک مجموعه ی نرم افزاری هست که فایل های پروژه های سی رو ورودی میگیره و فایل executable رو میسازه. در این دوره تنظیمات کامپایلر و امکاناتی که به زبان سی اضافه میکنه رو یادمیگرید.

  

منبع اصلی کامپایلر GCC : 

gnu

Using the GNU Compiler Collection

راهنمای کامپایلر GCC

gnu

The C Preprocessor

راهنمای پریپراسسور سی

آموزش میکروکنترلر STM32

 

کامپایلر GCC، همون کامپایلر لینوکس، محبوب ترین کامپایلر سی در دنیا و رایگان هست. کامپایلر یک مجموعه ی نرم افزاری هست که فایل های پروژه های سی رو ورودی میگیره و فایل executable رو میسازه.   

منبع اصلی کامپایلر GCC : 

gnu

Using the GNU Compiler Collection

راهنمای کامپایلر GCC

gnu

The C Preprocessor

راهنمای پریپراسسور سی

.If you think like a computer , writing in c makes sense
linus_t
لینوس توروالدز
نویسنده کرنل لینوکس
پیمایش به بالا