會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC24FJ64GA004 宣告於ROM陣列的存取問題
初級會員
註冊日期:
2012/05/09 11:43
所屬群組:
註冊會員
文章: 25
等級: 3; EXP: 73
HP : 0 / 68
MP : 8 / 1300
離線
我所使用的MCU為PIC24FJ64GA004
由於需要一個陣列char ABC[20][4][8][60]
共達38400bytes
因此必須置於ROM中
目前我宣告方式為
const __attribute__((space(auto_psv)))
char ABC[20][4][8][60];
編譯已經可以順利過關
但是當我要對其存取(by UART)時發生一個錯誤
Main.c:321: error: assignment of read-only location
現在回想起來ROM是屬於一次性的記憶體
燒錄後的資料就無法在程式裡再做修改

不知是否有其他方式可以對這個位於ROM的陣列作修改
或是有其他宣告方法,使得這size的陣列可以順利宣告
及於工作時由外部(UART)對其修改

還請各位前輩給予指導
謝謝!

2012/08/25 21:41
轉換PDF檔 列印


Re: PIC24FJ64GA004 宣告於ROM陣列的存取問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14526
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76601
離線
1. PSV 的映射空間最大為 32KBytes, 超過時建議使用兩個陣列來分開。透過 const char x __attribute__ ((aligned (xxxx))) 的方式界定奇 Table 表格的邊界起始點為 32KB 的起始位址。

2. 使用 PSV 方式只能讀取資料不可以寫入,企圖寫入 PSV 的映射區域會產生 Address Trap。所以要寫入 Flash 空間只能用 Table Read/Write 的組合語言指令。因為 C30 並無直接寫入 Flash 的指令,但 C30 有提供 _builtin_ 巨集及嵌入式組語可以用來讀寫 Flash 的。你可以先參考一下 C30 Peripheral Module Training 的 EEPROM 那個章節,在練習一有詳細的說明如何使用 Table Read/Write 指令來存取 Flash 的。

2012/08/27 11:55
轉換PDF檔 列印


Re: PIC24FJ64GA004 宣告於ROM陣列的存取問題
資深會員
註冊日期:
2007/06/24 13:49
所屬群組:
註冊會員
文章: 161
等級: 11; EXP: 74
HP : 0 / 268
MP : 53 / 8944
離線
引用:

sanmen 寫道:
我所使用的MCU為PIC24FJ64GA004
由於需要一個陣列char ABC[20][4][8][60]
共達38400bytes
因此必須置於ROM中
目前我宣告方式為
const __attribute__((space(auto_psv)))
char ABC[20][4][8][60];
編譯已經可以順利過關
但是當我要對其存取(by UART)時發生一個錯誤
Main.c:321: error: assignment of read-only location
現在回想起來ROM是屬於一次性的記憶體
燒錄後的資料就無法在程式裡再做修改

不知是否有其他方式可以對這個位於ROM的陣列作修改
或是有其他宣告方法,使得這size的陣列可以順利宣告
及於工作時由外部(UART)對其修改

還請各位前輩給予指導
謝謝!


說真的你這樣的用法有點奇怪,感覺上是因ram不夠使用,故把rom當ram來用。

1.因為你當ram使用,所以rom會經常抹寫,rom的flash是抹寫是有限制的

2.使用Flash就會遇到Erase問題,Erase不能一個個Byte殺,一次可能就抹除好幾個byte資料

3.flash抹寫速度上與ram相比就差很多了

4.最後還是外掛sram,microchip有出串列形的SRAM,但最大好像只有32kByte,不夠的話可以掛兩顆。

2012/08/27 12:51
轉換PDF檔 列印


Re: PIC24FJ64GA004 宣告於ROM陣列的存取問題
初級會員
註冊日期:
2012/05/03 11:50
所屬群組:
註冊會員
註冊會員
文章: 22
等級: 3; EXP: 41
HP : 0 / 60
MP : 7 / 1154
離線
引用:

Ryang 寫道:
2. ...。所以要寫入 Flash 空間只能用 Table Read/Write 的組合語言指令。因為 C30 並無直接寫入 Flash 的指令,但 C30 有提供 _builtin_ 巨集及嵌入式組語可以用來讀寫 Flash 的。你可以先參考一下 C30 Peripheral Module Training 的 EEPROM 那個章節,在練習一有詳細的說明如何使用 Table Read/Write 指令來存取 Flash 的。

請問Ryang,PIC24沒有內建EEPROM(只有dsPIC30F系列有內建),也可以使用Table Read/Write指令來存取 Flash?(因sanmen使用PIC24).

2012/11/14 18:09
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project