Hallo Zusammen
Ich hoffe ihr könnt mir weiterhelfen. Es ist eigentlich eher ein
grundlegendes C Problem als speziefisch eines mit Timer.
Folgendes:
Ich habe verschiedene hrtimer in einem Linux Kernel Modul am laufen. Die
sind in einem Array pwm_devices[] organisiert. Ist ein solcher hrtimer
abgelaufen wird immer dieselbe callback Funktion aufgerufen.
In dieser callback Funktion muss ich herausfinden welcher hrtimer nun
die callback Funktion aufgerufen hat.
Aber gerade dieser Vergleich scheint dem compiler nicht zu gefallen.
Der compiler meint:
invalid operands to binary == (have 'struct hrtimer' and 'struct hrtimer
**')
Es geht eigentlich nur um den Vergleich:
if(pwm_devices[i].pwmHRTimer == &timer){
Was mach ich falsch?
Der Callback code:1 | enum hrtimer_restart my_hrtimer_callback( struct hrtimer *timer ) |
2 | {
|
3 | int i; |
4 | ktime_t now; |
5 | |
6 | for(i = 0; i < PWM_DEVICES; i++){ |
7 | if(pwm_devices[i].pwmHRTimer == &timer){ |
8 | now = hrtimer_cb_get_time( &pwm_devices[i].pwmHRTimer ); |
9 | |
10 | //if the hightime flag was true then set the lowtimer as next
|
11 | if(pwm_devices[i].highTimer_active){ |
12 | hrtimer_forward( &pwm_devices[i].pwmHRTimer, now, pwm_devices[i].ktime_lowtime); |
13 | }
|
14 | else{ |
15 | hrtimer_forward( &pwm_devices[i].pwmHRTimer, now, pwm_devices[i].ktime_hightime); |
16 | }
|
17 | |
18 | pwm_devices[i].highTimer_active = (pwm_devices[i].highTimer_active == 1 ? 0 : 1); |
19 | |
20 | /* Set PIN Value */
|
21 | gpio_set_value(pwm_pins[i].gpio, pwm_devices[i].highTimer_active); |
22 | |
23 | break; |
24 | }
|
25 | }
|
26 | |
27 | return HRTIMER_RESTART; |
28 | }
|
Bin um jeden Vorschlag dankbar.