Projekte
BirgerT
nibo2_Birger_01
nibo2_main.c
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
nibo2_Birger_01
blib_utils.c
blib_utils.h
BSD_license.h
nibo2_global.h
nibo2_main.c
nibo2_main_01.h
nibo2_pwm_leds.c
nibo2_pwm_leds.h
nibo2_sensors.c
nibo2_sensors.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7427 private projects
385 public projects
16181052 lines compiled
58220 builds
NIBO
@
nibo2_birger_1/nibo2_main.c [read only]
/* NIBO2 C project */ ////////////////////////////////////////////////////////////////////////// // // NIBO2 BIRGER // // (c) Birger Töpelmann toepelmann(A)web.de Version 150406a // // Das Hauptprogramm mit der MAIN Function aus der die diversen // Funktionen aufgerufen werden. // // In nibo2_global.h werden bereits sämtliche Bibliotheks- // header eingebunden sowie einige Makros und Typen definiert. // // MAIN // - Initialisierung der Komponenten in deren INIT Funktionen // - Menue Programm, Statusanzeigen, Startsignal // - Die Mainloop soll alle 100ms einmal durchlaufen werden und // wesentlich weniger als 100ms MCU Rechenzeit benötigen. // // Es dürfen keine blockierenden Delays() oder Warte(Bedingung)-Schleifen // programmiert werden, die länger als wenige milliSekunden dauern - // Stichwort Kooperatives Multitasking. // // FUNKTION MAIN_ZYKLUS // Anfang und Ende jedes Schleifendurchlaufs. In dieser Funktion // werden nach jedem Durchlauf einer Programmschleife Funktionen mit // niedrigerer Priorität so oft / solange ausgeführt, bis die 100ms // Zykluszeit erreicht sind: // - Fortsetzen der (String-)Ausgabe an die Buffer für die UARTs, // die Soundausgabe, // - Erzeugung der Sekundenimpulse // - Kopieren der Statusflags // // Zeitkritische Funktionen werden über Timerinterrupts bzw. über den // SPI Transceive Interrupt der Copro Kommunikation abgearbeitet. // // ////////////////////////////////////////////////////////////////////////// // // BSD License see "license.h" #include "BSD_license.h" // // // NIBO2_GLOBAL: // - Einbinden aller erforderlichen Bibliotheksheader // - Globale Definitionen und Makros // // Diese Datei muss in jedes Programmmodul eingebunden werden. // #include "nibo2_global.h" // #ifdef __cplusplus extern "C" { #endif // void main_zyklus(uint8_t zeit); // ////////////////////////////////////////////////////////////////////////// // // weitere Programmteile in main.c einbinden // #include "nibo2_main_01.h" // Nibo 2 - Test Systemtimer 1 und PWM // ////////////////////////////////////////////////////////////////////////// // // MAIN ZYKLUS // // "Delay"-Funktion zum Erreichen einer fixen Zykluszeit. // -> zeit = abzuwartender Zeitpunkt in ms, nach dem letzten Aufruf // void main_zyklus(uint8_t zeit){ sei(); // Zeitdauer der Mainloop für spätere Ausgabe merken pwm.cmain = pwm.cycle; // ´Mainzyklus Maxwert für Diagnose/Debugging if (pwm.cycle > pwm.cmax) { pwm.cmax = pwm.cycle; } // inline Funktion in main_xx.h nibo2_main_update(); // Warten bis feste Zykluszeit erreicht do {;} while(pwm.cycle < zeit); // Zeitdauer der gesamten Mainloop merken pwm.clast = pwm.cycle; pwm.cycle -= zeit; // Sekundentakt: // bei einem Sekundenwechsel enthält pwm.sec_tick die Sekunden 1..60 // immer nur in dem main_zyklus, der dem Sekundenwechsel folgt. if (pwm.slast != pwm.sec) { pwm.slast = pwm.sec; pwm.sec_tick = 1 + pwm.sec; } else { pwm.sec_tick = 0; } } // ////////////////////////////////////////////////////////////////////////// // // M A I N I N I T // // Funktionen zur ersten Initialisierung der NIBO2 Resourcen // // int main() { // Timer1 = Systemuhr und PWM Generator für die LED Helligkeit // Server für 10ms Serviceroutinen starten pwmleds_init(); // in nibo2_pwm_leds sei(); ////////////////////////////////////////////////////////////////////////// // // Programmverzweigung nach Reset und vor der Hauptschleife: // // 1.- SW3 drücken und halten // 2.- Reset drücken oder Einschalten // 3.- SW3 loslasssen // -> zum Setup- / Testprogramm // ////////////////////////////////////////////////////////////////////////// // Ist Taster SW3 beim Start gedrueckt.. if(SW3_PLAY){ // ...warte bis SW3 losgelassen.. while(SW3_DOWN){ delay_ms(10); // Entprellen } // TODO: CoPro Hexfile in CoPro flashen } // ////////////////////////////////////////////////////////////////////////// // // // M A I N L O O P // nibo2_main_init(); // Anwendungsprogramm in nibo2_main.h // pwm.cycle = 0; // Reset Zeitbasis Umlaufverzoegerung in ms while(1==1) { // // main_zyklus(100); // Main_Loop Delay 100ms, und Update der IOs nibo2_main_loop(); // Anwendungsprogramm in nibo2_main.h // } // while // // noch eine Endlosschleife, falls in LOOP ein break zuviel ist while(1==1) {;} return 0 ; }; // main #ifdef __cplusplus } // extern "C" #endif // // EOF
Compiler results:
Werbung
Online
adellreinoso82318550
Bogdanasf
josch
paulinegonsalves19
randalspann5740