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

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

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

قبلا توی مقاله ای تحت عنوان ” کدام کامپایلر برای میکروکنترلر STM8 بهتر است ؟ ” به بررسی کامپایلر های موجود برای میکروکنترلر STM8 پرداختیم ؛ از مجموع مباحث مطرح شده در خصوص یک کامپایلر خوب به جمع بندی رسیدیم که کامپایلر SDCC با توجه به امکانات و قابلیت هایی که دارد برای کار با این میکروکنترلر یک کامپایلر خوب و قابل قبول است. اما سوالی که مطرح می‌شود این است که چطور می توانیم از این کامپایلر استفاده کنیم ؟ از این کامپایلر هم میتونیم مثل باقی کامپایلر ها استفاده کنیم با این تفاوت که برای این کامپایلر پلاگین خوبی با ادیتور های موجود ارائه نشده و مجبوریم که از Makefile برای کامپایل استفاده کنیم.

پس با سیسوگ همراه باشید که هم نحوه کار با کامپایلر SDCC را بیاموزید هم این که چطور از Makefile در کامپایل پروژه ها استفاده کنیم.

گام اول نصب کامپایلر SDCC

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

همونطور که اطلاع دارید نصب نرم افزار کار سختی نداره و فقط کافیه چند تا Next بزنید و در آخر Finish مثل همه نصب های دیگه کامپایلر SDCC نیز هیچ چیز اضافه ای برای نصب نداره.

برای اطمینان از نصب صحیح کامپایلر SDCC خط فرمان رو باز کنید و دستور زیر رو داخل آن وارد کنید :

و باید خروجی زیر رو دریافت کنید:

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

نصب و پیکربندی Eclipse :

ویرایشگر Eclipse

برای این که بتونیم برنامه های بلند رو با کمترین دردسر بنویسیم و مدیریت کنیم لازم داریم که از یک ویرایشگر حرفه ای استفاده کنیم ؛ ویرایشگرهای زیادی وجود دارند که میتونیم برنامه رو با اونها بنویسیم ، اما در این پست قصد داریم از Eclipse برای این منظور استفاده کنیم ! همانطور که قبلا هم گفتم Eclipse یکی از بهترین ابزار های برنامه نویسی است که به کمک IBM ایجاد شد و هم اکنون در زمره بهترین ادیتورها است.

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

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

بعد از نصب Eclipse لازمه که ابزار Make رو هم نصب کنید که آموزشش توی همون لینک هست با عنوان ” نصب ابزار های لینوکسی ” .

با نصب make در واقع سیکل نصب ابزار های لازم رو به اتمام رسوندیم و حالا لازمه که اولین برنامه خودمون رو بنویسیم !

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

makefile

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

اینجاست که ابزار make وارد میشه ؛ در واقع این ابزار برای خودکار سازی این فرایند طراحی و ساخته شده ؛ در یک نگاه کلی، make فقط برای کامپایل برنامه‌ها استفاده نمی‌شود. شما می‌توانید در هر کاری که در آن نیاز به بروزرسانی بعضی فایل‌ها متناسب با تغییر در فایل‌های دیگر است از make استفاده کنید.

روند انجام تمام جزئیات رو توی یه فایل ذخیره میکنیم که بهش makefile گفته میشه ؛ به زبان ساده تر در واقع makefile یه سری دستور العمل است که برای داشتن خروجی لازمه که انجام بشه ؛ و ابزار make اون دستور ها رو پشت سر هم اجرا میکنه !

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

اگر علاقه مندید در خصوص نوشتن makefile مهارت کسب کنید این لینک را مطالعه کنید.

ساخت اولین برنامه برای STM8 با استفاده از SDCC :

اولین قدم برای ایجاد اولین برنامه ساخت پروژه است ؛ برای این کار از گزینه File در Eclipse  زیر منوی New را انتخاب کنید و گزینه C Project را انتخاب کنید.

ایجاد پروژه C برای STM8 در Eclipse

 

بعد از انتخاب C Project پنجره ای ظاهر می شود که باید در آن نام و  نوع پروژه مورد نظر خود را انتخاب کنید. همانطور که مشخص است هر اسم دلخواهی را که دوست دارید انتخاب کنید و نوع پروژه را حتما باید از نوع Makefile انتخاب کنید.

دقت داشته باشد در نام پروژه از space استفاده نکنید و حتما فاصله ها را با ‘_’ (آندرلاین) پر کنید.

 

انتخاب پروژه Makefile در Eclipse

 

برای اضافه کردن makefile نیاز نیست کار خاصی انجام دهید ؛ تنها کافیه بر روی اسم پروژه که به شکل یک پوشه نمایش داده میشه راست کلیک کنید و از گزینه New زیر منوی file را انتحاب کنید.

اضافه کردن makefile

 

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

انتخاب اسم یک فایل در eclipse

بعد از ساخت فایل makefile بر روی آن دابل کلیک کنید و محتوای زیر را در آن کپی کند :

در واقع محتوای فوق لیست کارهایی است که برای کامپایل پروژه لازم است انجام شود. حالا نوبت اضافه کردن main.c است ؛ برای این کار کافی است مطابق قبل بر روی نام پروژه راست کلیک کنید و گزینه new را انتخاب کنید اما این بار گزینه Source File را انتخاب کنید .

 

 

و در قسمت انتخاب نام main.c را بنویسید ؛

دقت داشته باشید همه نام را با حروف کوچک انتخاب کنید تا مشکلی برای کامپابل پیش نیاید

حالا درون فایل main.c کد زیر را وارد کنید

 

برای اضافه کردن کتابخانه های STM8 به پروژه ابتدا فایل StdPeriphLib را دانلود کرده و از حالت فشرده خارج کنید ؛ بر روی پوشه StdPeriphLib کلیک کرده رو آن را کپی کنید سپس بر روی نام پروژه در Eclipse راست کلیک کنید و از منوی ظاهر شده گزینه Paste را انتخاب کنید ؛ با این کار پوشه به پروژه اضافه خواهد شد ؛ و در نهایت تصویری مطابق تصویر زیر خواهید داشت :

 

 

