|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
2407 C語言編程包含頭文件的問題 |
| 作者:不愛說話 欄目:DSP技術(shù) |
由于程序比較大,所以我把它們根據(jù)功能分別寫到幾個(gè)C文件里,因?yàn)槊總(gè)文件里都會(huì)用到些寄存器,所以每個(gè)文件開都包含了頭文件#include "2407c.h" 編譯的時(shí)候就報(bào)錯(cuò)了,說XXXX多重定義了,我知道是#include "2407c.h"次數(shù)太多的原因,但是每個(gè)文件里都有用到其中的一些寄存器,所以必須包含這個(gè)頭文件,有什么辦法能解決這個(gè)問題嗎,能讓程序編譯通過. |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/3/7 23:03:00 發(fā)布:
使用#ifndef #define的結(jié)構(gòu)。 看看系統(tǒng)自帶的頭文件是如何做的? |
|
| 3樓: | >>參與討論 |
| 作者: 不愛說話 于 2006/3/8 20:51:00 發(fā)布:
我試過了 不行,我按你說的條件編譯方法試過的,還出那些錯(cuò)誤. |
|
| 4樓: | >>參與討論 |
| 作者: computer00 于 2006/3/8 21:29:00 發(fā)布:
那就是你代碼的問題了。 將頭文件復(fù)制上來看看。 |
|
| 5樓: | >>參與討論 |
| 作者: 不愛說話 于 2006/3/9 21:47:00 發(fā)布:
2407c.h /************************************************************************* /* File NAME: 2407c.h /* /* DESCRIPTION: 240x register definitions, Bit codes for BIT instruction /*************************************************************************/ #ifndef __2407c_h__ #define __2407c_h__ /* 240x CPU core registers*/ unsigned int *IMR = (unsigned int *)0x0004; /* Interrupt Mask Register*/ unsigned int *IFR = (unsigned int *)0x0006; /* Interrupt Flag Register*/ /* SYSTEM configuration and interrupt registers*/ unsigned int *SCSR1 = (unsigned int *)0x7018; /* SYSTEM CONTROL & Status register. 1 */ unsigned int *SCSR2 = (unsigned int *)0x7019; /* SYSTEM CONTROL & Status register. 2*/ unsigned int *DINR = (unsigned int *)0x701C; /* DEVICE Identification NUMBER register. */ ...................... ...................... #endif |
|
| 6樓: | >>參與討論 |
| 作者: lczsx2000 于 2006/3/10 12:38:00 發(fā)布:
在頭文件里面這么做,舉個(gè)例子! /************************************************************************* /* File NAME: 2407c.h /* /* DESCRIPTION: 240x register definitions, Bit codes for BIT instruction /*************************************************************************/ #ifndef __2407c_h__ #define __2407c_h__ /* 240x CPU core registers*/ #define IMR ((unsigned int volatile *)0x0004) /* Interrupt Mask Register*/ |
|
| 7樓: | >>參與討論 |
| 作者: computer00 于 2006/3/10 12:54:00 發(fā)布:
樓上正解。 樓主這樣做法,當(dāng)然會(huì)重復(fù)定義了。 如果你只是訪問IMR寄存器的值的話,還可以這么做: /* 240x CPU core registers*/ #define IMR (*((volatile unsigned int *)0x0004)) /* Interrupt Mask Register*/ 以后訪問時(shí),只要用IMR就可以了。 IMR=xx; xx=IMR; |
|
| 8樓: | >>參與討論 |
| 作者: 不愛說話 于 2006/3/10 13:03:00 發(fā)布:
謝謝啊 其實(shí)我用的這個(gè)頭文件也是從書上拿來的. 回頭我換一個(gè)你們說的那種頭文件試試 |
|
| 9樓: | >>參與討論 |
| 作者: xyq2001 于 2006/3/11 17:28:00 發(fā)布:
有道理! 一個(gè)是宏定義,一個(gè)是簡(jiǎn)單的變量定義。 |
|
| 10樓: | >>參與討論 |
| 作者: 小泥子 于 2006/3/12 18:13:00 發(fā)布:
欽佩 樓主 從上代碼的意思 :只是想用一個(gè)符號(hào)wer 來代替后面的一串串 是吧 #define 合適!! 支持 如果想用 匯編 哪該用 哪條指令? 謝謝 |
|
| 11樓: | >>參與討論 |
| 作者: 不愛說話 于 2006/3/12 21:59:00 發(fā)布:
to lczsx2000 我按你的例子改了我的頭文件寫法,現(xiàn)在可以在不同的C文件中包含這個(gè)頭文件了,已經(jīng)沒問題了,謝謝啊. |
|
| 12樓: | >>參與討論 |
| 作者: gaost 于 2006/3/16 10:55:00 發(fā)布:
長見識(shí) |
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |