C-code in Code Composer Studio 3.3

OP #1030199
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:-)
Gast #1030648
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?
OP #1030819
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:-)
Gast #1033021
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren