• slider image 514
  • slider image 516
  • slider image 517
  • slider image 518
  • slider image 519
:::


Browsing this Thread:   1 Anonymous Users






Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#7
版主
版主


查看用戶資訊
const 是用來定義不會被改變的數一般稱之為常數,在Hi-Tech PICC 及 C18裡,常用來宣告它是存放在 Flash ROM 的查表值,例如 lcd顯示的固定字串,SIN Table ...等固定不變的資料。記住它實際佔有記憶空間的。

#define 是定義以文字取代常數、數值、變數或 I/O位址...等,簡單而言就是以文字取代,編譯時不占記憶空間的,即使是取代變數也是你在宣告變數時佔用記憶空間,與#define無關。

發表於: 2004/7/8 21:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#6
初級會員
初級會員


查看用戶資訊
謝謝回答
最後再試了一下,我發現我的原因出在
例define c-1
在c還沒定義前就先運算,導致後面運算式算出來的值都錯誤
恩感激不盡
另外一問我們使用#define跟使用const來定義常數
兩者之間有什麼差別呢?

發表於: 2004/7/8 14:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#5
版主
版主


查看用戶資訊
#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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#4
高級會員
高級會員


查看用戶資訊
相同的型式 , #define可以用來定義巨集 , 動作和組語MACRO相似 , 都可算是插入式語法 , COMPILER看到相同的變數時 , 代入所定義的資料 .

發表於: 2004/7/8 10:35
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#3
初級會員
初級會員


查看用戶資訊
感謝版主的回答,那另外一問
#define a=10
#define b=2
#define c=a/b
直接定義來做運算式可以嗎?
c語言好像不行,我在c18講義有寫到可以直接運算,不知是否能
還是要另外寫副程式來做運算呢?

發表於: 2004/7/8 10:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 使用c18定義時#define常數的疑問及pragma romdata疑問
#2
高級會員
高級會員


查看用戶資訊
使用#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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


使用c18定義時#define常數的疑問及pragma romdata疑問
#1
初級會員
初級會員


查看用戶資訊
使用 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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------