اطلاعیه

Collapse
No announcement yet.

بعد از ریست میکر stm چه کارهایی انجام می دهد تا به برنامه ی اصلی برسد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    بعد از ریست میکر stm چه کارهایی انجام می دهد تا به برنامه ی اصلی برسد

    سلام
    تو این https://www.eca.ir/forums/thread87000.html دوستان گفتن شروع کد از ادرس 0188 هست و دلیلش هم پیدا کردیم
    در ای وی ار بعد از ریست میکر تابع مین را اجرا می کرد اما در این میکرو ها یه سری کار ها ی دیگر انجام می دهند
    اون کار ها چی می تونن باشند
    من ساده ترین کد مکمن را نوشتم
    کد:
    int main(void)
    {
      //HAL_Init();
      //SystemClock_Config();
        
        RCC->AHB1ENR |= 1<<2; //Clock for GPIOD
        GPIOC->MODER=4;
        GPIOC->ODR=2;
        int xx=0;
        fffff:
        xx++;
        if(xx<0x100000) goto fffff;
        GPIOC->ODR=0;
        while(1);
    }
    و اتفاقا در عمل اجرا شد و کار هم کرد (یک بیزر به به مدت 100 میلی ثانیه صدا می دهد و قطع می شود )
    یعنی توابع HAL_Init و SystemClock_Config رو از توی مین پاک کردم و کد کارکرد . این یعنی به هیچ چیزی برای شروع نیاز نداریم
    اما سوالی که پیش اومد . با این که تو مین هیچ تابعی را صدا نزدم اما در زمان دیباک کردن ماکرو های داخل startup_stm32f407xx.s اجرا میشن
    اینا چی هستن ؟
    چطور جلوی اینا رو میشه گرفت .
    و این که ایا چیز دیگه ی غیر اینا هست

    #2
    پاسخ : بعد از ریست میکر stm چه کارهایی انجام می دهد تا به برنامه ی اصلی برسد

    نوشته اصلی توسط antipa نمایش پست ها
    سلام
    تو این https://www.eca.ir/forums/thread87000.html دوستان گفتن شروع کد از ادرس 0188 هست و دلیلش هم پیدا کردیم
    در ای وی ار بعد از ریست میکر تابع مین را اجرا می کرد اما در این میکرو ها یه سری کار ها ی دیگر انجام می دهند
    اون کار ها چی می تونن باشند
    من ساده ترین کد مکمن را نوشتم
    کد:
    int main(void)
    {
      //HAL_Init();
      //SystemClock_Config();
        
        RCC->AHB1ENR |= 1<<2; //Clock for GPIOD
        GPIOC->MODER=4;
        GPIOC->ODR=2;
        int xx=0;
        fffff:
        xx++;
        if(xx<0x100000) goto fffff;
        GPIOC->ODR=0;
        while(1);
    }
    و اتفاقا در عمل اجرا شد و کار هم کرد (یک بیزر به به مدت 100 میلی ثانیه صدا می دهد و قطع می شود )
    یعنی توابع HAL_Init و SystemClock_Config رو از توی مین پاک کردم و کد کارکرد . این یعنی به هیچ چیزی برای شروع نیاز نداریم
    اما سوالی که پیش اومد . با این که تو مین هیچ تابعی را صدا نزدم اما در زمان دیباک کردن ماکرو های داخل startup_stm32f407xx.s اجرا میشن
    اینا چی هستن ؟
    چطور جلوی اینا رو میشه گرفت .
    و این که ایا چیز دیگه ی غیر اینا هست
    سلام
    ببینید همونطوری که توی تاپیک قبلی گفته شد اون چندتا خطی که اول فایل startup میبینید مربوط به بردار وقفه میشن. با رخ دادن هر وقفه، آدرس موجود توی بردار وقفه متناظر با اون وقفه برداشته میشه و در شمارنده برنامه یا همون PC لود میشه و به این شکل کنترل برنامه به دست روتین وقفه میوفته. شما اگر بردار وقفه رو به اشتباه تغییر بدید برنامه به مشکل میخوره. اگر دقت هم بفرمایید توی بردار وقفه و قسمت مربوط به reset آدرس شروع برنامه اصلی قرار میگیره که بعد از روشن شدن میکروکنترلر، میکروکنترلر به اون آدرس میره.

    دیدگاه


      #3
      پاسخ : بعد از ریست میکر stm چه کارهایی انجام می دهد تا به برنامه ی اصلی برسد

      نوشته اصلی توسط hossein.m98 نمایش پست ها
      سلام
      ببینید همونطوری که توی تاپیک قبلی گفته شد اون چندتا خطی که اول فایل startup میبینید مربوط به بردار وقفه میشن. با رخ دادن هر وقفه، آدرس موجود توی بردار وقفه متناظر با اون وقفه برداشته میشه و در شمارنده برنامه یا همون PC لود میشه و به این شکل کنترل برنامه به دست روتین وقفه میوفته. شما اگر بردار وقفه رو به اشتباه تغییر بدید برنامه به مشکل میخوره. اگر دقت هم بفرمایید توی بردار وقفه و قسمت مربوط به reset آدرس شروع برنامه اصلی قرار میگیره که بعد از روشن شدن میکروکنترلر، میکروکنترلر به اون آدرس میره.
      سلام. من اگه بخوام بدونم که در هر میکرو هر دستور یا هر وقفه یا شروع شدن فلان تایمر و تغییرات فلان رجیستر یا مساعلی از این قبیل چند کلاک زمان میبره باید به چی نگاه کنم؟ دیتاشیت چیزی نوشته در موردش؟






      امیرحسین ضیا

      دیدگاه


        #4
        پاسخ : بعد از ریست میکر stm چه کارهایی انجام می دهد تا به برنامه ی اصلی برسد

        نوشته اصلی توسط Amir Zia نمایش پست ها
        سلام. من اگه بخوام بدونم که در هر میکرو هر دستور یا هر وقفه یا شروع شدن فلان تایمر و تغییرات فلان رجیستر یا مساعلی از این قبیل چند کلاک زمان میبره باید به چی نگاه کنم؟ دیتاشیت چیزی نوشته در موردش؟
        والا برای روند عادی برنامه که باید ببینید از چه دستورات اسمبلی استفاده میشه و هر دستور چند کلاک زمان میبره. معمولا دستورات اسمبلی کلاک خاصی میطلبن. برای رفتن به زیر روال وقفه و اینا دقیق نمیدونم چه پروسه ای طی میکنن یا اینکه کجا در موردش نوشته! اگر شما هم اطلاعات پیدا کردید لطفا در اختیار بنده بذارید.
        میکروکنترلرهای ST داکیومنتی دارن به اسم Programming manual که در مورد دستورات اسمبلی توضیح داده. اگر اونو مطالعه کنید مطمئنا اطلاعات خوبی توش هست.

        دیدگاه

        لطفا صبر کنید...
        X