امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
چت باکس علمی ARM
نویسنده پیام
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #89
RE: چت باکس علمی ARM
دوستان اگه راهتون افتاد لطفا برنامه رو چک کنید
ممنون

۰۵-آبان-۱۳۹۲, ۲۳:۱۲:۰۸
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #90
RE: چت باکس علمی ARM
اميد جان دقت كن!
شرط هات بازم اشتباه هستن.
دقيقا همونطوري كه تو پست قبلي نوشتم استفاده كن Biggrin
به پرانتز ها دقت كن!

۰۵-آبان-۱۳۹۲, ۲۳:۵۰:۳۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, omid_phoenix, hadikh73
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #91
RE: چت باکس علمی ARM
باز درست نشد:(
فکر کنم دستورات معادل و اشتباه نوشتم

ببین این دستورات معادلی که واسه کدویژن نوشتم درسته؟
واسه این دستور
کد:
PORTA=0b11110000;
DDRA=0b11110000;

در معادل KEIL ،کلاک PMC رو فعال
پین های 0 تا 7 بعنوان ورودی/خروجی پیکربندی
پین های 0 تا 3 برابر ورودی
پین های 4 تا 7 برابر خروجی
کد:
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA);
AT91C_BASE_PIOA->PIO_PER=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7);
AT91C_BASE_PIOA->PIO_ODR=(1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_OER=(1<<4|1<<5|1<<6|1<<7);

معادلش درسته؟

یا واسه این دوتا دستور در کدویژن
کد:
PORTA=0b11110000;
PORTA.4=0;

معادل در محیط KEIL
پین های 4 تا 7 برابر 1
پین های 0 تا 3 برابر 0
پین 4 برابر 0
کد:
AT91C_BASE_PIOA->PIO_SODR=(1<<4|1<<5|1<<6|1<<7);
AT91C_BASE_PIOA->PIO_CODR=(1<<0|1<<1|1<<2|1<<3);
AT91C_BASE_PIOA->PIO_CODR=(1<<4);

گیج شدم:|

(آخرین ویرایش در این ارسال: ۰۶-آبان-۱۳۹۲, ۰۰:۵۶:۳۴، توسط omid_phoenix.)
۰۶-آبان-۱۳۹۲, ۰۰:۵۲:۲۶
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #92
RE: چت باکس علمی ARM
آره درست هستن. انا باز مي گم شرط ها رو اشتباه مي ذاري Biggrin

اينطوري فايده ندارهه.
ببين برنامه رو از يه نقطه شروع كن و توسعه اش بدهه.
مطمئني اوني كه با كدويژنه درست جواب مي دهه؟

اول ببين پايه ها رو عملا مي توني 0 و 1 كني ، بخش هاي مجذا ، كار هم رو خراب نمي كنن؟
يك كليد رو مي توني بخوني؟
از بخش بخشش كه مطمئن شدي ، بيا سراغ پروژه ات ، اول يك قدمش رو انجام بدهه ببين جواب مي دهه ، اوكي بود ، 10 تا قدم برو جلو و باز چك كن ، اوكي بود باز 10تا برو جلو و ... .
گاهي اوقات چيزاي ساده هم مي بيني مشكل ساز مي شن. منم سخت افزارت رو ندارم ، يه جور كار خودت ، اين سر و كله زدن ها طبيعي هست. اگر JLINK هم داري كه مرحله مرحله ديباگ كن ببين درست كار مي كنه يا نه.

اگر مي خواي مثل AVR با 1 كردن پايه يك و در همون ريجستر با 0 كردن پايه صفر بشه.
ريجستر OWER رو براي پايه هاي مد نظر فعال كن.
بعد با رجيستر ODSR مستقيم 0 و 1 كني ، پايه 0 و 1 مي شه.
توي اون كتاب IAR هه هم هست ، مراجعه كن.
بعضي جاها براي اينكه تداخل پيش نياد بايد از OR مساوي =| استفاده كني. به اين ها هم دقت كن كه خيلي قشنگ كار دستت مي دهه ، مخصوصا اگر يه ريجستر رو در جاهاي مختلف داري كانفيگ مي كني ، براي كاراي مختلف.

اين نكته ها نياز به تجربه دارهه ، كه با سر و كله زدن با مدار و برنامه بدست مي ياد.
مورد ديگه IF هي پشت سر هم هم دقت كن ، جاهايي كه بايد از else if و يا else استفاده كني رو در نظر داشته باش.
مورد ديگه سرعت آرم هم در نظر بگير كه چند برابرهه AVR هست ، جاهايي كه نيازهه delay بذار.

اگر ديباگر نداري با 1-2تا LED جاهاي مختلف برنامه ات رو چك كن ببين اجرا مي شن؟
دقت كن اگر 2تا if قابليت با هم اجرا شدن رو دارن ،‌محتوياتشون با هم همپوشاني نداشته باشه و ...

پس از جزء به كل برس و نكاتي رو كه گفتم در نظر بگير.
قبلش هم از سورس C هه مطمئن شو كه كار مي كنه.

منظورم از بافر ، خارجي بود ، نميدونم بارت چقدر جريان مي كشه ، اما آرم اكثر پايه هاش فكر كنم 3-4 ميلي آمپر بيشتر جريان نمي دن.

۰۶-آبان-۱۳۹۲, ۰۲:۰۲:۴۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, Ambassador, babyy, hadikh73, salehjg
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #93
RE: چت باکس علمی ARM
سلام
میگم گستره ی define# ها برای هر فایل هست؟ یا کل پروژه؟

برای هر فایل هست، درسته؟
۲۹-دى-۱۳۹۲, ۲۰:۰۷:۰۳
وب سایت ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #94
RE: چت باکس علمی ARM
هم آره و هم نه Biggrin

اولويت و بالا پايين بودن خط ها مهمه.
مثلا define اي رو قبل از header اي بنويسي ، اون define رو توي هدرهاي بعدي هم مي توني استفاده كني و ... Biggrin

۲۹-دى-۱۳۹۲, ۲۱:۵۷:۴۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : salehjg, babyy, behzady, omid_phoenix
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #95
RE: چت باکس علمی ARM
سلام

یه پروژه ای از قدیم الایام دارم...
الان میخوام nrf24l01 رو بهش اضافه کنم.
بصورتی که برنامه اول nrf رو init کنه، و یه وقفه مخصوص pio ای که به پین irq از nrf24l01 وصله، تعریف کنه...
بعد هر وقت اطلاعات جدید توسط nrf دریافت شد، از تابعی که هنگام وقفه فراخوانی میشه، اطلاعات رو از nrf بگیره...


هدف کلی این هست که میکرو درگیر چک کردن پشت سر هم رجیستر status هه nrf نباشه...

الان همه ی این کار ها رو روی پروژه، پیاده کردم...

از طرف فرستنده اطلاعات رو با 150ms فاصله مدام، میفرستم.
ولی ... . . . .


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

زیاد با وقفه ها کار نکردم، تجربه ندارم

الان باید چی رو بررسی کنم تا اشکال رو پیدا کنم؟


توی تابع وقفه، اولش باید وقفه رو غیرفعال کنم؟(و آخرش دوباره فعال کنم) تا وقفه ی دیگه ای حین اجرای تابع، رخ نده؟


اینکه متغیر های سایر قسمت های برنامه static نباشن، مشکل سازه؟


مثلا وسط تابع delay_ms، یه وقفه رخ داد... بعد اتمام عملیات مربوط به وقفه، بر میگرده به تابع delay_ms (داخل حلقه ی for) ... ولی مقدار متغیر ها صفر شدن....

این مسئله عادیه؟


ConfusedConfused
(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۲, ۰۱:۵۳:۵۶، توسط salehjg.)
۳۰-دى-۱۳۹۲, ۰۱:۲۹:۲۷
وب سایت ارسال‌ها
پاسخ
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #96
RE: چت باکس علمی ARM
انگار قضیه پیچیده تر از این حرفاست... Whistle

داره به جاهایی کشیده میشه که برام تازگی داره Biggrin


خیلی با حوصله نشستم دانه دانه Biggrin شرایط ممکن رو برای هنگ کردن برنامه ایجاد کردم BiggrinBiggrin

برنامه تحت این شرایط هنگ کرد:
تابع main ، تابع دیگه به نام فرضی k رو، فراخوانی کرده، و در حین اجرای تابع k، وقفه رخ میده... که اسم تابع وصل شده به وقفه z هه....

تابع z اجرا میشه، تا اینکه به آخرین خط خودش میرسه... بعدش از z خارج میشه و به k بر میگرده تا ادامه ی تابع k رو اجرا کنه.... هنگامی که تابع k به آخرین خط خودش میرسه، بعد اجرای دستور return ، برنامه هنگ میکنه و میپره به sam7.s
(یعنی بجای اینکه تابع k بعد return به main برگرده، به sam7.s میره و برنامه هنگ میکنه)

--------------------

با این که از stack میکرو ها چیز زیادی نمیدونم.... احساس کردم قضیه بهش ربط داره...
اومدم تیک هایی که مربوط به بهینه سازی برنامه هست رو توی options زدم..

توی options پروژه، دو تیک مربوط به cross module optimization و microLIB رو فعال کردم... و combo box مربوط به code generation روی ARM Mode هستش...

بعد تغییرات
کامپایل کردم...


برنامه مثل ساعت کار میکنه!!!



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



تصویر ضمیمه شده
لینک mirror :
[تصویر:  72955795493190216662.jpg]

ویرایش:

بدون اعمال microLIB و Cross module optmztn، (یعنی هر دو تا غیرفعال اند)، stack size ها رو توی sam7.s دوبرابر کردم...

برنامه کار کرد!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Amaze


یا من گیج شدم یا این keil!!


فایل‌(های) پیوست شده بندانگشتی (ها)
   
(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۲, ۰۳:۲۴:۲۲، توسط salehjg.)
۳۰-دى-۱۳۹۲, ۰۲:۵۳:۴۴
وب سایت ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #97
RE: چت باکس علمی ARM
نقل قول: توی تابع وقفه، اولش باید وقفه رو غیرفعال کنم؟(و آخرش دوباره فعال کنم) تا وقفه ی دیگه ای حین اجرای تابع، رخ نده؟

اینکه متغیر های سایر قسمت های برنامه static نباشن، مشکل سازه؟

مثلا وسط تابع delay_ms، یه وقفه رخ داد... بعد اتمام عملیات مربوط به وقفه، بر میگرده به تابع delay_ms (داخل حلقه ی for) ... ولی مقدار متغیر ها صفر شدن....

این مسئله عادیه؟
نه نيازي به غير فعال كردن وقفه در روتين وقفه نيست ، اين كارا براي AVR هه Biggrin ( حالا سر و كله ي بهزاد پيدا مي شه Biggrin )
توي عكسي كه گذاشتي مي بينيم كه arm7 داراي 6 مد كاري هست ، هر وقت از مودي به مد ديگه جابه جا مي شيم ، هر كدوم از مد ها يه سري رجيستر دارن ، كه چند تا از رجيسترهاي R1 تا R16 رو در خودشون ذخيرهه مي كنن و ديگه push , pop اي براي همه صورت نمي گيرهه.

داستان static هم مطمئن نيستم ، اما فكر مي كنم مي تونه مشكل ساز باشه ، اگر قبل از رفتن به وقفه مقدار push نشه ، طبيعتا بعد از اتمام وقفه و برگشتن به محل اول مقدار اون متغيير pop نمي شه. اما اگر static قائدتا بايد اين اتفاق بيفته. براي غير استاتيك هم شايد همين وضعيت باشه ، مطمئن نيستم ، اما كار از محكم كاري عيب نمي كنه ... .

راجع به مثال delay و وقفه هم هموني پيش مي ياد كه گفتيد.

----------------

اگر تابع وقفه شلوغ هست امكانش هست stack كم بياد ، البته من يادمه توي وقفه از sprintf استفاده مي كردم برنامه هنگ مي كرد( براي ARM7 )، و برنامه رو نهايتا يه جور ديگه نوشتم ، حالا نمي دونم چرا اينطوري مي شد!
يا توي پروژه ي كواد ،‌مي خواستم تو وقفه با I2c كار كنم كه خودش هم وقفه اي بود ، باز برنامه گير مي كرد( cortex m3 ) و اونم نتونستم بفهمم چشه! نهايتن سبك كد زني رو عوض كردم!

---------------
من اون دوتا تيك رو نمي زنم ، نمي دونمم دقيقا چيكار مي كنن.
توي تب c/c++ يه كشابي دارهه كه سطح optimize رو مي شه تعيين كرد ، گرچه كاري به كارش ندارم Biggrin
از thumb مد هم مي توني استفاده كني اگر برنامه حجيم شده و حافظه كم مي ياري ، معماري رو 16 بيتي مي كنه و در نهايت حجم كد پايين مي ياد ، اما در اين صورت فكر كنم تيك USE Micro LIB رو بايد مي زديم.

حافظه ي stack رو عشقي زياد نكن ، اول ديتاشيت رو چك كن ببين چقدر مي توني استفاده كني ، همونقدر بذار.
ممكنه با حافظه ي ديگه اي هم پوشاني كنه ، و طي شرايطي برنامه از كار بيفته Biggrin

(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۲, ۱۲:۴۷:۰۰، توسط sharin.)
۳۰-دى-۱۳۹۲, ۱۲:۴۳:۲۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, salehjg, omid_phoenix
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #98
RE: چت باکس علمی ARM
نقل قول: نه نيازي به غير فعال كردن وقفه در روتين وقفه نيست ، اين كارا براي AVR هه Biggrin ( حالا سر و كله ي بهزاد پيدا مي شه Biggrin )
BiggrinBiggrin
باشه...
نقل قول: توي عكسي كه گذاشتي مي بينيم كه arm7 داراي 6 مد كاري هست ، هر وقت از مودي به مد ديگه جابه جا مي شيم ، هر كدوم از مد ها يه سري رجيستر دارن ، كه چند تا از رجيسترهاي R1 تا R16 رو در خودشون ذخيرهه مي كنن و ديگه push , pop اي براي همه صورت نمي گيرهه.
...
نقل قول: داستان static هم مطمئن نيستم ، اما فكر مي كنم مي تونه مشكل ساز باشه ، اگر قبل از رفتن به وقفه مقدار push نشه ، طبيعتا بعد از اتمام وقفه و برگشتن به محل اول مقدار اون متغيير pop نمي شه. اما اگر static قائدتا بايد اين اتفاق بيفته. براي غير استاتيك هم شايد همين وضعيت باشه ، مطمئن نيستم ، اما كار از محكم كاري عيب نمي كنه ... .
باشه Smile

نقل قول: اگر تابع وقفه شلوغ هست امكانش هست stack كم بياد ، البته من يادمه توي وقفه از sprintf استفاده مي كردم برنامه هنگ مي كرد( براي ARM7 )، و برنامه رو نهايتا يه جور ديگه نوشتم ، حالا نمي دونم چرا اينطوري مي شد!
دارم یه چیزایی میخونم...
توی کد های at91lib هم یه قسمت هست که بجای sam7.s استفاده میشه...
اونا رو بررسی کنم ببینم چیه...
ظاهرا برای هر اررور، یه هندلر گذاشتن...
نمونه:
http://www.keil.com/support/docs/3080.htm

نقل قول: يا توي پروژه ي كواد ،‌مي خواستم تو وقفه با I2c كار كنم كه خودش هم وقفه اي بود ، باز برنامه گير مي كرد( cortex m3 ) و اونم نتونستم بفهمم چشه! نهايتن سبك كد زني رو عوض كردم!
مشکل منم دقیقا همینه...
هنگ کردن با سایز stack ها رابطه داره... (ظاهرا.... تست هایی که من کردم، اینطوری نتیجه دادن Biggrin )

الان اینا، اعدادی هستن که باهاشون برنامه درست کار میکنه
(توی تابع وصل شده به وقفه، از spi اطلاعات رو میخونم، چندتا pio رو صفر و یک میکنم و نهایتا، اطلاعات رو با printf به dbgU میفرستم WhistleWhistle


کد php:
;// <h> Stack Configuration (Stack Sizes in Bytes)
;//   <o0> Undefined Mode      <0x0-0xFFFFFFFF:8>
;//   <o1> Supervisor Mode     <0x0-0xFFFFFFFF:8>
;//   <o2> Abort Mode          <0x0-0xFFFFFFFF:8>
;//   <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
;//   <o4> Interrupt Mode      <0x0-0xFFFFFFFF:8>
;//   <o5> User/System Mode    <0x0-0xFFFFFFFF:8>
;// </h>

UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000010
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000100
USR_Stack_Size  EQU     0x00000800 

همه ی اعداد رو 2 برابر کردم(یعنی در حالت اولیه، مقادیر نصف اینایی که گذاشتم، بودن)

در مورد اینکه ممکنه هم پوشانی بین آدرس ها ایجاد شه، نمیدونم...
آخه توی عکسی که قبلا گذاشته بودم (لینک) ، سایز IRAM1 دقیقا 128 کیلوبایت میشه... که sam7x512 هم دقیقا 128 کیلوبایت sram داره
پس سایزی از sram که برای stack مصرف میشه رو در نظر نگرفته حتما...

یعنی ممکنه خود keil، مرز آدرس هارو کنترل و محاسبه میکنه...
البته چون اسمبلی زیاد بلد نیستم، نمیتونم از sam7.s سر در بیارم...

البته یه فایل scatter هم هست...
نمی دونم چیه... ولی بازم به این آدرس دهی اینا ربط داره....
چیزی بفهمم پست میزنم براش

نقل قول: من اون دوتا تيك رو نمي زنم ، نمي دونمم دقيقا چيكار مي كنن.
توي تب c/c++ يه كشابي دارهه كه سطح optimize رو مي شه تعيين كرد ، گرچه كاري به كارش ندارم Biggrin
آهان فهمیدم کدوما رو میگی آقا مرتضی....
نقل قول: از thumb مد هم مي توني استفاده كني اگر برنامه حجيم شده و حافظه كم مي ياري ، معماري رو 16 بيتي مي كنه و در نهايت حجم كد پايين مي ياد ، اما در اين صورت فكر كنم تيك USE Micro LIB رو بايد مي زديم.
اینا رو توی کتاب های فارسی توضیح دادن کامل؟
اگه توضیح دادن، برم از کتابخونه بگیرم بخونمشون... Biggrin
نقل قول: حافظه ي stack رو عشقي زياد نكن ، اول ديتاشيت رو چك كن ببين چقدر مي توني استفاده كني ، همونقدر بذار.
ممكنه با حافظه ي ديگه اي هم پوشاني كنه ، و طي شرايطي برنامه از كار بيفته Biggrin
ای بابا BiggrinBiggrin
آخه هر چقدر فکر میکنم، راه بهتری برای اضافه کردن nrf به پروژه نیست...
در غیر اینصورت سرعت اجرای حلقه ی اصلی مربوط به برنامه، بخاطر چک کردن nrf کمتر میشه....
که نمیخوام همچین بشه.... Whistle Whistle


ممنون بابت وقتی که گذاشتین Biggrin
۳۰-دى-۱۳۹۲, ۲۳:۰۵:۴۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Ambassador, sharin, omid_phoenix
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #99
RE: چت باکس علمی ARM
کد php:
UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000010
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000100
USR_Stack_Size  EQU     0x00000800 

خوب شما همينا رو كه 2 برابر كردي بذار باشه ، اون IRAM1 رو كه 128KB اش كردي رو برگردون حالت اول ببين جواب مي دهه يا نه؟

البته مد سوپروايزر فكر مي كنم مربوط به بوت باشه، اگر اينطور باشه نيازي به افزايش فضاي stack ندارهه.
مد user هم كه حالت عاديه اجراي برنامه هست و stack براي رفتن و برگشتن به توابع استفاده مي شه و اگر قبلش اينجا مشكلي نداشتي ، اينم نيازي به افزايش ندارهه.
اگر از وقفه ي IRQ استفاده كردي و نه FIQ ، و مشكل در همين روال وقفه هست ، خوب حافظه stack اين رو بيشتر افزايش بدهه.

بخشي از حافظه ي SRAM متعلق به يه سري از peripheral هاست ، توي همون فايل اسمبلي بخشي مرزبندي ها صورت مي گيرهه و وقتي نوع ميكرو هم انتخاب مي كني ، مطابق با همون اين اعداد داخل Option for target تنظيم مي شن.

اون scatter ، بالايه بالا يه گزينه دارهه كه از مرزهايي كه در تب target تعيين كردي استفاده كنه ، يعني يا اين يا اون ، كه ما از تب target استفاده مي كنيم.

در مورد thumb تو همه كتابا بايد يه توضيحي باشه ، البته در حد توضيح Biggrin
تجربه ي عمليش ساده هست ، همون عكسي كه گذاشتي در تب target در قسمت code generation مي توني ARM و يا thumb رو تعيين كني كه به ترتيب معماري 32 بيتي و 16 بيتي مي شه. تيك اون گزينه هم كه گفتم احتمالا بايد بزني وگرنه كامپايل نمي شه.
البته سرعت پردازش طبيعتا قدري مي ياد پايين. 2-3 بار بيشتر امتحانش نكردم ... ، بعضي وقت ها براي كامپايل كردن كمي گير مي دهه كه با همين تنظيمات بايد درست بشه.


نقل قول: آخه هر چقدر فکر میکنم، راه بهتری برای اضافه کردن nrf به پروژه نیست...
در غیر اینصورت سرعت اجرای حلقه ی اصلی مربوط به برنامه، بخاطر چک کردن nrf کمتر میشه....

اي بابا مگر موشك مي خواي كنترل كني Biggrin
فقط يكي از status ها رو هم چك كني كافيه و وقتي كه مي گيرهه در حد چك كردن يك شرط بيشتر نيست!
اگر حلقه ي اصليت كند هست كه آره بايد وقفه اي باشه ، اگر نه كه لزومي ندارهه وقفه اي باشه.
البته وقفه ايش هم كه اوكي كردي ،‌پس ديگه مشكلي ندارهه ... Biggrin

۳۰-دى-۱۳۹۲, ۲۳:۵۸:۴۹
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, salehjg


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS