Depende, y esto es generalmente cierto para todas las herramientas, no solo para C30.
Las optimizaciones a menudo eliminan y / o reestructuran el código de varias maneras. Su declaración de cambio puede volver a implementarse con una construcción if / else o, en algunos casos, puede eliminarse por completo. y = x * 16 puede ser reemplazado por una serie de turnos a la izquierda, etc. Aunque este último tipo de optimización por lo general todavía puede ser superado, es principalmente la reestructuración de la declaración de control lo que lo hace.
Esto puede hacer que sea imposible pasar a un depurador a través de su código C porque las estructuras que definió en C ya no existen, fueron reemplazadas o reordenadas por el compilador en algo que el compilador cree que será más rápido o que usará menos espacio. También puede hacer que los puntos de interrupción sean imposibles de establecer desde la lista de C, ya que es posible que la instrucción de interrupción ya no exista. Por ejemplo, puede intentar establecer un punto de interrupción dentro de una sentencia if, pero el compilador puede haber eliminado eso si. Puede intentar establecer un punto de interrupción dentro de un tiempo o para un bucle, pero el compilador decidió desenrollar ese bucle para que ya no exista.
Por esta razón, si puedes depurar con las optimizaciones desactivadas, generalmente es más fácil. Siempre debe volver a probar con optimizaciones en. Esta es casi la única forma en que descubrirá que se perdió un volatile
importante y que causa fallas intermitentes (o alguna otra rareza).
En el caso del desarrollo integrado, debe tener cuidado con las optimizaciones de todos modos. Específicamente en secciones de código que son críticas en el tiempo, algunas interrupciones, por ejemplo. En estos casos, debe codificar los bits críticos en el ensamblaje o usar directivas de compilación para asegurarse de que estas secciones no estén optimizadas para que sepa que tienen un tiempo de ejecución fijo o un tiempo de ejecución en el peor de los casos.
El otro gotcha puede ser el ajuste de código en la unidad de control, es posible que necesite optimizaciones de densidad de código para simplemente encajar su código en el chip. Esta es una de las razones por las que, por lo general, es una buena idea comenzar con la capacidad de ROM más grande en una familia y solo elegir una más pequeña para la fabricación, una vez que su código esté bloqueado.