#️⃣3️⃣** Переполнение стека
Каждый программист знает, что переполнение стека - это проблема. Но последствия могут быть разными в зависимости от того, какие данные или команды были повреждены и как они используются. Время, когда система начнёт работать неправильно после переполнения стека, тоже варьируется и зависит от того, когда будут использованы поврежденные данные.
Во встроенных системах переполнение стека случается чаще, чем на обычных компьютерах. Вот несколько причин:
✔️ во встроенных системах обычно меньше оперативной памяти,
✔️ отсутствие виртуальной памяти,
✔️ использование нескольких достаточно больших стеков - по одному на каждую задачу,
✔️ обработчики прерываний (функции, вызываемые на события периферии) могут использовать те же самые стеки.
Ещё больше усложняет ситуацию то, что никакое тестирование не может гарантировать, что стек достаточно большой. Можно тестировать систему при разных условиях, но только в течение определённого времени. Переполнение стека, которое происходит редко, может остаться незамеченным при недолгом тестировании.
Если в программе нет рекурсии (это когда функция вызывает саму себя), можно доказать, что переполнения стека не произойдёт. Но это нужно делать заново каждый раз, когда меняется код.
👇🏻 Что делать и как решать, читайте ниже 👇🏻
#IT #embedded #кейсы