Depende, y esto es generalmente cierto para todas las herramientas, no solo 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 desplazamientos a la izquierda, etc. aunque este último tipo de optimización generalmente puede ser atravesado, es principalmente la reestructuración de la declaración de control lo que te da.
Esto puede hacer que sea imposible pasar 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 usará menos espacio. También puede hacer que los puntos de interrupción sean imposibles de establecer desde la lista C ya que la instrucción en la que rompió ya no existe. Por ejemplo, puede intentar establecer un punto de interrupción dentro de una instrucción if, pero el compilador puede haber eliminado ese if. 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 puede depurar con optimizaciones desactivadas, generalmente es más fácil. Siempre debe volver a realizar pruebas con optimizaciones activadas. Esta es la única forma en que descubrirás que te perdiste un importante volatile
y está causando 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 las directivas del compilador 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 del peor de los casos fijo.
El otro problema puede ser ajustar el código en el uC, es posible que necesite optimizaciones de densidad de código para simplemente ajustar su código en el chip. Esta es una de las razones por las cuales, por lo general, es una buena idea comenzar con la capacidad de ROM uC más grande de una familia y solo elegir una más pequeña para la fabricación, después de que su código esté bloqueado.