ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





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









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 14
  1. #1
    2008/11/04
    491
    488

    Question UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    سلام به همه.
    دوستان عزیز و استادان Keil و STM لطفا کمک کنند:
    من توی کیل برای چیپ STM32F103RBT یه کد نوشتم که مرتب کار میکنه!
    حجم کد بالا رفته و مجبور شدم که سطحoptimization رو به O1 تغییر بدم تا حجم کد کم بشه!!!
    وقتی که این تغییر رو میدم، برنامه از سرویس اینتراپتها بازگشت نمیکنه و سرویس اینتراپت هی تکرار میشه و تبدیل میشه به حلقه بینهایت!!!!
    البته این مشکل بیشتر برای اون دسته از اینتراپتها اتفاق میافته که بین دو درخواست متوالی اینتراپت شون، فاصله زمانی کوتاهتری وجود داره!!!
    نظر و راهکار شما چیه؟؟؟
    ...

    _ به دو دلیل کد ایراد نداره:
    a-روی STM32F103ZET و با optimization=O0 درست کار میکنه!
    b_ با حذف بخشهای غیر مرتبط کد و کم کردن حجم آن، روی STM32F103RBT و با optimization=O0 درست کار میکنه!
    _ به داستان Volatile هم ربط نداره! چون با اعمال این qualifier به متغییرهای سراسری و حتی همه متغییرها، بهبودی حاصل نشد!!
    _ بقیه سطوح optimization نیز چک شد، غیر O0 روی هیچ سطحی کار نمیکنه!!

    این توضیح رو هم اضافه کنم، که کد توی یه حلقه بینهایت (شبیه به این while(1);) گیر نمیکنه، واین کل سرویس وقفه است که هی تکرار میشه، یعنی شما هر کدی که توی سرویس وقفه نوشتی دائما اجرا میشه و پردازنده هنگ نیست!! یه جورایی انگار که با اجرای وقفه فلگهای وقفه صفر نمیشن!!!

    ؟؟؟؟؟؟؟

    ویرایش توسط ubub : 2018/10/09 در ساعت 22:42
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙
  2. #2
    2011/07/16
    شیراز
    140
    37

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    سلام، من تا حالا چنین مشکلی نداشتم، چنتا سوال دارم اگر پرچم وقفه رو دستی پاک کنی باز هم مشکل وجود داره؟ آیا چنتا وقفه همزمان با هم استفاده شده؟ آیا تابعی وجود داره که هم توی بدنه ی main و هم وقفه فراخوانده شده باشه؟
  3. #3
    2008/11/04
    491
    488

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    نقل قول نوشته اصلی توسط gordany

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام، من تا حالا چنین مشکلی نداشتم، چنتا سوال دارم اگر پرچم وقفه رو دستی پاک کنی باز هم مشکل وجود داره؟ آیا چنتا وقفه همزمان با هم استفاده شده؟ آیا تابعی وجود داره که هم توی بدنه ی main و هم وقفه فراخوانده شده باشه؟
    مهندس سلام،
    ممنون از پاسختون،
    چندتا وقفه هم زمان ... >> بقیه وقفه ها رو هم که غیر فعال میکردم، فایده نداشت!
    تابعی که هم توی main و هم توی وقفه ... >> حواسم به این مورد هست، و اکثرا سعی میکنم برای وقفه ها توابع اختصاصی بنویسم!
    ...
    اگر پرچم وقفه رو دستی پاک کنی ... >> به ظن خودم این مورد رو تست کردم و اثر نکرد!
    البته از اونجایی که سیستم وقفه این ARM ها خیلی پیچیده است و یک طبقه Pending هم داره، میگم شاید کدی که من برای این منظور نوشتم کارآمد نبوده، شما اگه کدی دارید بذارید، تا تست کنم!!
    یه وفقه روی USART1 هست و یکی روی USB .
    هر دو تاش هم با تغییر سطحoptimization به مشکل میخوره!
    برای راحتی کار، شما روی USART1 کد بذار!
    ...
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙
  4. #4
    2011/07/16
    شیراز
    140
    37

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    از توابع HAL استفاده میکنید؟ من روتین وقفه دریافت سریال رو چک کردم، وقفه ها قبل از اجرای روتین غیر فعال میشن، اگر از HAL استفاده نمیکنید تابع
    __HAL_UART_DISABLE_IT()
    رو از تعریفای HAL پیدا کنید و خودتون بنویسید.
  5. #5
    2008/11/04
    491
    488

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    نقل قول نوشته اصلی توسط gordany

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    از توابع HAL استفاده میکنید؟ من روتین وقفه دریافت سریال رو چک کردم، وقفه ها قبل از اجرای روتین غیر فعال میشن، اگر از HAL استفاده نمیکنید تابع
    __HAL_UART_DISABLE_IT()
    رو از تعریفای HAL پیدا کنید و خودتون بنویسید.
    جناب مهندس خیلی ممنون از همکاریتون،
    نه من از HAL استفاده نمیکنم!
    ولی توابع رو از نت که نگاه کردم، اصل داستان با اونچه که خودم (برای دستکاری اینتراپتها و Pending شون) نوشته بودم یکی بود!
    ...
    تقریبا فهمیدم مشکل کجاست، یه دلیل کشنده داره!!!
    وقتی optimization رو از O0 به O1 تغییر میدی، اون حالت بهینه سازی برای زمان، از دست میره و کامپایلر بهینه سازی رو به منظور کاهش حجم انجام میده، خوب طبیعیه که کدها پیچیده تر میشند و زمان بیشتری برای اجراشون طول میکشه!! در نتیجه توی درخواستهای وقفه با فواصل کوتاه، سرویس وقفه قبل از اتمام، دوباره وقفه میخوره و درجا تکرار میشه!!
    (البته این برداشت من هست، شاید دلیل دیگه ای داشته باشه!!! به هر حال وقتی ارتباط رو با سرعت پائین تری (البته ناکارآمد) راه می اندازم، کار میکنه! (توی همون optimization=O1))
    (هرچندکه من همیشه سعی میکنم بار پردازشی رو توی سرویس وقفه به حداقل برسونم! البته این کار زمانی راهگشا خواهد بود، که شما بتونی حداقل پردازشهای لازم رو روی داده هات قبل از رسیدن اطلاعات جدید انجام بدی، مخصوصا وقتی که طرف دیگر ارتباط دست خودت نیست و سرعت خودش رو داره !!!)
    ...
    تشکر از همه دوستان، باز اگر مطلبی به نظرتون میرسه، دریغ نفرمائید!
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙
  6. #6
    2008/05/26
    1,043
    527

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    نقل قول نوشته اصلی توسط ubub

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    جناب مهندس خیلی ممنون از همکاریتون،
    نه من از HAL استفاده نمیکنم!
    ولی توابع رو از نت که نگاه کردم، اصل داستان با اونچه که خودم (برای دستکاری اینتراپتها و Pending شون) نوشته بودم یکی بود!
    ...
    تقریبا فهمیدم مشکل کجاست، یه دلیل کشنده داره!!!
    وقتی optimization رو از O0 به O1 تغییر میدی، اون حالت بهینه سازی برای زمان، از دست میره و کامپایلر بهینه سازی رو به منظور کاهش حجم انجام میده، خوب طبیعیه که کدها پیچیده تر میشند و زمان بیشتری برای اجراشون طول میکشه!! در نتیجه توی درخواستهای وقفه با فواصل کوتاه، سرویس وقفه قبل از اتمام، دوباره وقفه میخوره و درجا تکرار میشه!!
    (البته این برداشت من هست، شاید دلیل دیگه ای داشته باشه!!! به هر حال وقتی ارتباط رو با سرعت پائین تری (البته ناکارآمد) راه می اندازم، کار میکنه! (توی همون optimization=O1))
    (هرچندکه من همیشه سعی میکنم بار پردازشی رو توی سرویس وقفه به حداقل برسونم! البته این کار زمانی راهگشا خواهد بود، که شما بتونی حداقل پردازشهای لازم رو روی داده هات قبل از رسیدن اطلاعات جدید انجام بدی، مخصوصا وقتی که طرف دیگر ارتباط دست خودت نیست و سرعت خودش رو داره !!!)
    ...
    تشکر از همه دوستان، باز اگر مطلبی به نظرتون میرسه، دریغ نفرمائید!
    سلام
    من قبلا یه بار به چنین مشکلی خوردم و که پس کلی درگیری با برنامه و فعال و غیر فعال کردن وقفه ها متوجه شدم که حافظه stack اورفلو میشه و میکرور هنگ میکنه
    گفتم شاید مشکل شما هم از همین اورفلو شدن استک باشه
  7. #7
    2007/03/15
    تبريز
    2,683
    132

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    متاسفانه آپتیمایز کامپایلرها احمقانه عمل میکنه . یک منطق خاصی دره که کعم.لا مشکل سازه ..من همیشه آپتیمایز رو <نون > میکنم .
    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
    داشتن عقله زيادتر از دیگر آدم ها است
  8. #8
    2008/05/26
    1,043
    527

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    نقل قول نوشته اصلی توسط aliila

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    متاسفانه آپتیمایز کامپایلرها احمقانه عمل میکنه . یک منطق خاصی دره که کعم.لا مشکل سازه ..من همیشه آپتیمایز رو <نون > میکنم .
    اگه تو حالت none باشه که حجم برنامه به شدت بالا میره، با این قضیه مشکلی ندارین؟
  9. #9
    2008/11/04
    491
    488

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    تشکر ویژه از جنابان

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    و

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    و

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    نقل قول نوشته اصلی توسط M3R-E

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام
    من قبلا یه بار به چنین مشکلی خوردم و که پس کلی درگیری با برنامه و فعال و غیر فعال کردن وقفه ها متوجه شدم که حافظه stack اورفلو میشه و میکرور هنگ میکنه
    گفتم شاید مشکل شما هم از همین اورفلو شدن استک باشه
    سلام مهندس،
    ایرادتون محتمل به نظر میرسه! ولی توی کیل، توی فایل Start_UP.S که نگاه میکنم توی همه حالتهای optimization حافظه ستک (400H) و هیپ (200H) مقدارش ثابته و

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    Def و شرطی هم نداره!!
    پشت بندش هم Initate(); و main(); رو صدا زده!!
    پس نباید ربطی به این مورد داشته باشه!
    تازه من فراخوانی توابع تودرتو رو اکثرا محدود میکنم، نهایتا یک یا دو سطح!! و چندان حافظه استکی نیاز نمیشه!!
    حالا باز اگه راه کار ایمنی برای دستکاری اندازه Stack و Heap میشناسید، بفرمائید من تست کنم!!

    نقل قول نوشته اصلی توسط aliila

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    متاسفانه آپتیمایز کامپایلرها احمقانه عمل میکنه . یک منطق خاصی دره که کعم.لا مشکل سازه ..من همیشه آپتیمایز رو <نون > میکنم .
    سلام مهندس،
    حق با شماست، البته مذخرف تر از optimization برخی کامپایلرها، داستان الکترونیک کار کردن ما مصرف کنندگان علم و فن آوریه!
    تا میاییم با رفتار یه کامپایلر درست آشنا بشیم و همه گوشه و کناراش رو بشناسیم و توش حرفه ای بشیم، باید به هزار دلیل، کرک و قطعه و بازار و مد روز و ... بذاریمش کنار بریم سراغ یکی دیگه!!!!!

    راستی دوستان و اساتید گرامی، راهی نداره که این کامپایلر محترم، بخشی از کد رو بیخیال optimization بشه، مثلا یه فایل جداگانه رو یا یه تابع رو؟؟؟؟
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙
  10. #10
    2016/06/06
    92
    55

    پاسخ : UBUB؟ توی Keil وقتی optimization رو روی سطح O1 قرار میدم، بازگشت از اینتراپتها مختل میشه!!!

    احتمالا مشکل از Stack هست، همین مشکلی که گفتید تا از یک اینتراپت در میآید به اینتراپت دیگر وارد می شود، خود باعث پر شدن stack میشود، تا یک زمانی که stack جا داشته باشد مشکلی نیست، بعد آن در arm اینقدر فضا پر میشود تا به یک حافظه که نباید به آن دسترسی پیدا کنید میرسید و اکسپشن تولید میشود، اگر از st cubemx استفاده کنید، که توابع اکسپشن را در کد قرار می دهد، احتمالا باید ببینید که که داخل while(1) میافتد، اگر فضا به اندازه کافی باشد ممکن هست که یک مقدار طول بکشد.
    و در حالت کلی اگر اینتراپت زیاد صدا زده شود، و تو در تو بشوند stack پر میشود

    راستی دوستان و اساتید گرامی، راهی نداره که این کامپایلر محترم، بخشی از کد رو بیخیال optimization بشه، مثلا یه فایل جداگانه رو یا یه تابع رو؟؟؟؟


    شما میتوانید رو هر فایل کلیک راست کنید و جداگانه وضعیت و نوع کامپایل آن را مشخص کنید.
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 14

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

  1. پاسخ: 1
    آخرين نوشته: 2018/07/17, 19:16
  2. پاسخ: 3
    آخرين نوشته: 2014/04/14, 17:06
  3. قطع و وصل برق وقتی که کامپیوتر روشن و خاموش میشه؟
    توسط mus در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 16
    آخرين نوشته: 2010/04/21, 16:53
  4. مشکل عجیب :سنسور LM35 ,وقتی بسته میشه برق کل مدار خاموش میشه!!!!!!!!
    توسط 5 در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 7
    آخرين نوشته: 2010/02/16, 20:21

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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