• slider image 253
  • slider image 254
  • slider image 255
  • slider image 256
  • slider image 257
:::


Browsing this Thread:   1 Anonymous Users






定址方式 .....求救
#1
初級會員
初級會員


查看用戶資訊
小弟目前有個程式需要以下的變數,但是組繹後會出現的錯誤 有人可以幫幫小弟嗎 ?
Error - section '.udata_acs' can not fit the section. Section '.udata_acs' length=0x00000186
Errors : 1

UDATA_ACS
AD_SPEED_REF_H RES 1
AD_SPEED_REF_L RES 1
AD_VOLTAGE_H RES 1
AD_VOLTAGE_L RES 1
AD_CURRENT_H RES 1
AD_CURRENT_L RES 1
AD_TEMP_H RES 1
AD_TEMP_L RES 1

ACCaLO RES 1
ACCaHI RES 1
ACCbLO RES 1
ACCbHI RES 1
ACCcLO RES 1
ACCcHI RES 1
ACCdLO RES 1
ACCdHI RES 1
temp res 1

ROTATE_BIT RES 1
ROTATE_REG_L1 RES 1
ROTATE_REG_H1 RES 1
ROTATE_REG_L2 RES 1
ROTATE_REG_H2 RES 1

SINA_TABLE_POINT_1 RES 1
SINA_TABLE_POINT_2 RES 1

SINE_TABLE_L RES 0xB4
SINE_TABLE_H RES 0xB4
TEMP RES 1


發表於: 2004/5/19 17:52
生活的本身,要具備承擔責任的勇氣,才能活的充實,活的有價值,活的更幸福。
生命的意義在於努力追求目標,在於面對失敗,在於活得積極。
人生中本來就會失去很多東西,但是最重要的
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 定址方式 .....求救
#2
管理員
管理員


查看用戶資訊
UDATA_ACS中的ACS表示以下的變數要放在ACCESS RAM。至於什麼是ACCESS RAM,請看PIC18 的DATA SHEET。
該錯誤訊息的意思是說,您定義的變數太多了,塞不進ACCESS RAM。所以,如果有些變數可以不要放在 ACCESS RAM,就請另外開一區以UDATA做為開頭的程式段,來定義您的變數。至於UDATA_ACS及UDATA這類DIRECTIVE的完整正確用法,請看MPLINK或MPASM的說明資料。

發表於: 2004/5/20 9:48
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 定址方式 .....求救
#3
版主
版主


查看用戶資訊
PIC18Fxxxx 的Access Bank 只有128-bytes可用,你將兩個 Sine_Table 塞給它當然會暴掉
記住!用UDATA_ACS宣告變數時最多只有128-bytes.

看起來你似乎是想使用RAM儲存Sine Table,如果是這樣這Sine Table因該是個常數值啊!
不知你為何要存在RAM中,而且你還需一段程式去設定Sine Table的初始值, 這樣式很累的!!!!!!
建議將Sine Table轉存到Program memory裡,利用PIC18Fxxxx特有的TBLRD*+ 指令讀取 Sine Table
至於Sine Table的建立,可以用虛指令"DB"來定義常數值。請參考如下之範例:

movlw UPPER Sine_Table_L
movwf TBLPTRU
movlw HIGH Sine_Table_L
movwf TBLPTRH
movlw LOW Sine_Table_L
movwf TBLPTRL
;
TBLRD*+ ; Read Table data and save to TABLAT register, Table point + 1
return ; return back
;

;
;****************************************
;**** Define Sine Table
;****************************************
;
Sine_Table_L db 0x1b,0x2b,0x30,0x45,0x56,0x78,0x8f
db .186, .205, .220, 250, 255,
db
Sine_Table_H db 0, 0, 0, 0x00,
db
db

發表於: 2004/5/25 14:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 定址方式 .....求救
#4
初級會員
初級會員


查看用戶資訊
可是如果我的sine表可能要跳著查的話那用這種方式也可以做到嗎?因為兩種不同的控制方式查表的方式不同,所以才會用ram來存取表。

發表於: 2004/5/26 8:46
生活的本身,要具備承擔責任的勇氣,才能活的充實,活的有價值,活的更幸福。
生命的意義在於努力追求目標,在於面對失敗,在於活得積極。
人生中本來就會失去很多東西,但是最重要的
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 定址方式 .....求救
#5
版主
版主


查看用戶資訊
基本就是查表嗎?跳著查也很單純,與要將offset的值加入TBLPTRL & H 的暫存器中得到一個新的ROM指標就好了。
別忘了將Offset加到TBLPTRx暫存器是一個十六位元的加法,進位不可忘記處理。

底下範例是用程式節區的宣告(code), 將Sine_Table_A 的資料強制存放在 0x1000 的 ROM 位址,而Sine_Table_B 的資料放在 0x1800 的 ROM 位址,這樣就很好查表了

;
;****************************************
;**** Define Sine Table
;****************************************
;
Sine_A code 0x1000
Sine_Table_L db 0x1b,0x2b,0x30,0x45,0x56,0x78,0x8f
db .186, .205, .220, 250, 255,

Sine_B code 0x1800
Sine_Table_H db 0, 0, 0, 0x00,
db .186, .205, .220, 250, 255,


發表於: 2004/5/26 9:39
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 can 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連結

http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源