Hi, Ich suche gerade Funktionen um Timing mit einem Scheduler für einen AVR8 (AT90USB162) zu machen. Der Scheduler macht hauptsächlich nur das USB, und einen Task von mir (der ruft die Funktionen einfach nur hintereinander auf). Ich schalte Ventile mit dem Ding, das Timing davon muss so auf 1-10ms genau sein. _delay_ms / us geht nicht weil der USB-Task weiterlaufen soll. beim AVR32 hatte ich für sowas die cycle_counter.h Funktionen mit denen ich die aktuellen Millisekunden seid dem Anschalten abfragen konnte. Gibts sowas für AVR8? bzw. wie würde man es sonst machen?
Marius Wensing schrieb: > Stichwort: Timer Da hasste dir ja viel mühe gegeben, also: es gibt da nichts fertiges für den AVR8? Sonst Timer+Interrupt+Zählen oder was?
gb87 schrieb: > Marius Wensing schrieb: >> Stichwort: Timer > > Da hasste dir ja viel mühe gegeben, Wie man in den Wald hineinruft .... > Sonst Timer+Interrupt+Zählen oder was? letzten Endes: genau so. Wie das bei deinem Scheduler konkret aussieht und ob es da etwas Fertiges gibt, weiß die Doku zu deinem Scheduler.
Ich dachte halt bei so einem Standard Problem gibts da schon was fertiges, ich konnte aber nichts richtiges finden. Hätte mir gedacht dass das schon hunderte Programmierer vor mir geschrieben haben und den Code optimiert haben etc... Karl Heinz Buchegger schrieb: > Wie das bei deinem Scheduler konkret aussieht und ob es da etwas > Fertiges gibt, weiß die Doku zu deinem Scheduler. while(1) { funktion1(); funktion2(); .... } Das ist der Scheduler ;) ich hätte halt was gesucht wo man gleich funktionen hat um dem timer/interrupt zu starten und ein funktionen um die Zeit ab dem Start im MS abzufragen (wie halt der cycle_counter vom AVR32)
Hallo gb87, es sei auf: a) Beitrag "Wartezeiten effektiv (Scheduler)" b) http://www.cocoos.net/ verwiesen. Beide Systeme setzte ich ein und sie laufen 1A. Um den Timer(-steuerung) musst Du dich selber kümmern, da man nicht wissen kann, welche Du sonst noch verwendest. Stichwort PWM.. Beispiel: cocoos.net
1 | int main(void) |
2 | {
|
3 | cli(); |
4 | wdt_reset(); |
5 | |
6 | /* Setup ports, clock... */
|
7 | system_init(); |
8 | |
9 | /* Initialize cocoOS */
|
10 | os_init(); |
11 | |
12 | /* Create event objects */
|
13 | |
14 | twi_received_event = event_create(); |
15 | rs232_received_event = event_create(); |
16 | |
17 | /* Create kernel objects */
|
18 | |
19 | // 7-segment LED Multiplexer
|
20 | task_create( task_7d_led, 1, NULL, 0, 0 ); |
21 | task_create( task_twi_request_data, 2, NULL, 0, 0 ); |
22 | task_create( task_rs232_request_data, 3, NULL, 0, 0 ); |
23 | task_create( task_wdt_reset, 4, NULL, 0, 0 ); |
24 | task_create( task_send_alive, 5, NULL, 0, 0 ); |
25 | |
26 | clock_init_us(CLOCK_TICK_US); |
27 | |
28 | os_start(); |
29 | |
30 | return 0; |
31 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.