Stap 4: Andere Hardware / Software trucs
Er is een aantal andere dingen gaande in de broncode die ik in dit verstrekt heb instructible, die is vermeldenswaard.
Datum / tijd van Code:
Voor het berekenen van datum / tijd ik gebruikte de clib bibliotheekfuncties. Dit ia een weinig netelig omdat clib malloc gebruikt te grijpen chucks van geheugen. Dit veroorzaakt problemen voor een RTOS dat schakelaar om te belasten moet. De oplossing is om clib de malloc-functies gebruiken in de OS in plaats van de malloc-functies in de bibliotheek. Gelukkig, sommige aardige vent op het Internet het geregeld en een oplossing beschikbaar gesteld. Zie de Michal Demin-website voor meer info.
Dus, de hardware gebruikt het externe 32.768 kHz kristal om een 32-bits teller verhogen één keer per seconde. De teller is batterij back (-cel van lithiummagnesiumoxide) en doet niet steeds opnieuw krijgen. Het opnieuw instellen van hardware, debuggen, of reflashing is niet de teller instellen! De teller kan worden ingesteld via software, echter. De waarde instelt op het aantal seconden sinds 1 januari 1970 clib gelukkig maakt. Eenmaal ingesteld, er zijn een heleboel clib functies om tijden te berekenen. Opmerking, gegeven een datum / tijd / timezone, clib kunt omkeren het aantal seconden voor u berekenen.
Zodra clib de tijdzone weet, de datum / tijdfuncties zijn klaar om te gaan. De datum / tijd op het LCD-scherm is goed, ongeacht de tijd van daglichtbesparingen, schrikkeljaar, of elke andere rommel die ik niet begrijp. In feite, eenmaal ingesteld, de datum / tijd moet goed jaar voor jaar (met uitzondering van kien).
Om de datum / tijd, ik uncomment een sectie met code (kijk in ctime.c in de buurt van de bovenkant), dat de omgekeerde tijd berekening doet. De 32 bit-teller wordt bijgewerkt en het programma blijft. Dan, ik commentaar uit de datum / tijd code die de tijd stelt en de micro reflash. Het is een vervelende hack -, maar ik liep uit het hacken van SAP om te schrijven wat knopcode als u wilt instellen van de tijd / datum. Voel je vrij.
Debug Console:
Ik begonnen ben om sommige code toevoegen een debug console te schrijven. Het idee is, neem één van de ongebruikte UART-kanalen en gebruiken voor toepassing Foutopsporingsberichten. De console kan ook worden interactieve, zodat herhaalde berichten kunnen worden toggled in- en uitschakelen. Ik heb dit gebruikt dus ik kan kijken analoge waarden schuiven. Het is mooi voor zitten kundig voor zet dit aan, en uit.
Eigenschappen van de debug console omvatten:
- Debuggen console wordt uitgevoerd als een afzonderlijke taak - de laagste prioriteit. Ontworpen om lage impact op het systeem.
- Andere taken kunnen noemen "vDebugPrintf()" voor het verzenden van een opgemaakte bericht uit de debug seriële poort.
- De opgemaakte berichten worden geladen in een OS FIFO wachtrij.
- De debug-taak overdraagt voortdurend karakter uit de FIFO-wachtrij en op de seriële poort.
- De lichtgewicht broncode voor de vDebugPrintf is voorzien, zodat u kunt uw eigen speciale spullen.
Automatische RC PWM-uitgang:
Twee pinnen geweest setup met een 50Hz PWM-uitgang. Het idee is dat deze pinnen zullen worden gebruikt om te rijden RC servomotoren in de toekomst. Met een eenvoudige schrijfbewerking naar een micro register die het pulserend sproeien van de PWM-uitgang kan worden gewijzigd, zou een aangesloten RC servomotor dan reageren op mijn verplaatsen naar de nieuwe positie.
Nogmaals, dit toont enkel hoe gemakkelijk het is om hardware setup en controle. Het genereren van een PWM-uitgang met micro tweede resolutie zonder enige hardware helpen zou een grote ruzie. De ARM-hardware maakt dit allemaal gemakkelijk.
Automatische analoog naar digitaal conversie:
Deel van mijn initialiseren hardware omvat een paar AtoD kanalen instellen. Recht nu, heb ik vier kanalen instellen die gebruikmaken van een andere DMA-kanaal. Als een conversie voltooid is, kopieert het DMA-kanaal u de waarde naar een RAM-buffer automatisch. De analoog naar digitaal convertor dan verplaatst naar de volgende pin automatisch. Het hele proces herhaalt zich over en weer allemaal zonder CPU overhead.
De RAM-buffer heeft dus altijd de nieuwste (meeste omhoog tot nu toe) analoog naar digitale waarden. Eenvoudig gebruik de waarden van de RAM bufferen en weet zij zijn de meest verse. Up to date houden van de RAM values is allemaal gedaan zonder enige onderbreking van de micro!
CPU inactief Counter:
Wanneer de OS heeft geen werk te doen (alle taken zijn in een ruststand) de OS roept een andere gebruiker callback functie genaamd "vApplicationIdleHook()". Ik geprogrammeerd deze functie gewoon een 32-bits om teller te verhogen.
Nadat een seconde (100 OS teken) is verstreken kan de waarde van de teller worden afgedrukt op de debug console. De teller dan op nul wordt teruggesteld en het proces herhaalt.
Door te kijken naar de debug console afdruk van de idle haak kunnen we zien hoeveel tijd er niet-actief is in het OS. Kinda als het kijken naar de grafiek van de CPU laden op een PC.
Zelfs met alles wat er gaande is in het OS, RC PWM-uitgangen, de overdracht van de gegevens van LCD, analoog naar digitaal conversie, LED twiddling, de idle haak rekken tot meer dan 350.000 tellingen per seconde! Gewoon geweldig, er is wat veel PK overgebleven gezien hoeveel de CPU al doet. Deze baby heeft sommige benen!