Зависит, и это в целом верно для всех инструментов, не только C30.
Оптимизации часто удаляют и / или реструктурируют код различными способами. Ваш оператор switch может быть переопределен конструкцией if / else или в некоторых случаях может быть удален все вместе. y = x * 16 может быть заменено серией левых сдвигов и т. д., хотя этот последний тип оптимизации, как правило, все еще можно пройти, в основном это реструктуризация оператора управления, которая получает ya.
Это может сделать невозможным пошаговое выполнение отладчиком вашего кода C, поскольку структуры, которые вы определили в C, больше не существуют, они были заменены или переупорядочены компилятором в нечто, что, по мнению компилятора, будет быстрее или займет меньше места. Это также может сделать невозможным установку точек останова из списка C, так как инструкция, по которой вы взломали, больше не существует. Например, вы можете попытаться установить точку останова внутри оператора if, но компилятор, возможно, удалил ее, если. Вы можете попытаться установить точку останова в цикле while или for, но компилятор решил развернуть этот цикл, чтобы он больше не существовал.
По этой причине, если вы можете отлаживать с отключенной оптимизацией, это обычно проще. Вы всегда должны перепроверять с оптимизацией на. Это единственный способ узнать, что вы пропустили важное, volatile
и оно вызывает периодические сбои (или некоторые другие странности).
В случае разработки встраиваемых систем, вы все равно должны быть осторожны с оптимизацией. В частности, в тех разделах кода, которые критичны по времени, например, некоторые прерывания. В этих случаях вы должны либо кодировать критические биты в сборке, либо использовать директивы компилятора, чтобы убедиться, что эти разделы не оптимизированы, чтобы вы знали, что у них фиксированное время выполнения или фиксированное время выполнения в худшем случае.
Другая проблема может заключаться в том, чтобы встраивать код в ОК, вам может потребоваться оптимизация плотности кода, чтобы просто вставить ваш код в чип. Это одна из причин, почему обычно лучше начинать с наибольшей емкости ПЗУ в семействе и выбирать только меньшую для производства, после того как код заблокирован.