توصیه شده, معرفی, مقاله های سیسوگ, نرم افزار eclipse, نرم افزار های الکترونیک

چطور از کامپایلر 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 را مطالعه کنید.

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

  1. Avatar for علی علی گفت:

    سلام وقتتون بخیر
    من دنبال یه آموزش خوب برای یادگیری makefile هستم. لینک “اگر علاقه مندید در خصوص نوشتن makefile مهارت کسب کنید این لینک را مطالعه کنید.” ظاهرا کار نمیکنه. اگه ممکنه آدرسش رو بروز کنید یا یک منبع معرفی کنید. باتشکر

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز روزتون بخیر
      لینک رو به یک منبع خوب تغییر دادم 🙂
      متشکرم برای تذکر شما 🙂

  2. Avatar for حسین حسین گفت:

    با درود.
    سپاس بابت مطلالب خوبتان .
    3 تا سوال .
    1 – چطور میشه در کمپایلر sdcc توابع از نوع weak تعریف کرد ؟( ظاهرا __attribute _((weake)) رو نمیشناسه )
    2- توی کتابخانه spl که شما ارائه دادی دو فایل مربوط به وقفه ها وجود داره stm8s_itc.h و stm8s_it.h که دومی توی یه نسخه هایی نیستش.
    ماجرای این دومی چیه ؟
    3 – آیا راهی هست که روتتینهای وقفه هار و در جایی به غیر از فایل main.c نوشت ؟

  3. Avatar for kook65247 kook65247 گفت:

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

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  4. Avatar for عماد عماد گفت:

    طرف اش رو با جاش کپی کرده

    لینک حذف شده است.

    1. Avatar for Sisoog Os Sisoog Os گفت:

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

  5. Avatar for مهدی مهدی گفت:

    سلام
    ممنون جناب 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 آیا نکته خاصی برای کاهش حجم کد وجود داره؟
    با تشکر

    1. Avatar for zeus zeus گفت:

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

  6. Avatar for معدی معدی گفت:

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

    1. Avatar for zeus zeus گفت:

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

  7. Avatar for مهدی مهدی گفت:

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

  8. Avatar for رضا رضا گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  9. Avatar for حسین حسین گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for حسین حسین گفت:

        با درود برzeus عزیز .

        راستش بعد از مدتی دوبار با make فایل همین مطلب کمپایل کردم و بدون خطا کمپایل شد .
        منتها کد روی میکرو stm8105 کار نمیکنه . و حجمش هم زیاده حدود ۱۲۰۰ بایت .
        برای اطمینان منوال sdcc رو خوندم و فایلها رو دانه دانه با خط فرمان لینوکس کمپایل کردم و سوییچ های مربوط به شروع سگمنت کد و رم را هم وارد کردم کد هگز بدون مشکل تولید شد . ولی باز هم روی میکرو کار نکرد و حجمش هم حدود ۱۲۰۰ بایت شد .
        توی نت چرخیدم .و یک نمونه پروژه پیدا کردم که عالی کار کرد و حجم کد هگز هم ۲۵۰ بایت شد!!
        منتها اصلا نفهمیدم چی کار کرده و ضمنا از یک اسکریپت لینوکسی هم استفاده کرده .
        که من چون آشنا نیستم متوجه نشدم چیکار کرده !!
        لینک پروژه اینه :https://github.com/riktw/stm8s_makefile
        اگر ممکن هست یک نگاهی به بندازیدو راهنمایی بفرمایید .

        ۲− چطور میشه makefile رو در خ فرمان لینوکس اجرا کرد ؟
        س\اس.

  10. Avatar for محمدرضا محمدرضا گفت:

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

  11. Avatar for محمدرضا محمدرضا گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  12. Avatar for mado_rody mado_rody گفت:

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

    1. Avatar for حسین حسین گفت:

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

      1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

        1. Avatar for حسین حسین گفت:

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

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

          1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

        2. Avatar for حسین حسین گفت:

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

          1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

        3. Avatar for حسین حسین گفت:

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

          1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

        4. Avatar for حسین حسین گفت:

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

    2. Avatar for حسین حسین گفت:

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

  13. Avatar for mado_rody mado_rody گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  14. Avatar for hessam 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."

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  15. Avatar for محمود محمود گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for محمود محمود گفت:

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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          1. Avatar for محمود محمود گفت:

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

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  16. Avatar for رضا رضا گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  17. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          1. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          3. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

          4. Avatar for زئوس Zeus زئوس Zeus گفت:

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

    2. Avatar for محمدرضا محمدرضا گفت:

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

  18. Avatar for MSAD 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 های دیگر را هم در اینترنت پیدا کردم و جایگزین آن کردم خطا های دیگری داد لطفا راهنمایی فرمایید
    با تشکر

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for MSAD MSAD گفت:

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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  19. Avatar for مصطفی مصطفی گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  20. Avatar for مصطفی مصطفی گفت:

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

    1. Avatar for مصطفی مصطفی گفت:

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

      1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

    2. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  21. Avatar for SHamid Szolfagari SHamid Szolfagari گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  22. Avatar for مهدی مهدی گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  23. Avatar for a 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)

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for 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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          1. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          3. Avatar for Winiston ZZZ Winiston ZZZ گفت:

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

          4. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  24. Avatar for a a گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  25. Avatar for a a گفت:

    درود برشما

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  26. Avatar for reza reza گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  27. Avatar for Amir Amir گفت:

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

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for mado_rody 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

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

          1. Avatar for mado_rody 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)/*

          2. Avatar for زئوس 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)/*

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *