音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

DSP TI C2000中c語言一個定義問題?

作者:SOCO_DA 欄目:技術(shù)交流
DSP TI C2000中c語言一個定義問題?
使用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 這個函數(shù)出錯。

究竟錯在那?該語句如何理解 (void (*)(void*))這兩個void ??



2樓: >>參與討論
赤鑄
純屬自找麻煩,干嗎不簡化問題?
C語言中這種類似的問題,最簡單的辦法就是用typedef,多定義幾個類型名,而不要用這種復(fù)雜的隱式類型定義

思路不錯,但C語言基礎(chǔ)還是有欠缺。你這是一個典型的包含“對自身的指針引用的回調(diào)函數(shù)”的結(jié)構(gòu)類型(有點(diǎn)拗口),正規(guī)寫法應(yīng)該這樣:


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);


這樣類型完全一致,不存在強(qiáng)制類型轉(zhuǎn)換,也不容易出現(xiàn)語法錯誤

3樓: >>參與討論
SOCO_DA
樓上方法很好
(void (*) (void *))) svpwm_calc 是指針函數(shù)強(qiáng)制類型轉(zhuǎn)換
第一個void(*)()代表是指針函數(shù)強(qiáng)制類型轉(zhuǎn)換,那么第二個
void * 表示什么?是否表示無返回。這個"*"能否去掉?

4樓: >>參與討論
soco_da
還有一個問題?
typedef void (*SVPWM_CALC) (SVPWM_Handle);
SVPWM_CALC calc;
(SVPWM_CALC) svpwm_calc,
這三個定義如何理解?


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
頻率發(fā)生?
請教,有沒有將100v/400Hz交流電變?yōu)?0v以內(nèi)的好方法?
請問在控制器與顯示器的數(shù)據(jù)線的各根線分別代表什么意思?
在borland c++ 中內(nèi)嵌匯編語言如何編譯
直流風(fēng)扇有人了解嘛?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號