Forum: Digitale Signalverarbeitung / DSP / Machine Learning C-code in Code Composer Studio 3.3


von Tu T. (tequila)


Lesenswert?

Hallo zusammen,
ich bin ganz neu in dsp,und benutze grad ezdsp28335 um ACI 
feldorientiert zu regeln.Ich hab TI-beispielcode für f280x geguckt,aber 
nicht alles verstanden.

OriginalCode von TI:
1
typedef float  float32;
2
typedef unsigned long Uint32;
3
typedef struct {float32 duty3;
4
                void (*update)();
5
                }PWMGEN;
6
typedef PWMGEN *PWMGEN_handle;
7
8
#define PWMGEN_DEFAULTS {0.0,(void (*)(Uint32))PWM_Update}
9
10
void PWM_Update(PWMGEN_handle v);
11
12
PWMGEN pwmgen = PWMGEN_DEFAULTS;
13
14
15
void main(void)
16
{
17
  pwmgen.update(&pwmgen);
18
}
19
20
void PWM_Update(PWMGEN_handle v){}
Könnte jemand mir erklären,was für eine syntax ist dies
1
(void(*)(Uint32))PWM_Update
??also was für eine typumwandlung ist das?

Ich hab nach meiner art so gemacht,und fehlerfrei kompiliert aber wenn 
der cursor auf
1
pwmgen.update(&pwmgen);
 dann CCS sagt "symbol definition not found".Woran liegt es?
1
typedef float  float32;
2
typedef struct struct_PWM{  float32 duty3;
3
          void (*update)(struct struct_PWM*);
4
       }PWMGEN;
5
6
typedef PWMGEN *PWMGEN_handle;
7
8
#define PWMGEN_DEFAULTS {0.0,PWM_Update}
9
10
void PWM_Update(PWMGEN_handle v);
11
12
PWMGEN pwmgen = PWMGEN_DEFAULTS;
13
14
15
void main(void)
16
{
17
   pwmgen.update(&pwmgen);
18
}
19
20
void PWM_Update(PWMGEN_handle v){}

vielen vielen dank im voraus!
gruß aus uni hannover:-)

von Michael K. (Gast)


Lesenswert?

> Könnte jemand mir erklären,was für eine syntax ist dies
>
> (void(*)(Uint32))PWM_Update
>
> ??also was für eine typumwandlung ist das?
Ich tippe auf einen Funktionszeiger. Da es ja auch eine Funktion namens 
PWM_Update gibt, macht diese Vermutung auch Sinn. Diese Funktion hat 
keinen Rückgabewert (void) und erwartet einen 32bit-Wert (Uint32).

> Ich hab nach meiner art so gemacht,und fehlerfrei kompiliert aber wenn
> der cursor auf
>
> pwmgen.update(&pwmgen);
>
>  dann CCS sagt "symbol definition not found".Woran liegt es?
Vielleicht daran dass du
1
typedef struct ...
geändert hast!?

Warum lässt du das Ganze nicht wie es ist bzw. was willst du mit der 
Änderung erreichen?

von Tu T. (tequila)


Lesenswert?

hi Michael,danke für deinen antwort:-)
> Diese Funktion erwartet einen 32bit-Wert (Uint32).
Du meinst,die parameter von dieser funktion ist eine 32bit-wert-adresse?

> Vielleicht daran dass du
1
typedef struct ...
geändert hast!?
Ich hab nachgedacht,und vermutte mal,das liegt daran dass der poiter 
"update" nicht auf die erwartete funktion
1
void PWM_Update(PWMGEN_handle v)
 gezeigt,wenn es um meinen code geht.

> Warum lässt du das Ganze nicht wie es ist bzw. was willst du mit der
> Änderung erreichen?
Weil ich möchte verstehen diese originalsyntax,(bis jetzt hab ich noch 
nicht kapiert:(( ) und ich denke meine änderung würde gleiche aufgabe 
machen und würde auch funktionieren aber leider nicht,auch nicht 
verstanden wieso mein code nicht funktioniert:((

bitte bitte hilf mir!

vielen dank noch mals:-)

viele grüße aus uni hannover:-)

von Micha (Gast)


Lesenswert?

>> Diese Funktion erwartet einen 32bit-Wert (Uint32).
> Du meinst,die parameter von dieser funktion ist eine 32bit-wert-adresse?
Siehe diese Deklaration:
1
void PWM_Update(PWMGEN_handle v);
Parameter ist ein PWMGEN_handle und der ist wohl 32-Bit breit. Uint32 
ist nicht ganz zutreffend, sorry!

> Weil ich möchte verstehen diese originalsyntax,(bis jetzt hab ich noch
> nicht kapiert:(( ) und ich denke meine änderung würde gleiche aufgabe
> machen und würde auch funktionieren aber leider nicht,auch nicht
> verstanden wieso mein code nicht funktioniert:((
Mit Funktionspointern hab ich's auch nicht so, aber ein C-Buch sollte 
dir da weiterhelfen können.

von Tu T. (tequila)


Lesenswert?

ich hab schon grad schon viele bücher nachgeguckt aber kein erfolg:(( 
keine bücher beschreiben ähnliche sachen:((

von Micha (Gast)


Lesenswert?

> ich hab schon grad schon viele bücher nachgeguckt aber kein erfolg:((
> keine bücher beschreiben ähnliche sachen:((
Hast du es bei Google auch schon versucht?

von Tu T. (tequila)


Lesenswert?

ja mit dem syntax schon mit goggle aber nichts gefunden:(

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
Noch kein Account? Hier anmelden.