🙂 واقعا کی فکرشو میکرد اضافه کردن کتابخانه به Eclipse اینقدر ساده باشه ؟! حالا نوبت اضافه کردن مسیر کتابخانه های استاندارد هستش برای این کار بر روی پروژه راست کلیک کنید و گزینه properties را انتخاب کنید ؛ در پنجره ظاهر شده منوی C/C++General را باز کنید و زیر گزینه Preprocessor Include path را انتخاب کنید سپس گزینه GNU C و بر روی CDT User Setting Entries کلیک کنید و سپس دکمه Add را بزنید.

 

 

اگر SDCC را در مسیر پیشفرض خود نصب کرده باشید ؛ آدرس کتابخانه های آن به شکل زیر خواهند بود :

در پنجره باز شده ؛ مطابق عکس زیر تنظیمات را انجام دهید و کلید Ok را بزنید !

تعین مسیر کامپایلر SDCC

 

حالا همه چی برای کامپایل آماده است و تنها کافی است برای کامپایل پروژه کلید ctrl+B را بزنید ؛ در قسمت پایین Eclipse احتمالا پیام های زیر به نمایش در می‌آیند که نشان از کامپایل شدن پروژه دارند.

و اگر خطایی مشاهده نکردید یعنی تمام قسمت ها به درستی انجام شده اند و فایل خروجی ایجاد شده است.

 

فایل خروجی کجاست ؟

اما فایل خروجی با چه فرمتی و در کجا ایجاد می شود ؛ بعد از کامپایل پروژه پوشه bin به لیست پوشه های پروژه اضافه خواهد شد ؛ که فایل خروجی با فرمت hex در این پوشه قرار دارد و به سادگی با راست کلیک بر روی آن می توانید آن را کپی کنید.

 

اگر نمیدونید چطور میشه میکروکنترلر stm8 را برنامه ریزی کرد ؛ قسمت ششم آموزش میکروکنترلر STM8 را مطالعه کنید.

 

حمایت از Zeus ‌

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

1 نفر

پــــســنــدیـده انـد

توجه

Zeus ‌
Zeus ‌

زئوس هستم ساکن المپ

دیدگاه ها

