چطور از کامپایلر SDCC برای STM8 استفاده کنیم؟

0
168
کامپایلر SDCC برای STM8
کامپایلر SDCC برای STM8

مقدمه

قبلا توی مقاله‌ای تحت‌عنوان “کدام کامپایلر برای میکروکنترلر 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

 

برای اینکه بتونیم برنامه‌های بلند رو با کمترین دردسر بنویسیم و مدیریت‌کنیم لازم‌داریم که از یک ویرایشگر حرفه‌ای استفاده‌کنیم؛ ویرایشگرهای زیادی وجود دارند که میتونیم برنامه رو با اونها بنویسیم، اما در این‌پست قصد داریم از Eclipse برای این‌منظور استفاده‌کنیم! همانطورکه قبلا هم گفتم Eclipse یکی‌از بهترین ابزارهای برنامه‌نویسی است که به کمک IBM ایجاد شد و هم‌اکنون در زمره بهترین ادیتورها است. برای نصب eclipse لازمه که اول جاوا را نصب‌کنید بعد eclipse را از سایتش دانلود کنید و… ؛ آموزش تمام مراحل نصب eclipse را می‌توانید در پست “آموزش برنامه‌نویسی با رزبری‌پای بدون سیستم‌عامل – قسمت چهارم” در قسمت “چطور eclipse را نصب کنیم” پیداکنید.

البته میتونید از CodeBlock هم برای کار با کامپایلر SDCC استفاده‌کنید؛ اما Eclipse کجا و CodeBlock کجا!

بعداز نصب Eclipse لازمه که ابزار Make رو هم نصب‌کنید که آموزشش توی همون لینک هست باعنوان “نصب ابزارهای لینوکسی“. با نصب make درواقع سیکل نصب ابزارهای‌لازم رو به اتمام رسوندیم و حالا لازمه که اولین برنامه خودمون رو بنویسیم!

MakeFile چیست و به‌چه‌دردی میخوره؟

makefile
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 را انتحاب‌کنید.

اضافه‌کردن makefile
اضافه‌کردن makefile

 

بعداز انتخاب file پنجره‌ای ظاهر میشود که در آن باید اسم فایل جدید را انتخاب‌کنید، نام makefile را انتحاب‌کنید و دکمه finish را بزنید.

انتخاب نام makefile
انتخاب نام makefile

 

بعداز ساخت فایل 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 را انتخاب‌کنید .

تولید محتوا در makefile
تولید محتوا در makefile

 

و در قسمت انتخاب نام 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 را انتخاب‌کنید؛ با این‌کار پوشه به پروژه اضافه‌خواهد‌شد؛ و درنهایت تصویری مطابق تصویر زیر خواهیدداشت:

افزودن فایل StdPeriphLib
افزودن فایل StdPeriphLib

 

واقعا کی فکرشو میکرد اضافه‌کردن کتابخانه به 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 را مطالعه‌کنید.

 

 

منبع: سیسوگ

برای این مقاله نظر بگذارید:

لطفا دیدگاه خود را بنویسید
لطفا نام خود را وارد کنید