Я работаю с C/CPP для встроенных систем, а в своем коде у меня есть некоторые разделы, которые запускаются из некоторой «недопустимой» памяти и НЕ ДОЛЖЕН вызывать до тех пор, пока не будет выполнено какое-либо условие.Как обеспечить, чтобы конкретный код не выполнялся во время выполнения условия
для простоты:
Допустим, foo()
такая функция и является недействительным, а g_isMemoryValid == false
для обув кроме() есть несколько houndred других функций в разделе недействительных памяти с несколькими вызовами каждый из всех модулей.
моя проблема заключается в том, чтобы найти все экземпляры, где я вхожу в недействительный раздел и проверять, что я пропустил любой звонок!
Как я могу гарантировать, что все отрасли, где foo()
управляют являются отвечают g_isMemoryValid == true
решение должно выход:
линия, которая переходит на код (или адрес инструкции), , но даже если это будет испускают имя модуля только
Или ад ... [OK, NOT_OK] будет делать :)
Примечание: Даже решения, которые будут решать только подмножество в f сценарии будут делать!
Обратите внимание, что существует много сценариев, в дополнении к простому if(g_isMemoryValid)
обертке, как СЦЕПЛЕНИЕ функции вызова в себе вызов не вызывается, а условие не выполняются или несколько отличается синтаксисом ветви
if (g_isMemoryValid)
foo(); // should pass
if (!g_isMemoryValid)
return;
foo(); // should pass too
Оберните их мьютексом, который разблокирован, когда 'g_isMemoryValid' станет истинным? – Shark
У вас есть доступ к исходному коду 'foo()', чтобы вы могли самостоятельно изменить эту функцию? В качестве альтернативы, вы можете реализовать функцию-оболочку для 'foo()'? –
'#define CHECKED_FOO() if (g_isMemoryValid == true) foo();' – LPs