Intro till mikrokontroller felsökning (och en Pomodoro Timer) (5 / 9 steg)
Steg 5: Brytpunkter, lokalbefolkningen och register
Så, låt oss ta en titt på funktionen "setLEDs". Antingen är det få fel värde eller ta emot rätt värde men visar fel värde (eller en konstig kombination av båda).
Bläddra ner till den första raden av funktionen setLEDs (linje 22, se bild 1). Högerklicka på någon del av den linjen och välj "Brytpunkt (kod)". Observera den röda pricken till vänster om denna kodrad? Du kan dubbelklicka på i denna vinstmarginal att Ställ in/inaktivera brytpunkter också. (bild 2) En brytpunkt är en punkt den i koden där programkörningen kommer att bryta så att du kan felsöka.
Tryck på med brytpunkt set, den "återställa" (
) knappen. När du trycker på "återställa" du ska meddelas med ett lång omständlig meddelande som säger att det kan ta lång tid att 'Kör till main'. Det betyder att din debugger är att stanna vid den första raden i den huvudsakliga funktionen, men din enda hårdvara brytpunkt på rad 22. För att stoppa på main, kommer att programmet utföra en rad i taget tills det blir till huvudsakliga. Just nu, det är inte ett stort problem, men denna begränsning kan vara besvärande med mer komplicerad kod. Observera att mer kapabel microcontrollers kan tillåta många mer hårdvara brytpunkter, men en är bättre än ingenting (Ja, jag är tittar på du Arduino). :)För nu, bara förstå, att om en brytpunkt är när du startar din kod, det tar en extra sekund eller två för att nå största.
Usch... Okej. Den gröna pilen är på den första raden i main nu (linje 50, se bild 3)? Bra, nu vi kunde enda steg (dvs "Stega" (
)) hela vägen till setLEDs funktion, men detta kan ta mycket lång tid. Istället, eftersom vi har en brytpunkt, vi träffade bara "gå" ().Nästan omedelbart, bläddrar den gröna pilen till rad 22. För att få en bättre uppfattning om vad funktionen gör, välj "Visa"→"lokalbefolkningen" från menyn. (bild 4) I fönstret som kommer upp, den lokala variabeln "värde" visas med... err... det värdet, "0x1e". Att högerklicka på variabeln i lokalrutan kan du ändra bas beteckningssystemet av värdet. Ändra till decimal och märker nu när funktionen verkligen komma förbi rätt nummer (30).
Eftersom denna funktion bara handlar om en enda variabel och vi vet att det är korrekt, låt oss stänga fönstret "lokalbefolkningen". Nu välja "Visa" → "registrera" från menyn. I fönstret "registrera" ändra i listrutan Visa "Port 1/2". Expandera trädet "P1OUT". (bild 5)
P.0 och P.7 kan ha slumpmässiga värden men s.1-P.6 bör alla vara noll. Tryck på "Stega" (
) ett par gånger. Som vi enda steg genom koden, kan vi titta på registren ändra. Du behöver inte ens titta på databladet att veta att P1OUT registret är delstaten digital stiften på mikrokontroller eftersom lamporna bör återspeglar vad du ser i fönstret "Register". Röda värderingar i fönstret "registrera" innebär att senaste instruktion som utfördes ändrat det särskilt värdet. Detta gäller variabler i fönstret "Lokalbefolkningen".Observera att värdet endast blir röd om registret ändras, så efter att ha exekverat linje 45, registret är röd och visar en 1 i stället för den förväntade 0. Vi hittade vår bugg! Ser ut som jag vänt de binära operatorerna. (bild 6)