这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 基础知识» DSP,TI,C2000 DSP TI C2000中c语言一个定义问题?

共2条 1/1 1 跳转至

DSP,TI,C2000 DSP TI C2000中c语言一个定义问题?

院士
2006-09-17 18:14:16 打赏
DSP,TI,C2000 DSP TI C2000中c语言一个定义问题?



关键词: C2000 语言 一个 定义 问题

院士
2006-12-22 22:43:00 打赏
2楼
问 使用 DSPTMS320LV2407A 编译器版本V2.2

首先我定义如下一个头文件 svpwm.h:

#ifndef _SVPWM_H_
#define _SVPWM_H_

#define PIBY3 10923

typedef struct
{
void (*calc) (void*);

unsigned step_max;
int alpha;
unsigned sector;

unsigned f;
unsigned ul_max;
unsigned udc;

unsigned tl,tm;
unsigned vect;
}SVPWM;

#define SVPWM_DEFAULTS {\
(void (*)(void*)) svpwm_calc,\
839,\
0,\
0}

typedef SVPWM *SVPWM_Handle;

void svpwm_calc (SVPWM_Handle);

#endif //_SVPWM_H_

然后在 svpwm.c文件,初始化如下:
#include "svpwm.h"

SVPWM svpwm=SVPWM_DEFAULTS;

在编译过程中提示出错语句
syntax error at or near symbol 'void'

该语句指(void (*)(void*)) svpwm_calc 这个函数出错。

究竟错在那?该语句如何理解 (void (*)(void*))这两个void ??

1: 纯属自找麻烦,干吗不简化问题?C语言中这种类似的问题,最简单的办法就是用typedef,多定义几个类型名,而不要用这种复杂的隐式类型定义

思路不错,但C语言基础还是有欠缺。你这是一个典型的包含“对自身的指针引用的回调函数”的结构类型(有点拗口),正规写法应该这样:


typedef struct tagSVPWM SVPWM;
typedef SVPWM *SVPWM_Handle;
typedef void (*SVPWM_CALC) (SVPWM_Handle);

struct tagSVPWM
{
SVPWM_CALC calc;

unsigned step_max;
int alpha;
unsigned sector;

unsigned f;
unsigned ul_max;
unsigned udc;

unsigned tl,tm;
unsigned vect;
};

#define SVPWM_DEFAULTS {\
(SVPWM_CALC) svpwm_calc,\
839,\
0,\
0}

void svpwm_calc (SVPWM_Handle);


这样类型完全一致,不存在强制类型转换,也不容易出现语法错误 2: 楼上方法很好(void (*) (void *))) svpwm_calc 是指针函数强制类型转换
第一个void(*)()代表是指针函数强制类型转换,那么第二个
void * 表示什么?是否表示无返回。这个"*"能否去掉? 3: 还有一个问题?typedef void (*SVPWM_CALC) (SVPWM_Handle);
SVPWM_CALC calc;
(SVPWM_CALC) svpwm_calc,
这三个定义如何理解?

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]