مقدمه
قبلا توی مقالهای تحتعنوان “کدام کامپایلر برای میکروکنترلر STM8 بهتر است؟” بهبررسی کامپایلرهای موجود برای میکروکنترلر STM8 پرداختیم؛ از مجموع مباحث مطرحشده درخصوص یک کامپایلرخوب به جمعبندی رسیدیم که کامپایلرSDCC باتوجهبه امکانات و قابلیتهایی که دارد برای کار با این میکروکنترلر یک کامپایلرخوب و قابلقبول است. اما سوالی که مطرح میشود این است که چطور میتوانیم از این کامپایلر استفادهکنیم؟ از این کامپایلر هم میتونیم مثل باقی کامپایلرها استفاده کنیم با اینتفاوت که برای این کامپایلر پلاگین خوبی با ادیتورهای موجود ارائهنشده و مجبوریم که از Makefile برای کامپایل استفادهکنیم. پس با ما همراه باشید که هم نحوهی کار با کامپایلرSDCC را بیاموزید هم این که چطور از Makefile در کامپایل پروژهها استفادهکنیم.
گام اول: نصب کامپایلر SDCC
قبلاز هرکاری برای شروع لازماست که ابزارهایلازم را تهیه و بهینهسازی کنید، منطقا چون قراره که از SDCC استفادهکنیم لازم است که اونو نصبکنیم؛ برای دانلود این کامپایلر باید آخرین ورژنش رو از سایت sf.net دانلود کنید؛ برای دانلود کامپایلر SDCC روی این لینک کلیککنید؛ اگر نتونستید از خود سایت sf دانلود کنید بدونید که بدلیل تحریمهاست و میتونید از سرویسشکن که برای دورزدن تحریمها طراحیشده استفادهکنید. همونطورکه اطلاعدارید نصب نرمافزار کارسختی نداره و فقط کافیه چندتا Next بزنید و در آخر Finish مثل همه نصبهای دیگه کامپایلر SDCC نیز هیچچیز اضافهای برای نصب نداره. برای اطمینان از نصب صحیح کامپایلر SDCC خط فرمان رو بازکنید و دستور زیر رو داخل آن واردکنید:
sdcc -v
باید خروجیزیر رو دریافتکنید:
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.8.0 #10562 (MINGW64) published under GNU General Public License (GPL)
اگر چنین خروجی را دریافت کردید؛ یعنی نصب بهخوبی انجامشده و الان آمادهاید که به مرحلهی بعد بروید؛ فقط دقتداشتهباشید که از ورژن ۳.۸.۰ کامپایلر SDCC استفادهکنید.
نصب و پیکربندی Eclipse :
برای اینکه بتونیم برنامههای بلند رو با کمترین دردسر بنویسیم و مدیریتکنیم لازمداریم که از یک ویرایشگر حرفهای استفادهکنیم؛ ویرایشگرهای زیادی وجود دارند که میتونیم برنامه رو با اونها بنویسیم، اما در اینپست قصد داریم از Eclipse برای اینمنظور استفادهکنیم! همانطورکه قبلا هم گفتم Eclipse یکیاز بهترین ابزارهای برنامهنویسی است که به کمک IBM ایجاد شد و هماکنون در زمره بهترین ادیتورها است. برای نصب eclipse لازمه که اول جاوا را نصبکنید بعد eclipse را از سایتش دانلود کنید و… ؛ آموزش تمام مراحل نصب eclipse را میتوانید در پست “آموزش برنامهنویسی با رزبریپای بدون سیستمعامل – قسمت چهارم” در قسمت “چطور eclipse را نصب کنیم” پیداکنید.
البته میتونید از CodeBlock هم برای کار با کامپایلر SDCC استفادهکنید؛ اما Eclipse کجا و CodeBlock کجا!
بعداز نصب Eclipse لازمه که ابزار Make رو هم نصبکنید که آموزشش توی همون لینک هست باعنوان “نصب ابزارهای لینوکسی“. با نصب make درواقع سیکل نصب ابزارهایلازم رو به اتمام رسوندیم و حالا لازمه که اولین برنامه خودمون رو بنویسیم!
MakeFile چیست و بهچهدردی میخوره؟
خوب اصلا این makefile که میگیم چی هست و دقیقا به چهدردی میخوره؟ همونطورکه میدونید قویترین ابزار برنامهنویسان برای جلوگیریاز پیچیدهشدن بیشازحد برنامه، استفادهاز روش برنامهنویسی ماژولار است، در روش برنامهنویسی ماژولار برنامه به تیکههای کوچیک تقسیممیشه و درانتها با چسباندن این تیکههای کوچک برنامهی اصلی ساختهمیشه؛ اما چسباندن و کامپایلکردن تیکههای مجزای برنامه کارسخت و پراشتباهی است. اینجاست که ابزار make وارد میشه؛ درواقع این ابزار برای خودکارسازی این فرایند طراحی و ساختهشده؛ در یک نگاهکلی، make فقط برای کامپایل برنامهها استفاده نمیشود. شما میتوانید در هرکاری که در آن نیازبه بروزرسانی بعضی فایلها متناسب با تغییر در فایلهای دیگر است از make استفادهکنید. روند انجام تمام جزئیات رو توی یه فایل ذخیره میکنیم که بهش makefile گفتهمیشه؛ به زبانسادهتر در واقع makefile یکسری دستورالعمل است که برای داشتن خروجی لازمه که انجامبشه؛ و ابزار make اون دستورها رو پشتسرهم اجرا میکنه! همونطورکه میبینید makefile اصلا چیزترسناکی نیست و خیلی هم دوستداشتنی است، برای داشتن دیدبهتر نسبتبه makefile به صفحه wiki آن مراجعه کنید.
اگر علاقهمندید درخصوص نوشتن makefile مهارت کسبکنید این لینک را مطالعه کنید.
ساخت اولین برنامه برای STM8 بااستفادهاز SDCC:
اولین قدم برای ایجاد اولین برنامه ساخت پروژه است؛ برای اینکار از گزینه File در Eclipse زیرمنوی New را انتخابکنید و گزینه C Project را انتخابکنید.
بعد از انتخاب C Project پنجره ای ظاهر می شود که باید در آن نام و نوع پروژه مورد نظر خود را انتخاب کنید. همانطور که مشخص است هر اسم دلخواهی را که دوست دارید انتخاب کنید و نوع پروژه را حتما باید از نوع Makefile انتخاب کنید.
دقت داشته باشد در نام پروژه از space استفاده نکنید و حتما فاصله ها را با ‘_’ (آندرلاین) پر کنید.
برای اضافهکردن makefile نیاز نیست کارخاصی انجامدهید؛ تنها کافیه برروی اسم پروژه که به شکل یک پوشه نمایشدادهمیشه راستکلیک کنید و از گزینه New زیرمنوی file را انتحابکنید.
بعداز انتخاب file پنجرهای ظاهر میشود که در آن باید اسم فایل جدید را انتخابکنید، نام makefile را انتحابکنید و دکمه finish را بزنید.
بعداز ساخت فایل makefile برروی آن دابلکلیک کنید و محتوایزیر را در آن کپیکند:
# Makefile for STM8 with SDCC compiler # Copyright 2019 # LICENSE: MIT .PHONY: all clean #Compiler CC = sdcc OBJCOPY = objcopy SIZE = stm8-size MKDIR = mkdir RM = rm -f #Platform PLATFORM = stm8 #Product name PNAME = main #Output directory for intermediate and final compiled file(s) ODIR = bin #Directory for helpers IDIR = StdPeriphLib/inc SDIR = StdPeriphLib/src # In case you ever want a different name for the main source file MAINSRC = $(PNAME).c ELF_SECTIONS_TO_REMOVE = -R DATA -R INITIALIZED -R SSEG -R .debug_line -R .debug_loc -R .debug_abbrev -R .debug_info -R .debug_pubnames -R .debug_frame # These are the sources that must be compiled to .rel files: EXTRASRCS = \ $(SDIR)/stm8s_clk.c \ $(SDIR)/stm8s_gpio.c \ HEADERS = # The list of .rel files can be derived from the list of their source files RELS = $(EXTRASRCS:.c=.rel) INCLUDES = -I$(IDIR) -DUSE_STDPERIPH_DRIVER CFLAGS = -m$(PLATFORM) -Ddouble=float --std-c99 --nolospre --opt-code-size ELF_FLAGS = --out-fmt-ihx --debug LIBS = # This just provides the conventional target name "all"; it is optional # Note: I assume you set PNAME via some means not exhibited in your original file all: $(PNAME) # How to build the overall program $(PNAME): $(MAINSRC) $(RELS) @$(MKDIR) -p $(ODIR) $(CC) $(INCLUDES) $(CFLAGS) $(ELF_FLAGS) $(LIBS) $(MAINSRC) -o $(ODIR)/ $(wildcard $(ODIR)/$(SDIR)/*.rel) # How to build any .rel file from its corresponding .c file # GNU would have you use a pattern rule for this, but that's GNU-specific %.rel: %.c $(HEADERS) @$(MKDIR) -p $(ODIR)/$(SDIR) $(CC) -c $(INCLUDES) $(CFLAGS) $(ELF_FLAGS) $(LIBS) -o$(ODIR)/$(SDIR)/ $< # Suffixes appearing in suffix rules we care about. # Necessary because .rel is not one of the standard suffixes. .SUFFIXES: .c .rel hex: $(OBJCOPY) -O ihex $(ELF_SECTIONS_TO_REMOVE) $(PNAME).elf $(PNAME).hex # flash: # stm8flash -cstlinkv2 -pstm8s105?6 -w$(PNAME).ihx clean: @echo "Cleaning files..." @$(RM) $(ODIR)/$(SDIR)/*.* @$(RM) $(ODIR)/*.* @echo "Done."
درواقع محتوای فوق لیست کارهایی است که برای کامپایل پروژه لازماست انجامشود. حالا نوبت اضافهکردن main.c است؛ برای اینکار کافیاست مطابق قبل برروی نام پروژه راستکلیک کنید و گزینه new را انتخابکنید اما اینبار گزینه Source File را انتخابکنید .
و در قسمت انتخاب نام main.c را بنویسید؛
دقتداشتهباشید همه نام را با حروف کوچک انتخابکنید تا مشکلی برای کامپابل پیش نیاید.
حالا درون فایل main.c کد زیر را وارد کنید:
#include "stm8s.h" #include <stdint.h> void main (void) { GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOC); GPIO_Init(GPIOC, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOD, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); for(;;) { GPIO_WriteReverse(GPIOC,GPIO_PIN_3); GPIO_WriteReverse(GPIOD,GPIO_PIN_3); for(uint32_t i=0;i<100000;i++); } }
برای اضافهکردن کتابخانههای STM8 به پروژه ابتدا فایل StdPeriphLib را دانلودکرده و از حالتفشرده خارجکنید؛ برروی پوشه StdPeriphLib کلیککرده روی آن را کپیکنید سپس برروی نام پروژه در Eclipse راستکلیک کنید و از منوی ظاهرشده گزینه Paste را انتخابکنید؛ با اینکار پوشه به پروژه اضافهخواهدشد؛ و درنهایت تصویری مطابق تصویر زیر خواهیدداشت:
واقعا کی فکرشو میکرد اضافهکردن کتابخانه به Eclipse اینقدرساده باشه؟! حالا نوبت اضافهکردن مسیر کتابخانههای استاندارد هستش برای اینکار برروی پروژه راستکلیک کنید و گزینه properties را انتخابکنید؛ در پنجرهی ظاهرشده منوی C/C++General را بازکنید و زیر گزینه Preprocessor Include path را انتخابکنید سپس گزینه GNU C و برروی CDT User Setting Entries کلیککنید و سپس دکمه Add را بزنید.
اگر SDCC را در مسیر پیشفرض خود نصبکردهباشید؛ آدرس کتابخانههای آن به شکلزیر خواهند بود:
C:\Program Files\SDCC\include
در پنجره بازشده؛ مطابق عکسزیر تنظیمات را انجامدهید و کلید Ok را بزنید:
حالا همهچی برای کامپایل آمادهاست و تنها کافیست برای کامپایل پروژه کلید ctrl+B را بزنید؛ در قسمت پایین Eclipse احتمالا پیامهای زیر بهنمایش درمیآیند که نشان از کامپایلشدن پروژه دارند:
و اگر خطایی مشاهدهنکردید یعنی تمام قسمتها بهدرستی انجامشدهاند و فایل خروجی ایجادشدهاست.
فایل خروجی کجاست ؟
اما فایل خروجی با چه فرمتی و در کجا ایجاد میشود؛ بعداز کامپایل پروژه پوشه bin به لیست پوشههای پروژه اضافهخواهدشد که فایل خروجی با فرمت hex در این پوشه قرار دارد و بهسادگی با راستکلیک برروی آن میتوانید آن را کپیکنید.
اگر نمیدونید چطور میشه میکروکنترلر stm8 را برنامهریزی کرد؛ قسمت ششم آموزش میکروکنترلرSTM8 را مطالعهکنید.
منبع: سیسوگ