Faccio entrambe le cose, quindi ecco il mio punto di vista.
Penso che l'abilità più importante in assoluto sia la tua capacità di debug. La mentalità richiesta è molto diversa in quanto molto di più può andare storto e devi essere molto aperto a considerare tutti i diversi modi in cui ciò che stai cercando di fare può andare storto.
Questo è il problema principale per i nuovi sviluppatori embedded. Le persone di PC tendono ad averlo più rozzo, poiché sono abituate a lavorare così tanto per loro. Tenderanno invece a perdere molto tempo a cercare strumenti per fare le cose per loro (suggerimento: non ce ne sono molti). Ci sono molte teste che sbattono ancora e ancora nei muri, non sapendo cos'altro fare. Se ti senti bloccato, fai un passo indietro e scopri se riesci a identificare cosa potrebbe andare storto. Passa sistematicamente attraverso il restringimento del tuo elenco di potenziali problemi fino a quando non lo capisci. Da questo processo deriva direttamente che è necessario limitare la portata dei problemi non cambiando troppo in una volta.
Le persone embedded con esperienza tendono a dare per scontato il debug ... la maggior parte delle persone che non riescono a farlo bene non durano a lungo (o lavorano in grandi aziende che accettano semplicemente "il firmware è difficile" come risposta al perché una determinata funzionalità è in ritardo di anni)
Stai lavorando su un codice che gira su un sistema esterno al tuo sistema di sviluppo, con vari gradi di visibilità sul tuo target da una piattaforma all'altra. Se sotto il tuo controllo, cerca aiuti allo sviluppo per aumentare questa visibilità nel tuo sistema di destinazione. Usa le porte seriali di debug, l'output di debug del bit banging, la famosa luce lampeggiante, ecc. Sicuramente come minimo impara come usare un oscilloscopio e usa l'I / O pin con l'ambito per vedere quando alcune funzioni entrano / escono, fuoco ISR, ecc. Ho visto le persone lottare per anni letteralmente più a lungo del necessario semplicemente perché non si sono mai preoccupati di impostare / imparare come utilizzare un collegamento debugger JTAG corretto.
È molto più importante essere molto consapevoli di quali risorse hai in relazione a un PC. Leggi i fogli dati con attenzione. Considera il "costo" delle risorse per tutto ciò che stai cercando di fare. Scopri i trucchi di debug orientati alle risorse come riempire lo spazio dello stack con un valore magico per tenere traccia dell'utilizzo dello stack.
Sebbene sia richiesto un certo grado di debug sia per PC che per software embedded, è molto più importante con embedded.