Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
初級會員
|
謝謝回答
最後再試了一下,我發現我的原因出在 例define c-1 在c還沒定義前就先運算,導致後面運算式算出來的值都錯誤 恩感激不盡 另外一問我們使用#define跟使用const來定義常數 兩者之間有什麼差別呢?
發表於: 2004/7/8 14:12
|
|||
|
Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
版主
|
#define 的用意是用一個好記有意義的文字去取代一個數字、常數及文字。
用法如下: #define KEY_SW1 PORTAbits.RA0 #define Baud_Rate 4000000/(51+1) if (KEY_SW1) PORTB=0x00 ; 再寫程式中就可以用KEY_SW1來取代PORTA的RA0簡單又好記 程式也比較容易讀。
發表於: 2004/7/8 14:05
|
|||
|
Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
高級會員
|
相同的型式 , #define可以用來定義巨集 , 動作和組語MACRO相似 , 都可算是插入式語法 , COMPILER看到相同的變數時 , 代入所定義的資料 .
發表於: 2004/7/8 10:35
|
|||
|
Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
初級會員
|
感謝版主的回答,那另外一問
#define a=10 #define b=2 #define c=a/b 直接定義來做運算式可以嗎? c語言好像不行,我在c18講義有寫到可以直接運算,不知是否能 還是要另外寫副程式來做運算呢?
發表於: 2004/7/8 10:14
|
|||
|
Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
高級會員
|
使用#define不是將變數定義成另一個變數或常數嗎?是不是應該這樣寫
#define abc 0b00001111 不過我自己都是這樣寫 #define abc B'00001111' #pragma romdata //是告訴compiler以下的宣告是在程式記憶體中 const rom CONFIG1H = 0X0E ; const 是指宣告的值是固定常數 , rom是指放在rom裡面 CONFIG1H的位址是在Header file裡就定義好的變數 , 變數 = 0x0E ,當然就是0x0E放到CONFIG1H囉!
發表於: 2004/7/8 10:06
|
|||
|
使用c18定義時#define常數的疑問及pragma romdata疑問
|
||||
---|---|---|---|---|
初級會員
|
使用 c18寫程式定義一個常數時
#define 0b00000011 使用c語言這樣會造成錯誤 那在 c18下能直接定義成二進制嗎? 還是只能用#define 0x03 //16進制 #define 3 //10進制 不然就是_asm及_endasm使用內建組合語言 另外一個疑問 #pragma romdata const rom CONFIG1H=0X0E; #pragma romdata 這樣定義CONFIG1H的值會載入0X0E嗎還是它是指CONFIG1H的值會在這個0X0E位址,或是其它意思,不太瞭解 以上兩個問題要麻煩版主或大家幫忙解答,謝謝
發表於: 2004/7/8 9:40
|
|||
|