Dipende, e questo è generalmente vero per tutti gli strumenti, non solo per C30.
Le ottimizzazioni spesso rimuovono e / o ristrutturano il codice in vari modi. L'istruzione switch può essere reimplementata con un costrutto if / else o in alcuni casi può essere rimossa tutta insieme. y = x * 16 può essere sostituito con una serie di turni a sinistra, ecc. sebbene quest'ultimo tipo di ottimizzazione possa di solito essere ancora superato, è soprattutto la ristrutturazione dell'istruzione di controllo che ti ottiene.
Ciò può rendere impossibile il passaggio di un debugger nel codice C poiché le strutture definite in C non esistono più, sono state sostituite o riordinate dal compilatore in qualcosa che il compilatore ritiene sia più veloce o utilizza meno spazio. Può anche rendere impossibile impostare i punti di interruzione dall'elenco C poiché le istruzioni su cui si è interrotti potrebbero non esistere più. Ad esempio, potresti provare a impostare un punto di interruzione all'interno di un'istruzione if, ma il compilatore potrebbe averlo rimosso. Puoi provare a impostare un punto di interruzione all'interno di un ciclo while o for, ma il compilatore ha deciso di srotolarlo in modo che non esista più.
Per questo motivo, se è possibile eseguire il debug con ottimizzazioni disattivate, in genere è più semplice. Devi sempre ripetere il test con le ottimizzazioni attivate. Questo è l'unico modo per scoprire che ti sei perso un importantevolatile
e che causa guasti intermittenti (o qualche altra stranezza).
Nel caso dello sviluppo integrato, devi comunque fare attenzione alle ottimizzazioni. Soprattutto nelle sezioni di codice che sono fondamentali per il tempismo, ad esempio alcuni interrupt. In questi casi è necessario codificare i bit critici nell'assembly o utilizzare le direttive del compilatore per assicurarsi che queste sezioni non siano ottimizzate, in modo da sapere che hanno un tempo di esecuzione fisso o un tempo di esecuzione nel caso peggiore fisso.
L'altro gotcha può inserire il codice nell'UC, potrebbe essere necessario ottimizzare la densità del codice per adattare semplicemente il codice al chip. Questo è uno dei motivi per cui di solito è una buona idea iniziare con la più grande capacità della ROM in una famiglia e sceglierne una più piccola per la produzione, dopo che il codice è bloccato.