| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| STM32 и препълване на стека http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9993 |
Страница 1 от 1 |
| Автор: | juzisound [ Пон Мар 26, 2012 9:40 am ] |
| Заглавие: | STM32 и препълване на стека |
Здравейте! Изяде ме тоя стек на последък... Сума ти време отиде, докато се сетя да го увелича малко... Та въпроса е: Има ли някакъв стандартен начин за откриване на препълване на стека при тия STM32 или подобни куртекси M3. Нещо хардуерно - прекъсване, изключение или нещо такова. Четох ама нищо не намерих сякаш... |
|
| Автор: | miro_atc [ Пон Мар 26, 2012 10:10 am ] |
| Заглавие: | Re: STM32 и препълване на стека |
Няма специални защити като при други платформи... Остават ти софтуерни трикове или евентуално да ползваш MPU-то. Тъй като правя ОС съм разглеждал какво правят и ако те интересува мога да ти изровя линкове и т.н. Но като цяло мнението ми е, че не си стува усилието. Това което правя аз е обработка на всички ексепшъни, така че каквото и да стане по време на дебъг да разбера откъде ми е дошло, а на полето да рестартира и логва проблема. Това е люкарство дето помага за всякакви болежки. А специално за стековете люкарството ми е самата организация на софта. Първо потребителските стекове са само за съответните нишки (в никакъв случай не се ползват от драйвери, библиотеки или други системни глупости). И второ, работим с Ц++ класове, които използват предимно динамична памет, така че на приложно ниво стековете не се ползват за буфери, стрингове и прочие данни. И тъй като не ползваме рекурсии се стига до една доста добра предвидимост. Така проблемът с препълване на стек е сведен до нещо изключително рядко. Слувачва се само поради недоглеждане, но пък веднага прави ексепшън и веднага го ловим. |
|
| Автор: | juzisound [ Пон Мар 26, 2012 11:33 am ] |
| Заглавие: | Re: STM32 и препълване на стека |
Софтуерно неща. Всяка сметка ми е ценна... Идеята беше за хардуер...ма явно няма. Ще внимаваме тогава и това е! |
|
| Автор: | miro_atc [ Пон Мар 26, 2012 12:24 pm ] | |||||||||
| Заглавие: | Re: STM32 и препълване на стека | |||||||||
Препълването на стек е само един от многото начини да омажеш паметта или да пишеш извън нея. С други думи това е частичен случай на по-общ проблем. Няма хардуерна защита за частичния случай, защото има защита за общия случай. Може да си включиш MPU-то (мисля че STM-a има такова) и да кажеш в кои области каква памет имаш. Всеки опит да адресираш извън разрешените области завършва с ексепшън, независимо дали поради препълване или друг бъг. Ако си спомям правилно ти не ползваш ОС, така че MPU–то може да ти помогне без да се отрази на сметките ти. При ОС-вете е по-сложното, защото имаш не 2 а 20-30 стека, съответно различни региони и при всяка смяна на контекст се получава овърхед от препрограмирането на MPU-то. Но пак ще кажа, че най-важна е организацията на софта ти. От теб зависи дали размера на стека ще е предсказуем или не. От теб зависи и доколко ефективно ползваш стековете. Примерно архитектурата на куртекса ти позволява да имаш 2 стека. От теб зависи дали ще са различни или един общ. Ако са различни може и да ги превключваш, т.е. да станат много повече от два. От там насетне зависи как ги използваш. Примерно ти имаш SD карта с FAT и вероятно някаква библиотека за тях. Ако я викаш от различни контексти/стекове трябва на всеки контекст да добавиш толкова стек, колкото може да използват библиотеките. Тръгнеш ли по тоя път обаче не само стековете, ами като цяло паметта ти никога няма да ти стига. Другият вариант е да изпълняваш тия библиотеки само от определен контекст. И само в тоя контекст ще се ползва стек. Разбира се трябва да осигуриш превключване, което не е чак толкова сложно. Може да го направиш и без ОС, ако толкова се боиш от топлата вода |
||||||||||
| Автор: | juzisound [ Пон Мар 26, 2012 1:07 pm ] |
| Заглавие: | Re: STM32 и препълване на стека |
Това с топлата вода ми хареса много. Да кажем, че гледам на топлата вода /ОС/ като на нещо на което трябва да му се прекарват тръби, да ми разкопаят двора и т.н. и накрая да ми сложат и водомер... В моя случай приемам, че си имам топъл минерален извор направо в двора. Иначе за МПУ-то - ще поразгледам. Ич не съм го гледал за какво е... miro_atc! Както винаги - полезен... |
|
| Автор: | miro_atc [ Пон Мар 26, 2012 1:32 pm ] | |||||||||
| Заглавие: | Re: STM32 и препълване на стека | |||||||||
Така е, да вкараш ОС на вече направен проект е равносилно да си разкопаеш двора и да си надупчиш стените като във филма "Топло" Затова за "инфраструктурата" и тръбите се мисли преди да си излял плочите и измазал стените |
||||||||||
| Автор: | juzisound [ Чет Мар 29, 2012 10:36 pm ] |
| Заглавие: | Re: STM32 и препълване на стека |
Оказа се че тая серия която ползвам няма MPU за съжаление... Пак си оставам на етапа "тука има тука нема..." |
|
| Автор: | palavrov [ Пет Мар 30, 2012 2:24 am ] |
| Заглавие: | Re: STM32 и препълване на стека |
Запълни си стека с някаква константа, и от време на време проверявай докъде се е омазал - така ще си калкулираш колко място ти трябва за стек (с малко запас де, едно 100-на байта поне). |
|
| Автор: | miro_atc [ Пет Мар 30, 2012 10:21 am ] | |||||||||
| Заглавие: | Re: STM32 и препълване на стека | |||||||||
Ти с кво компилираше? Някои от компилаторите могат да правят "static stack analysis". В последните версии на GCC го има и все се каня да го пробвам, но още не съм изчистил калбаците, които бъркат сметките. Трябва да минем изцяло на С++ virtual методи за да има предсказуемост/смисъл... А иначе има разни профайлинг тулове дето твърдят че правили по-сериозен анализ. Но само съм чел реклами де... не съм пробвал. Ако ти е голям проблем може да пробваш и да ни кажеш как е |
||||||||||
| Автор: | juzisound [ Пет Мар 30, 2012 10:42 am ] |
| Заглавие: | Re: STM32 и препълване на стека |
IAR ползвам. Търсих из настройките нещо за стека, ама не намерих. Явно няма, щото и в pdf-ите с компилатора нищо не намерих. Иначе проблем не е изобщо в момента. Беше проблем преди няколко дни, понеже внедрявах нов код, който имаше причини да не очаквам да заработи веднага. После почнах да чистя проблемите в кода, ама понеже е имало и проблеми от другаде - демек от стека - , та затова беше трудно да разбера първоначално кое се дъни. Дали кода дали стека... Вече всичко е оправено. Просто увеличих стека с 256 байта и готово... |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|