Propeller Autopilot (5 / 13 steg)
Steg 5: En anteckning om Spin
Oavsett, har detta projekt utvecklats med propeller chip, som är mest lätt skriven i Spin.
Detta är en bra tid att observera Parallaxs välvilja mot öppen källkod. Propeller chipet är nu helt programmerbara i C/C++ tack vare skapandet SImpleIDE. Majoriteten av detta projekt skrevs SimpleIDE på grund av dess användarvänlighet installera till Linux, och för accesiblity till comunication portar.
https://sites.Google.com/site/propellergcc/documentation/simpleide
Medan jag föredrar att koda detta projekt i C++ (för användning av 2D arrayer, och för en ytligare inlärningskurva) kommer alla exempelkod jag har skrivit för detta projekt att snurra. Detta har gjorts för att maximera funktionalitet innan tävling.
Spin: Förbi värde
Passerar variabler av värdet i Spin är mycket lik c ++. Den enda stora skillnaden är att när du deklarerar en lokal variabel i spinn, inte ge dig namnet en typ, (dvs byte, word, long). Detta är vilseledande eftersom det gör det verka som Spin har dynamisk minnesallokering; för allt jag kunde säga, detta är inte fallet.
Spin: Passera genom hänvisning
Passerar variabler i Spin är relativt lätt. Det är dock olika från C++ i som du inte klarar en pekare, du bara passera minnesadressen av värdet, och dereference adress inom funktionen. Jag använde denna metod för att skicka parametrar omfattande samtidigt utveckla olika vector math funktion. I följande exempel fyller vi varje variabel i båda matriser med nummer 1. Minnesplatser hämtas med den "symbol och minne platser är avrefererade genom redeclaring variabeltyp och sätta variabeln i"[]":
Spin: Float matematik
Float matematik spinn är jätte jobbigt. Jag hittade fyra olika bibliotek för att använda float matematik spinn, de använder olika antal kuggar och köra vid skillnaden hastighet, och är ganska självförklarande. En sak värd att notera: om du är deklarera en konstant eller variabel till ett specifikt värde direkt i koden, och du tänker använda flyttalsoperationer, måste du se till att du sätter ett decimaltecken i slutet av varje nummer.
Spin: Särskilda register
Det finns en hel del särskilda register i Spin. Jag kommer att köra igenom några av dem här, men om du verkligen menar allvar med propeller chip, du bör definitivt läsa Versionsfakta ansökan, samt ladda ner en kopia av handboken till din dator. De flesta av dessa register kommer att användas i kodexemplen på nästa steg.
DIRA: Detta register avgör vilken IOs på propellern chip utgångar och ingångar. Du kan skriva till dessa register med binär, decimal eller hex. Det mest intuitiva sättet, men är binära. Varje bit i registret representerar en av propeller 32 IOs. Tilldela en 0 eller 1 till det lite tilldelar det IO som en ingång eller utgång.
CTRA/CTRB: Dessa två register ställa counter lägen används av varje timer. Vi använder två olika räknare beroende på om vi mäta en puls längd, eller skriva en.
PHSA/PHSB: Dessa register är där det ackumulerade värdet genereras av våra räknare faktiskt lagras. På dess mest grundläggande lagras antalet avverkade klockcykler här.
FRQA/FRQB: Dessa register innehåller en faktor som skalar disk varje gång den lagrar till PHSA/B.
Om allt detta prat om timers och counter lägen är obekant för dig, bör du definitivt läsa Although det inte kan vara helt vara nödvändigt, jag skulle starkt rekommendera läsa igenom alla propeller counter lägen. Med hjälp av räknaren ordentligt ger dig otrolig kontroll över lägsta-nivå-IO funktioner och gör att du fudge dig igenom nästan alla digitala kommunikationsprotokoll:
http://www.parallaxsemiconductor.com/an001