84 دیدگاه

  • kook65247
    ۱۷ مرداد ۱۴۰۰

    سلام
    لطفا راه اندازی eclipse و SDCC رو توی لینوکس (من از ubuntu استفاده میکنم) آموزش بدین خیلی سعی کردم اما نتونستم.
    یا راه دیگه ای که بشه توی لینوکس برای stm8 ها برنامه نویسی کرد.
    تنها راهی که دیدم از طریق نصب SDCC توی ترمینال و برنامه نویسی توی خود ترمینال بود که برای پروژه های بزرگتر خیلی سخت و خسته کننده میشه.
    ممنون

    • Zeus ‌
      Zeus ‌
      ۲ مرداد ۱۴۰۱

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

    • Sisoog Os
      Sisoog Os
      ۱۷ اردیبهشت ۱۴۰۰

      بله قبلا هم دیده بودم
      و متاسفانه حاضر نبوده لینک منبع بزاره

  • مهدی
    ۲۷ فروردین ۱۴۰۰

    سلام
    ممنون جناب zeus برای آموزش خوبتون
    من آخرش نتونستم با eclips کار کنم و مجبور شدم برم سراغ codeblocks
    الان به کمک فایل spl که شما زحمت کشیدین بزارین تونستم کار کنم هم با 103k3 و هم با 105k4
    الان دو تا مشکل هست
    اول اینکه با توجه به اینکه ورژن spl شما 2.2.0 هست میخوام با کمک فایل patch که تو گیت هاب هست spl ورژن 2.3.0 رو اماده کار با sdcc کنم که هر چقدر تلاش کردم تو اوبونتو آخرش نتونستم این کار رو بکنم اگه ممکنه آموزش این کار رو بفرمایید یا خودتون زحمت patch کردن رو بکشین
    دوم اینکه در مقایسه با iar و cosmic (البته در cosmic بعد از تغییرات در نوع ذخیره سازی توابع) حجم کد خروجی sdcc بشدت بیشتره من همه فلگهای لازمه رو هم فعال میکنم ولی مثلا یه کد در iar یا cosmic برای 105k4 کمتر از 16 کیلو میشه ولی همون کد در sdcc به حدی بیشتر میشه که دیگه رو میکرو جا نمیشه و باید برم سراغ 105k6 آیا نکته خاصی برای کاهش حجم کد وجود داره؟
    با تشکر

    • Zeus ‌
      zeus
      ۵ خرداد ۱۴۰۰

      سلام دوست عزیز خواهش میکنم
      والا من خودم با این خانواده از میکروکنترلر چندان کار نکردم هر چند با قیمت های اخیر به نظر میرسه استفاده ازش اجتناب ناپذیر میشه
      در مورد پچ کردن دقیقا چطور عمل می کنید و چه اتفاقی می افته که میگید نمیشه ؟ یعنی خطا میده موقع پچ کردن یا اتفاق دیگه ای می افته ؟
      در مورد حجم کد خروجی فکر میکنم باید دنبال کلیدی بگردید که به لینکر بگه توابعی که مورد استفاده قرار نگرفته اند رو حذف کنه به شکل پیش فرض فعال نیست و همین باعث میشه حجم کد خیلی زیاد بشه

  • معدی
    ۲۷ فروردین ۱۴۰۰

    سلام ممنون از آموزش خوبتون
    فقط اگه امکانش هست نحوه patch کردن نسخه ۲.۳ spl رو راهنمایی بکنید تو اوبوتو
    چون به لینوکس آشنایی ندارم
    با تشکر

    • Zeus ‌
      zeus
      ۵ خرداد ۱۴۰۰

      سلام دوست عزیز
      تاحالا خودم هم انجامش ندادم کاملا

  • مهدی
    ۲۹ شهریور ۱۳۹۹

    سلام خسته نباشید
    بنده کد رو اجرا کردم، تمام مراحل رو هم درست انجام دادم، اما با این خطا مواجه شدم.
    Error: Program “make” not found in PATH

  • رضا
    ۲۶ مرداد ۱۳۹۹

    سلام – سیمولاتورش را چطوری میشه فعال کرد.

    • Zeus ‌
      زئوس Zeus
      ۲۷ مرداد ۱۳۹۹

      تا حالا فعال نکردم ولی فکر میکنم قابلیت دیباک با gdb داشته باشه 🙂

  • حسین
    ۳۰ تیر ۱۳۹۹

    سلام .
    سپاس بابت مطالب بسیار خوبتون.
    این مطلب خیلی به دردم خورد . حتی همین مراحل رو من برای avr ( با میک فایل مخصوص AVR ) در یک نرم افزاری به اسم True studio ( که ide اون اکلیپس هست ) انجام دادم و به خوبی کار کرد .برای stm8 با میک فایل شما موفق نشدم چون خطا میداد . یک میک دیگه استفاده کردم و مسیر ها رو بهش اضافه کردم.به خوبی کمپایل شد .
    اما الان بعد از مدتی که دوباره پروژه رو کمپایل میکنم یک خطای make میده .
    make: *** [StdPeriphLib/src/stm8s_clk.rel] Error 2
    چند ماه پیش این مشکل رو نداشت .
    با خود اکلیپس ( نسخه مارس 2) امتحان کردم باز هم همین مشکل وجود داشت .
    ممکنه از تنظیمات باشه ؟ راه حلش چیه ؟
    در یکی از کامنتها نوشته بود علتش ویروس هست . آیا صحت داره ؟
    من روی سیستمم نود32 لایسنس دار هست چیزی نشون نمیده.
    سپاس .

    • Zeus ‌
      زئوس Zeus
      ۳۱ مرداد ۱۳۹۹

      فکر میکنم کتابخانه های st توی آپ دیت های جدیدش یه چیزی رو تغییر داده که با این کامپایلر هم خوان نیست
      و باید پچش کرد تا هوخوان بشه – احتمالا در موردش باید یه مقاله بنویسم
      از نسخه قدیمی کتابخانه استفاده کنید.

  • محمدرضا
    ۷ فروردین ۱۳۹۹

    سلام مجدد وقتی از توابعgpio استفاده کردم بدون هیچ مشکلی برنامه کار میکنه اما وقتی تو برنامه اصلی میخوام از وقفه ها استفاده کنم به توابع ارور میده و کامپایل نمیشه مثلا به توابع زیر:
    EXTI_SetExtIntSensitivity(GPIOA, EXTI_SENSITIVITY_FALL_ONLY);
    حتی به makefile دستور $(SDIR)/stm8s_exti.c \ رو هم اضافه کردم اما مشکل حل نشد
    ارور زیر رو میده
    make: *** [Makefile:55: main] Error 1
    error 78: incompatible types

  • محمدرضا
    ۷ فروردین ۱۳۹۹

    سلام من همین کار رو برروی نرم افزارstm32cube ide انجام دادم که با makefile وsplشما بدون مشکل بود اما با splسال 2017موفق نشدم که خروجی بگیرم و یک ارور داد
    make: *** No rule to make target ‘StdPeriphLib/src/stm8s_clk.rel’, needed by ‘main’. Stop.
    میک فایل های متعددی هم تست کردم اما همچنان ارور میداد.
    نکته دوم اینکه چجوری از داخل خود نرم افزار برایstm8 دیباگ و پروگرام رو انجام بدیم ..ممنونم

    • Zeus ‌
      زئوس Zeus
      ۹ فروردین ۱۳۹۹

      ممنون برای اطلاعاتتون :))
      والا تا حالا انجامش ندادم ولی فکر میکنم با مقداری سرچ بتونید این کار رو انجام بدید.

  • mado_rody
    ۱۷ آذر ۱۳۹۸

    دوستان یک تجربه برای کسانی که تو ویندوز با کامپایلر sdcc و eclipse کار میکنند .علت یکی از خطاهای make ,البته بعد از اینکه متوجه شدین همه چی مرتبه . ویروس read only است.چون make در حین کامپایل پوشه میسازه و پوشه های شما read only است make به مشکل میخوره.
    و راه چاره هم استفاده از لینوکس است.البته میتونید تو ویندوز با cygwin ایکلیپس رو بالا بیارید.که جواب میده.

    • حسین
      ۳۰ تیر ۱۳۹۹

      سلام .
      من روی سیستمم نود32 با لایسنس معتبر دارم . ویروس شناسایی نمیکنه . چطور میشه این ویروس رو شناسایی کرد ؟
      چط.ر میشه از بین بردش؟
      سپاس.

      • Zeus ‌
        زئوس Zeus
        ۳۰ تیر ۱۳۹۹

        فکر نمیکنم مشکل از ویروس باشه !‌احتمالا جایی داره چیز دیگه ای مساله ایجاد میکنه – از متن خطا میتونید متوجه بشید.

        • حسین
          ۳۱ تیر ۱۳۹۹

          سلام زئوس گرامی .
          راستش من توی یک کامنت ماجرا را کامل توضیح دادم ولی ظاهرا نمایش داده نشده !!!!
          خلاصه ماجرا اینه که قبلا( چند ماه پیش) بدون مشکل کمپایل کردم و فایل هگز تولید شد . و الان دوباره همون پروژه رو باز کردم و بدون اینکه تغییری بدم فقط دوباره کمپایل کردم و این خطا رو میده
          make: *** [StdPeriphLib/src/stm8s_clk.rel] Error 2 و فایل stm8s_clk.c هم توی پروژه هستش .
          ظاهرا خطا توی میکفایل ایجاده شده ولی من اصلا میک رو تغییری ندادم !!!!!! همانطور که قبلا گفتم فقط دوباره کمپایل کردم. طبق فرمایش شما هم ک ویروس نیست !!

          لطفا اگر ممکن هست یک مقدار توضیح بدید ؟
          سپاسگزارم .

          • Zeus ‌
            زئوس Zeus
            ۲ مرداد ۱۳۹۹

            فکر کنم لازمه در این خصوص به مقاله دیگه بنویسم – ظاهرا دوستان زیادی با این مساله مشکل دارند 😐

            0
        • حسین
          ۲ مرداد ۱۳۹۹

          سپاس لطف دارید .
          شاید تنها کاری که انجام دادن این بود که طبق قسمت چهارم مطلب ” برنامه نویسی رزبری پای بدون سیستم عامل ” اکلیپس و اون ابزار لینوکسی رو نصب کردم !!!!
          حالا نمیدونم میتونه ربط داشته باشه یا نه !

          • Zeus ‌
            زئوس Zeus
            ۳۱ مرداد ۱۳۹۹

            نه فکر نمیکنم ربطی داشته باشه

            0
        • حسین
          ۱۱ مرداد ۱۳۹۹

          سلام .
          بعد از کمپایل خطا میده و پوشه bin به حالت read only در میاد .
          من چند بار دستی از اینحالت خارجش کردم ولی دوبار به حالت read only میره .
          این که طبیعی نیست درسته ؟

          • Zeus ‌
            زئوس Zeus
            ۱۸ شهریور ۱۳۹۹

            سلام – آیا این فقط خواندنی شدن مشکل ایجاد میکنه به نحوی که دوباره نمیشه برنامه رو کامپایل کرد ؟ بله غیر طبیعی میشه ولی اگه میشه مجددا کامپایل کرد مشکلی نیست و منطقیه
            من نمیدونم این مساله چه مشکلی برای شما پیش آورده که بتونم در مورد مشکل بودن یا نبودنش نظر بدم.

            0
        • حسین
          ۱۹ آبان ۱۳۹۹

          با سلام زئوس گرامی .
          ظاهرا مشکل از ویروس ویندوز نیست من روی لینوکس عم تست کردم مشکل داشت .
          در مورد readonly :
          با mkdir از طریق خط فرمان windows7 یک پوشه درست کردم که ون هم readonly بود ولی داخلش یک فایل وورد ایجاد کردم .
          احتمالا مشکل از جای دیگه است و به ویروس و این چیزا ربط نداره .
          شما به نتیجه ای نرسیدی؟

    • حسین
      ۲۲ شهریور ۱۳۹۹

      سلام .
      دقیقا مشکل اینجاست که چون read only میشه . فایل هگز کمپایل شده نمیتونه درون پوشه bin قرار بگیر .
      من چند بار از حالت فقط خواندنی خارجش کردم ولی انگار موقع کمپایل کردن read only میشه !!!!.

  • mado_rody
    ۱۷ آذر ۱۳۹۸

    سلام موقع استفاده از SDCC.
    void timer1_CAP_isr(void) __interrupt(12) {
    نمیتونم از اینتراپت استفاده کنم.خطای :
    Unused declaration of function ‘timer1_CAP_isr’
    رو گزارش میکنه.
    البته تو فایل stm8s_it.c,stm8s_it.h هم همین مشکل رو دارم.

    • Zeus ‌
      زئوس Zeus
      ۲۰ آذر ۱۳۹۸

      سلام فکر میکنم خطا مربوط به این باشه که تابع روتین که فراخوانی کردید تعریف نشده !!

  • hessam
    ۱۰ آذر ۱۳۹۸

    سلام
    من خطای زیر رو دریافت میکنم:

    15:23:25 **** Incremental Build of configuration Default for project stm8_test ****
    make all
    makefile:55: *** missing separator. Stop.
    “make all” terminated with exit code 2. Build might be incomplete.

    15:23:25 Build Failed. 1 errors, 0 warnings. (took 118ms)
    ———————————————————–
    چندین بار همه فایل رو کپی کردم ولی مشکلم بر طرف نشد.
    اینم فایل های داخل makfile:

    # Makefile for STM8 with SDCC compiler
    # Author: Zeus
    # Website: sisoog.com
    # 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."

    • Zeus ‌
      زئوس Zeus
      ۱۱ آذر ۱۳۹۸

      سلام دوست عزیز
      خطا داره میگه که ظاهرا توی خط ۵۵ میکفایل سپریتور اشتباه شده – احتمالا موقع کپی مشکلی پیش اومده چک کنید.

  • محمود
    ۲۴ آبان ۱۳۹۸

    با تشکر از تلاش شما. بنده هنوز وقت نکردم ihx رو روی stm8s بریزم چون برد شرکته اما نکته ای توجه منو جلب کرد. محتوی hex فایل تولید شده بسیار بیشتر از فرمت موتورلا s19 هست و حتی پس از لود کرد فایل جهت فلش میکرو توسط st visual programmer محتویات متفاوت بود. بنده فلگ –out-fmt-ihx رو به –out-fmt-s19 تغییر دادم اما باز هم نتونستم خروجی مشابه فایل s19 نرم افزار cosmic بگیرم. با توجه به رایگان بودن cosmic فقط برای یکسال نمیخام از از این کامپایلر استفاده کنم. تجربیات شما رو میخاستم بدونم که آیا Makefile ای هست که فرمت s19 مشابه cosmic کم حجم تولید کنه؟ البته از srec هم استفاده کردم اما S19 تولید شده متفاوت بود که نشون میده خود کامپایلر هست که متفاوته!

    • Zeus ‌
      زئوس Zeus
      ۳ آذر ۱۳۹۸

      سلام دوست عزیز
      فایل ihx در واقع فرمت hex اینتل رو داره و توی هر سطر از آدرس دهی دارای آدرسی و چک سام هست و البته دیتاها رو به شکل استرینگ ذخیره میکنه برای همین حجمش نسبت به فایل های باینری نظیر s19 موتورولا بیشتر ولی این بدان معنی نیست که حجم بیشتری رو روی فلش میکروکنترلر خواهد گرفت 😐
      در نهایت هنگام پروگرام کردن تبدیل به فرمت باینری میشه – فرمت هگز برای جابجایی از کامپیوتر به کامپیوتر دیگر خیلی بهتره چون چک سام داره
      و این که نمیشه انتظار داشت خروجی دو کامپایلر متفاوت مثل هم باشه چرا که الگورتیم های متفاوتی رو احتمالا رعایت میکنند
      طلق مستندات sdcc برای گرفتن خروجی s19 باید دستور –out-fmt-s19 رو اضافه کنید و همین کفایت میکنه – اگر نمیشه باید خطایی بده بهتون – اون خطا چیه ؟

      • محمود
        ۸ آذر ۱۳۹۸

        ممنون دوست عزیز. منظورم از حجم کد نه خود فایل بود. فایلی که توسط پروگرامر لود میشه تو محیطش بود.درواقع ihx و s19 فرمت ذخیره سازیشون فرق میکنه اما پس از لود تو محیط پراگرمر باید محتویات یکسان نشون داده بشه که محل ذخیره داده در حافظه فلشه. منم همون قسمت خروجی که گفتین رو قبلا اضافه کرده بودم طبق یوزرمنوال sdcc اما باز دو فرمت s19 در sdcc و cosmic فرق میکرد.یه مشکلی که دارم اینکه نمیدونم چطور تعریف کنم که کد اسمبلی رو کامپایل کنه. Cosmic راحت انجام میده اما تو eclipse تو قسمت کامپایلرها فکر کنم باید اضافه شه که بتونه انجام بده

        • Zeus ‌
          زئوس Zeus
          ۹ آذر ۱۳۹۸

          بله خوب الان متوجه منظورتون شدم – این خیلی طبیعی است که خروجی دو کامپایلر متفاوت برای کامپایل یک کد خاص متفاوت باشه چون کامپایلرها ساختار های متفاوتی دارند و استاندارد های متفاوتی رو رعایت میکنند پس نمیشه انتظار داشت که خروجی یکسانی رو ببینید اصلا خوب و بد بودن یک کامپایلر به همین موارد هست دیگه
          اگه توی makefile اسمبلی رو تعریف کرده باشید موقع کامپایل انجام میشه ربطی به eclipse نداره :/

          • محمود
            ۱۱ آذر ۱۳۹۸

            قطعا همینطوره. البته کامپایلم کردم اما ریختم stm8 کار نکرد. برای led کار میکرد عالی نمیدونم چرا سورس اصلیم با کامپایل eclipse و کامپایلر sdcc کارنکرد. فقط nrf و سنسور دما و سریال بوده هر چند خودش سه پروتکله واچداگ و… هم هست! باید کمی کار کنم روش ببینم کجا گیر کرده! اما دمتون گرم! از این کارا بازم کنید و آموزش بزارید عالیه! نمونه انگلیسی هم هست اما خوب اینجا خیلی خوب شده

            0
          • Zeus ‌
            زئوس Zeus
            ۱۳ آذر ۱۳۹۸

            خواهش میکنم
            امیدوارم بتونید زودتر مشکل رو پیدا کنید.

            0
  • رضا
    ۲۸ شهریور ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۳۱ شهریور ۱۳۹۸

      سلام دوست گرامی
      sdcc رو هم به دانلود سنتر اظافه میکنیم انشالله

  • Winiston ZZZ
    Winiston ZZZ
    ۲۲ تیر ۱۳۹۸

    سلام
    موقع بیلد کردن با این اخطار مواجه میشوم:
    make: *** No rule to make target ‘StdPeriphLib/src/stm8s_clk.rel’, needed by ‘main’. Stop.

    • Zeus ‌
      زئوس Zeus
      ۲۳ تیر ۱۳۹۸

      احتمالا make مشکل داره ؛ برای جواب کاملتر محتوای makefile و لیست کامل خطا رو ارسال کنید.

      • Winiston ZZZ
        Winiston ZZZ
        ۲۷ تیر ۱۳۹۸

        با کتاب خانه های جدید تست کردم ، متاسفانه مثل این که دیگه از کامپایلر SDCC ساپورت نمیکنه .

        • Zeus ‌
          زئوس Zeus
          ۲۹ تیر ۱۳۹۸

          امم بعید میدونم واقعا اینطور باشه احتمالا تنظیمات خاصی لازم داشته باشه
          میشه بگید از چه کتابخونه هایی استفاده کردید که منم تست کنم !

          • Winiston ZZZ
            Winiston ZZZ
            ۳۰ تیر ۱۳۹۸

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

            0
          • Zeus ‌
            زئوس Zeus
            ۳۰ تیر ۱۳۹۸

            خوب اینجا هم از کتابخونه های خود شرکت استفاده کردیم 😐
            البته از سری SPL استفاده کردیم

            0
          • Winiston ZZZ
            Winiston ZZZ
            ۴ مرداد ۱۳۹۸

            حاجی اینی که شما گذاشتید ماله 2014 هست . الان از سایت st بری ماله 2017 رو بهت میده

            0
          • Zeus ‌
            زئوس Zeus
            ۷ مرداد ۱۳۹۸

            خوب بله درست می فرمایید کتابخونه مورد استفاده ما قدیمی است ؛ سعی میکنم یا کتابخونه جدید هم یه تستی بزنم ببینم چند چند میشه قضیه
            متشکر برای پیگیری

            0
    • محمدرضا
      ۷ فروردین ۱۳۹۹

      منم همین مشکل رو دارم محبت میکنید اگر حل شده راه حلشو بگید

  • MSAD
    ۲۹ خرداد ۱۳۹۸

    سلام با تشکر فراوان و خسته نباشید به خاطر آموزشی کامل و جامع تان و وقت و زمانی که بابت تولید این محتوا به زبان فارسی گذاشتید
    بنده مراحل را دقیقا طبق همین محتوا انجام میدهم اما با خطای زیر در کامپایل برنامه مواجه میشوم
    make all
    makefile:55: *** missing separator. Stop.
    16:25:13 Build Finished took 393ms
    ایرادی که میگرد دقیقا از این خط 55 برنامه make file است که کد آن را از همین جا برداشتم خط روبه رو –> @$(MKDIR) -p $(ODIR)
    برنامه MAKE FILE را به درستی از طریق از آموزش دیگر شما” برنامه‌نویسی با رزبری پای بدون سیستم‌عامل ” نصب کردم و در کامند ویندوز ورژن آن را طبق آموزش تست کردم و آدرس دهی لازم را در propertis my computer انجام دادم
    یک روز باهاش ور رفتم تو وبسایت های خارجی نوشته مشکل از کد make file است و باید MAKE FILE را تغیر داد که درست شود اما MAKE FILE شما که مطمینا درست است پس مشکل چیست !؟! MAKEFILE های دیگر را هم در اینترنت پیدا کردم و جایگزین آن کردم خطا های دیگری داد لطفا راهنمایی فرمایید
    با تشکر

    • Zeus ‌
      زئوس Zeus
      ۱۶ تیر ۱۳۹۸

      سلام و درود
      ببخشید که دیر دارم جواب میدم ؛ احتمالا توی کپی کردن کارکتری جابجا شده
      امکانش هست که makefile مورد استفاده رو جایی آپلود کنید تا من هم با میک فایل شما تست بگیرم ببینم مشکل از کجاست.

      • MSAD
        ۱۶ تیر ۱۳۹۸

        سلام زئوس جانم
        سر شما خیلی شلوغه همین که پاسخ دادید خیلی لطف کردید ، خیلی محبت کردید .
        چند روز منتظر جواب بودم بعد چون هر کاری میکردم درست نمیشد همه برنامه ها را پاک کردم.
        بنده stm8 در محیط توسعه نرم افزاری IAR برنامه نویسی میکنم که فقط با بخش debuger آن مشکل دارم که ضعیفه و به درد نخور .
        کامپایلر SDVD خود شرکت ST هم تست کردم دنگ و فنگ داشت . همچنین محیط debuger آن که گفته میشد گرافیکیه ، به نظرم تفاوت چندانی نداشت .
        دیباگر کامپایلر “IDE ، “eclipse , sdcc “متن باز” که شما معرفی کردید چطوره ، آیا اصلا دیباگر داره ?!? اگر هم داره آیا به قدرت محیط توسعه مجتمع keil u vision هست !؟!

        • Zeus ‌
          زئوس Zeus
          ۲۳ تیر ۱۳۹۸

          سلام دوست عزیز ؛ باید ببخشید برای تاخیر های پیش اومده ؛ واقعا یک سر و هزار سودا !!!
          Eclipse که به نظرم بی نظیره هم توی دیباگ کردن و هم توی محیط ادیتوری ! ولی این که تا چه اندازه با sdcc بشه دیباگ کرد رو اطلاع ندارم متاسفانه که احتمالا یه تست میگیرم این موضوع رو و اگر نتیجه رضایت بخش بود در موردش پست می نویسیم

  • مصطفی
    ۲۵ خرداد ۱۳۹۸

    یک نکته هم اینه که فایل stm8.h با حروف کوچک هست و تو کد نمونه شما با حروف بزرگ اینکود شده.
    و یک سوال: چرا st کتابخونه های stdperiph را از سایتش برداشته؟

    • Zeus ‌
      زئوس Zeus
      ۲۶ خرداد ۱۳۹۸

      فکر کنم احتمالا شاید مثل سری stm32 کتابخونه جدید براش عرضه کرده !
      + متشکر برای این نکته توی پست اصلاحش میکنیم.

  • مصطفی
    ۲۳ خرداد ۱۳۹۸

    با سلام و تشکر بابت اینکه برای استفاده از اکلیپس اون هم STM8 و اونم sdcc مطلب میذارید.
    بنده تو ابونتو اکلیپس cdt ورژن ۲۰۱۸ را دارم و مراحلی که فرمودید را انجام دادم ولی نمیدونم داخل main یا همین for که مثال زدین متغیر نمیشه تعریف کرد و فقط درصورتی که قبل از main متغیر را تعریف کنم ارور نمیده. در صورت تعریف محلی این اتفاق میفته:
    syntax error: token -> ‘uint8_t’ ; column 7
    make: *** [main] Error 1
    makefile:55: recipe for target ‘main’ failed

    • مصطفی
      ۲۳ خرداد ۱۳۹۸

      یافتم. تعریف متغیر درون حلقه در استاندارد C99 امکان پذیره. مشکل از نسخه sdcc بنده بود که از مخازن ابونتو نصب کرده بودم (آخرین نسخه ۳.۵ بود!) در نسخه ۳.۵ استاندارد C99 هنوز کامل نبوده و از نسخه ۳.۷ به بعد این امر امکان پذیر شده. از sf نسخه ۳.۹ را دانلود و نصبیدم مشکل حل شد.

      • Zeus ‌
        زئوس Zeus
        ۲۵ خرداد ۱۳۹۸

        بسیار عالی 🙂
        خوشحالم که مشکل حل شد.

    • Zeus ‌
      زئوس Zeus
      ۲۵ خرداد ۱۳۹۸

      میشه اون تیکه از برنامه رو بذارید که خطا رو داره ایجاد میکنه !
      البته فکر میکنم کتابخونه stdint.h رو include نکرده باشید.

  • SHamid Szolfagari
    SHamid Szolfagari
    ۱۴ خرداد ۱۳۹۸

    باسلام
    پس بهترین راه کدنویسی برای stm8 ، استفاده از ecilipse هستش؟

    • Zeus ‌
      زئوس Zeus
      ۲۰ خرداد ۱۳۹۸

      واقعا بهترین برای آدم های متفاوت متفاوت خواهد بود ؛ به سیلیقه من که شاید به Eclipse عادت دارم بهترین سلوشن استفاده از eclipse هست
      ولی فکر میکنم بهترین کامپایلری که میشه برای stm8 پیدا کرد همین sdcc باشه !
      مگه این که چیز جدیدی اومده باشه

      • Winiston ZZZ
        Winiston ZZZ
        ۲۵ خرداد ۱۳۹۸

        باسلام
        به نظر شما حجم کد استخراج شده در برای stm8 با این روش بهینه هست ؟ چون به عنوان مثال یک پروژه led چشمک زن با atmelstudio برای به فرض atmga8a حدودا 300 بایت بیشتر حجم نمیگیره ولی همین روال برای stm8 سه کیلو بایت هست .

        • Zeus ‌
          زئوس Zeus
          ۲۵ خرداد ۱۳۹۸

          سلام ؛ قائدتا حجم زیادی هست برای این کد و گمان میکنم به این دلیله که از کتابخانه های خود st استفاده کردید
          از رجیستر استفاده کنید احتمالا حجم بمراتب کمتر خواهد شد.

  • مهدی
    ۱۱ خرداد ۱۳۹۸

    سلام و تشکر
    شما گفتید که از ورژن 3.8.0 استفاده کنیم. الان که من دانلود کردم آخرین ورژن رو 3.9.0 هست. آیا منظور شما به طور خاص ورژن 3.8.0 هست یا اینکه ورژن 3.8.0 به بعد؟
    تشکر

    • Zeus ‌
      زئوس Zeus
      ۲۰ خرداد ۱۳۹۸

      نه لذوما ، میخواستم بگم که من از کدوم ورژن استفاده کردم ولی فکر نمیکنم ورژن های بالاتر هم مشکلی داشته باشند ؛ ممکنه ورژن های پایین تر مشکل ایجاد کنه ولی بالاتر معمولا مشکلی نداره

  • a
    ۲۳ اسفند ۱۳۹۷

    درود برشما
    تشکر برای پاسختان.

    این خطا گرفته میشه . چگونه باید حل کرد؟

    10:58:58 **** Incremental Build of configuration Default for project me ****
    make all
    Cannot run program “make”: Launching failed

    Error: Program “make” not found in PATH
    PATH=[C:/Program Files/Java/jre1.8.0_201/bin/server;C:/Program Files/Java/jre1.8.0_201/bin;C:/Program Files/Java/jre1.8.0_201/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\SDCC\bin;C:\Users\aa\Desktop\eclipse-cpp-2018-12-R-win32-x86_64\eclipse]

    10:58:58 Build Failed. 1 errors, 0 warnings. (took 63ms)

    جاوا برای کار دیگر مشکلی هم ندارد.

    • Zeus ‌
      زئوس Zeus
      ۲۳ اسفند ۱۳۹۷

      خوب اول این که دارید از ایکیپس استفاده میکنید ؟
      داره میگه make رو پیدا نمیکنم ، برای ویندوز باید تولز make رو نصب کنید ؛
      برای این کار اول در مقاله “آموزش برنامه‌نویسی با رزبری پای بدون” قسمت “نصب ابزار های لینوکسی” رو انجام بدید احتمالا مشکل حل میشه

      • Winiston ZZZ
        Winiston ZZZ
        ۱۵ خرداد ۱۳۹۸

        سلام
        موقع کامپایل شدن این ارور رو داد : 12:07:10 **** Incremental Build of configuration Default for project Stm8_blink ****
        make all
        makefile:55: *** missing separator. Stop.
        “make all” terminated with exit code 2. Build might be incomplete.

        12:07:10 Build Failed. 1 errors, 0 warnings. (took 316ms)

        ————————————————————————————————————
        خطوط ارورش هم همون هایی هست که کپی پیست کردم یعنی makefile

        • Zeus ‌
          زئوس Zeus
          ۲۰ خرداد ۱۳۹۸

          آیا توی میک فایل تغییر دادید ؟
          makefile خودتون رو قرار بدید – جایی پیست کنید و لینکش رو قرار بدید

          • Winiston ZZZ
            Winiston ZZZ
            ۲۰ خرداد ۱۳۹۸

            مشکل از بنده بود . حل شد .
            خیلی ممنون

            0
          • Zeus ‌
            زئوس Zeus
            ۲۲ خرداد ۱۳۹۸

            خواهش میکنم دوست عزیز
            خوشحالم که مشکلتون حل شده

            0
          • Winiston ZZZ
            Winiston ZZZ
            ۲۰ خرداد ۱۳۹۸

            فقط یک سوال :
            راهی هست که از اکلیپس مستقیم stlink رو راه بندازیم ؟

            0
          • Zeus ‌
            زئوس Zeus
            ۲۲ خرداد ۱۳۹۸

            بله راه حل وجود داره
            من از کامند لاین استفاده میکنم و یه بلید تارگت میسازم برای پروژه که با انتخابش میکرو پروگرام بشه 🙂

            0
  • a
    ۲۲ اسفند ۱۳۹۷

    با
    STVP و sdcc هم انجام داده اید؟

    • Zeus ‌
      زئوس Zeus
      ۲۳ اسفند ۱۳۹۷

      نه اینو انجام ندادم چون STVP اصلا ویرایشگر قابل قبولی نیست و ارزش وقت صرف کردن رو نداره اصلا

  • a
    ۲۲ اسفند ۱۳۹۷

    درود برشما

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

    • Zeus ‌
      زئوس Zeus
      ۲۳ اسفند ۱۳۹۷

      کدوم ورژن ایکلیپس مد نظرتونه اگر 2018 منظورتونه باید بگم آره مقداری جای منو ها عوض شده ولی عملکرد همونه و به سادگی میتونید استفاده کنید ازش

  • reza
    ۲۶ دی ۱۳۹۷

    به این میگن یه سایت فعال و خوب!
    برقرار باشید…..

    • Zeus ‌
      زئوس Zeus
      ۲۶ دی ۱۳۹۷

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

  • Amir
    ۲۵ دی ۱۳۹۷

    سلام
    خسته نباشید
    —————————————————————
    برای کار با STM8 ها مگه نمیشه از ویزارد CubeMX استفاده کرد؟؟ اون فقط برا 32 بیتی هاست ؟؟ تاحالا دقت نکرده بودم…
    —————————————————————
    سایت ST برا ما باز نمیشه ؟؟ واقعا ؟؟ خیلی وقته سر نزدم ….
    چه میکنه این تحریم ها !! به افتخارشون بزن زنگو !!!

    • Zeus ‌
      زئوس Zeus
      ۲۶ دی ۱۳۹۷

      سلام ؛ متشکرم
      خوب فکر میکنم نرم افزار مخصوص خودش رو داره ؛ stm8 Cube که از سایت St میتونید دانلود کنید
      منظور من sf بود نه st ؛ sf میشه sourceforge که ما رو تحریم کرده

      • mado_rody
        ۲۲ مرداد ۱۳۹۸

        سلام
        موقع کامپایل شدن این ارور رو داد :
        sdcc -c -IStdPeriphLib/inc -DUSE_STDPERIPH_DRIVER -mstm8 -Ddouble=float –std-c99 –nolospre –opt-code-size –out-fmt-ihx –debug -obin/StdPeriphLib/src/ StdPeriphLib/src/stm8s_clk.c
        makefile:62: recipe for target ‘StdPeriphLib/src/stm8s_clk.rel’ failed
        process_begin: CreateProcess(NULL, sdcc -c -IStdPeriphLib/inc -DUSE_STDPERIPH_DRIVER -mstm8 -Ddouble=float –std-c99 –nolospre –opt-code-size –out-fmt-ihx –debug -obin/StdPeriphLib/src/ StdPeriphLib/src/stm8s_clk.c, …) failed.
        make (e=2): The system cannot find the file specified.

        make: *** [StdPeriphLib/src/stm8s_clk.rel] Error 2

        • Zeus ‌
          زئوس Zeus
          ۲۶ مرداد ۱۳۹۸

          سلام
          در واقع کامپایلر داره میگه که فایل رو پیدا نکرده ؛ احتمالا آدرس دهی اشتباه بوده یا فایل مورد نظر در پوشه مربطه پیدا نشده
          داریم در مورد فایل StdPeriphLib/src/stm8s_clk.c صحبت میکنیم

          • mado_rody
            ۳ آذر ۱۳۹۸

            سلام .لطف میکنید تغییرات لازم برای خروجی hex رو دراین makefile اعمال کنید.
            ممنون.
            # STM8 device (default is STM8 discovery board)
            DEVICE=STM8S003
            DEVICE_FLASH=stm8s003f3

            TARGETNAME = dsds

            # trap handling requires SDCC >=v3.4.3
            SKIP_TRAPS = 0

            # set output folder and target name
            OUTPUT_DIR = ./build
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).elf

            # set project folder and files (all *.c)
            PRJ_ROOT = .
            PRJ_SRC_DIR = $(PRJ_ROOT)/Src
            PRJ_INC_DIR = $(PRJ_ROOT)/Inc
            # all project sources included by default
            PRJ_SOURCE = $(notdir $(wildcard $(PRJ_SRC_DIR)/*.c))
            PRJ_OBJECTS := $(addprefix $(OUTPUT_DIR)/, $(PRJ_SOURCE:.c=.rel))

            # set SPL paths
            DRIVER_DIR = ./STM8S_StdPeriph_Driver/
            SPL_INC_DIR = $(DRIVER_DIR)inc

            OBJLIB = $(PRJ_INC_DIR)/stm8s003.lib
            OBJLIBNDB = $(PRJ_INC_DIR)/stm8s003nodebug.lib

            # set compiler path & parameters
            CC = sdcc
            AR = sdar
            ifeq ($(NODEBUG), 1)
            CFLAGS =-mstm8 -l$(OBJLIBNDB) –out-fmt-ihx -DUSE_STDPERIPH_DRIVER –all-callee-saves –verbose –stack-auto –fverbose-asm –no-peep
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).ihx
            else
            CFLAGS =-mstm8 -l$(OBJLIB) –debug –out-fmt-elf -DUSE_STDPERIPH_DRIVER –all-callee-saves –verbose –stack-auto –fverbose-asm –no-peep
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).elf
            endif

            # collect all include folders
            INCLUDE = -I$(PRJ_INC_DIR) -I$(SPL_INC_DIR)

            # collect all source directories
            VPATH=$(PRJ_SRC_DIR):$(SPL_SRC_DIR)

            .PHONY: clean

            all: $(OBJLIB) $(TARGET)

            $(OUTPUT_DIR)/%.rel: %.c
            $(CC) $(CFLAGS) -D$(DEVICE) $(INCLUDE) -DSKIP_TRAPS=$(SKIP_TRAPS) -c $? -o $@

            $(TARGET): $(PRJ_OBJECTS)
            $(CC) $(CFLAGS) -o $(TARGET) $^

            flash: $(TARGET)
            stm8flash -c stlink -p $(DEVICE_FLASH) -s flash -w $(TARGET)

            $(OBJLIB):
            cd STM8S_StdPeriph_Driver/src/; \
            ./doit; \
            mv stm8s003.lib ../../Inc; \
            mv stm8s003nodebug.lib ../../Inc

            clean:
            rm $(OUTPUT_DIR)/*

            0
          • Zeus ‌
            زئوس Zeus
            ۴ آذر ۱۳۹۸

            احتمالا باید همچین چیزی باشه

            # STM8 device (default is STM8 discovery board)
            DEVICE=STM8S003
            DEVICE_FLASH=stm8s003f3

            TARGETNAME = dsds

            # trap handling requires SDCC >=v3.4.3
            SKIP_TRAPS = 0

            # set output folder and target name
            OUTPUT_DIR = ./build
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).elf

            # set project folder and files (all *.c)
            PRJ_ROOT = .
            PRJ_SRC_DIR = $(PRJ_ROOT)/Src
            PRJ_INC_DIR = $(PRJ_ROOT)/Inc
            # all project sources included by default
            PRJ_SOURCE = $(notdir $(wildcard $(PRJ_SRC_DIR)/*.c))
            PRJ_OBJECTS := $(addprefix $(OUTPUT_DIR)/, $(PRJ_SOURCE:.c=.rel))

            # set SPL paths
            DRIVER_DIR = ./STM8S_StdPeriph_Driver/
            SPL_INC_DIR = $(DRIVER_DIR)inc

            OBJLIB = $(PRJ_INC_DIR)/stm8s003.lib
            OBJLIBNDB = $(PRJ_INC_DIR)/stm8s003nodebug.lib

            # set compiler path & parameters
            CC = sdcc
            AR = sdar
            ifeq ($(NODEBUG), 1)
            CFLAGS =-mstm8 -l$(OBJLIBNDB) –out-fmt-s19 -DUSE_STDPERIPH_DRIVER –all-callee-saves –verbose –stack-auto –fverbose-asm –no-peep
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).s19
            else
            CFLAGS =-mstm8 -l$(OBJLIB) –debug –out-fmt-elf -DUSE_STDPERIPH_DRIVER –all-callee-saves –verbose –stack-auto –fverbose-asm –no-peep
            TARGET = $(OUTPUT_DIR)/$(TARGETNAME).elf
            endif

            # collect all include folders
            INCLUDE = -I$(PRJ_INC_DIR) -I$(SPL_INC_DIR)

            # collect all source directories
            VPATH=$(PRJ_SRC_DIR):$(SPL_SRC_DIR)

            .PHONY: clean

            all: $(OBJLIB) $(TARGET)

            $(OUTPUT_DIR)/%.rel: %.c
            $(CC) $(CFLAGS) -D$(DEVICE) $(INCLUDE) -DSKIP_TRAPS=$(SKIP_TRAPS) -c $? -o $@

            $(TARGET): $(PRJ_OBJECTS)
            $(CC) $(CFLAGS) -o $(TARGET) $^

            flash: $(TARGET)
            stm8flash -c stlink -p $(DEVICE_FLASH) -s flash -w $(TARGET)

            $(OBJLIB):
            cd STM8S_StdPeriph_Driver/src/; \
            ./doit; \
            mv stm8s003.lib ../../Inc; \
            mv stm8s003nodebug.lib ../../Inc

            clean:
            rm $(OUTPUT_DIR)/*

            0

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک