中国(深圳)国际机器视觉展览会暨机器视觉技术及工业应用研讨会→ 立即报名 ←
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » DSP,TI,C2000 DSP TI C2000中c语言一个定义问题?

共2条 1/1 1 跳转至

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

院士
2006-12-22 22:43:00    评分
DSP,TI,C2000 DSP TI C2000中c语言一个定义问题?



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

院士
2006-12-22 22:43:00    评分
2楼
问 使用DSP TMS320LV2407A 编译器版本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 跳转至

回复

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