Это легче всего сделать с помощью процессора со встроенной трассировкой, конструкции платы, которая предоставляет порт трассировки, и подходящего аппаратного отладчика и связанного программного обеспечения. Например, многие устройства на базе Cortex-M включают встроенную макроячейку трассировки ARM (ETM), и это поддерживается отладчиком uVision IDE и отладчиком ULINK-Pro от Keil для обеспечения покрытия кода и трассировки на уровне команд / источника, а также профилирования в реальном времени. Преимущество аппаратной трассировки заключается в том, что она не навязчива - код выполняется в режиме реального времени.
Если у вас нет аппаратной поддержки, возможно, вам придется прибегнуть к симуляции. Многие цепочки инструментов включают в себя симулятор уровня команд, который будет выполнять трассировку, покрытие кода и профилирование, но вам, возможно, придется создавать сценарии отладки или заглушки кода, чтобы моделировать аппаратные средства для принудительного выполнения всех путей.
Третий вариант - создать код на платформе настольного компьютера с заглушками для замены целевых аппаратных зависимостей, а также выполнить тестирование и охват кода. Вы должны верить, что целевой компилятор C и тестовый системный компилятор переводят исходный код с идентичной семантикой. Преимущество здесь в том, что доступные инструменты отладки часто превосходят инструменты, доступные для встроенных систем. Вы также можете протестировать большую часть своего кода до того, как станет доступным какое-либо оборудование, и в большинстве случаев выполнять код намного быстрее, что, возможно, позволяет проводить более обширное тестирование.
Отсутствие POSIX API не исключает использование GCC, оно просто исключает использование библиотеки GNU C. Во встроенных системах без POSIX используются альтернативные библиотеки C, такие как Newlib. Newlib имеет уровень системного портирования, в котором реализованы операции ввода-вывода и базового управления кучей.