NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3564 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 9 از 9

موضوع: چطور میشه قسمتی از برنامه میکرو رو بصورت اسمبلی نوشت ؟

  1. #1
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    Talking چطور میشه قسمتی از برنامه میکرو رو بصورت اسمبلی نوشت ؟

    سلام
    می خواستم ببینم چطوری میشه توی کیل برای میکرو cortexm3 مثل stm32f103
    وقتی داریم برنامه می نویسیم ، یه بخشی رو اسمبلی بنویسیم ، یا یه تابع رو بصورت اسمبلی بنویسیم
    توی نت و هلپ کیل یه چیزایی دیدم ولی افاغه نکرد
    ( موضوعش اینه که من یه برنامه رو با AVR با فرکانس 14.7MHZ و بصورت اسمبلی نوشتم ، همون برنامه با STM32F103RET6 با فرکانس 72MHZ و کلاک I\O 50MHZ سرعتش اگر کمتر نباشه بیشتر هم نیست ، برنامه هم ساده هست ، یه پورت رو مثلا 10 هزار بار TOGGLE کنه ، اینو گفتم که بدونین مشکل اجرای یه حلقه FOR برای تعداد دفعات بالا با یه کد ساده هست.
    اگر کسی تجربه ای داره ممنون میشم مطرح کنه
    بعنوان مثال یه تابع باشه که یه عدد رو بگیره و یکی بهش اضافه کنه و برگردونه
    اگر هم مثال گذاشتین که دمتون گرم

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    میتونی با این صورت عمل کنی:
    کد:
    __asm function(void)          
    {
       
    دستورات اسمبلی     
       
    }
    
    void main(void)
    {
    function();     فراخوانی    
    }
    _____________________________________
    _____________________________________

  4. کاربران : 4 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  5. #3
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    همینکار رو کردم،حتی تو فایل جداگانه با پسوند s هم انجام دادم
    ایراد مربوط به سینتاکس می گیره
    میگه area رو مشخص نکردی و ....
    اگر یه مثال عملی پیدا میشد،خیلی خوب بود.

  6. #4
    مدیرکل انجمنها Doloop آواتار ها
    تاریخ عضویت
    Aug 2011
    نام
    حسين
    نوشته ها
    1,964
    تشکر
    3,312
    تشکر شده 3,086 بار در 1,371 پست

    پیش فرض

    سلام

    صادق جان توی اینی که شما گفتید از endasm استفاده نکرده ..!!!

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

    شبیه این :

    کد:
    void my_func (void)
    {
    
    #pragma asm
       NOP
    #pragma endasm
    
    }
    *** اللّهم عجّل لولیک الفرج ***

  7. کاربران : 2 تشکر کرده اند از شما Doloop برای ارسال این پست سودمند:


  8. #5
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    خوب به یه نتایجی رسیدم
    بایستی اینطوری عمل کنی ، اما نتونستم متغییر برگشتی رو دریافت کنم
    این قسمت اسمبلیش هست که بایستی اینطوری نوشت و متغییرها هر دو بهش پاس میشن بصورت صحیح
    AREA |.text|, CODE, READONLY
    PRESERVE8
    THUMB
    PAV PROC
    EXPORT PAV [WEAK]
    ADD R3,R1,R2
    MOV PC,LR
    ALIGN
    ENDP


    و تعریف درون تابع MAIN هم باینصورت

    extern int PAV(int xZ,int yZ);

  9. #6
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام دوستان
    من دقيقا" از همون روشي كه بالا خدمت دوستان عرض شد، دارم تو برنامه هام استفاده ميكنم! بدون هيچ مشكلي!
    AREA |.text|, CODE, READONLY
    PRESERVE8
    THUMB
    PAV PROC
    EXPORT PAV [WEAK]
    ADD R3,R1,R2
    MOV PC,LR
    ALIGN
    ENDP

    مهندس اين دستوراتي كه شما نوشتيد زماني استفاده ميشه كه بخواي يه فايل با پسوند s داشته باشي، اما موردي كه بنده نوشتم موقعي كه ميخواين دستورات C هم تو برنامتون استفاده كنيد .
    نيازي نداريم كه از endasm استفاده كنيم
    _____________________________________
    _____________________________________

  10. تشکرها از این نوشته :


  11. #7
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    در صورت امکان ، هر وقت که تونستید
    میشه یه مثال مختصر بزارید
    که یه متغییر بهش پاس کنی و یکی هم از اون تابع اسمبلی دریافت کنیم ، تو خود برنامه ،
    بعد تو خود برنامه وقتی اسمبلی می نویسیم ، دستورات رو میشناسه ؟ یعنی مثل زمانی که تو فایل s می نویسیم که تغییر رنگ پیدا می کنن؟
    وقتی تو فایل main می نویسم که ایراد می گیره ، نمی دونم چه کاری رو باید انجام بدم

  12. #8
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    با تشکر از آقای صادق و DOLOOP
    خوب مشکل متغییر برگشتی هم حل شد ، اینجا مطرح می کنم شاید مورد استفاده قرار بگیره
    هر متغییری که پاس میشه به تابع اسمبلی به ترتیب در رجیسترهای R0 تا RX قرار میگیره
    هر متغیری هم که برگرده به همین ترتیب هست
    مشکل برنامه من این بود که حاصل رو توی R3 میریختم

    پس درستش این هست

    AREA |.text|, CODE, READONLY
    PRESERVE8
    THUMB
    PAV PROC
    EXPORT PAV [WEAK]
    ADD R0,R0,R1
    MOV PC,LR
    ALIGN
    ENDP

  13. کاربران : 2 تشکر کرده اند از شما ppittl برای ارسال این پست سودمند:


  14. #9
    کاربر فعال ppittl آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اکبری
    نوشته ها
    138
    تشکر
    44
    تشکر شده 72 بار در 46 پست

    پیش فرض

    نمی دونم توی کیل امکانش هست که وسط برنامه c یک دستور اسمبلی بکار برد یا نه
    توی بسکام اینطوری بود مثلا
    portc=452
    !mov r1,10
    ....
    میشه ؟
    کلا یکی اگر بازی با اسمبلی و c و کیل رو مطلبی ، اطلاعاتی چیزی داره ، دستش درد نکنه
    یه حالی به همه بده ، لطفا

موضوعات مشابه

  1. تشکیل گروه تحقیقاتی - عملیاتی رباتیک
    توسط alamdar در انجمن سیستم های ریاتیک و CNC
    پاسخ: 3
    آخرين نوشته: 23-03-2016, 19:13
  2. پاسخ: 6
    آخرين نوشته: 22-03-2014, 19:46
  3. پاسخ: 0
    آخرين نوشته: 23-09-2013, 20:32
  4. اشکال ارتباط mmc با مگا32 بصورت Fat
    توسط ahadgd در انجمن AVR
    پاسخ: 7
    آخرين نوشته: 14-08-2011, 20:04
  5. نکاتی در مورد IC سینتی سایزر AD9833
    توسط codev در انجمن مباحث متفرقه در زمینه میکروو الکترونیک
    پاسخ: 10
    آخرين نوشته: 19-11-2009, 11:15

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •