會員登陸
帳號:

密碼:

記住我



忘記密碼?

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


正在流覽:   1 名訪客





XC16_1.50V_PRO 編譯dsPIC33EP512MU814產生錯誤,請問如何解決?
新會員
註冊日期:
2017/11/23 16:35
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 111
離線
build/default/production/T_READ.o -mcpu=33EP512MU814 -omf=elf -DXPRJ_default=default -legacy-libc -Wl,--local-stack,,--defsym=__MPLAB_BUILD=1,,--script=p33EP512MU814.gld,--stack=16,--check-sections,--data-init,--pack-data,--handles,--isr,--no-gc-sections,--fill-upper=0,--stackguard=16,--no-force-link,--smart-io,-Map="dist/default/production/ZC_A300_T01.X.production.map",--report-mem,--memorysummary,dist/default/production/memoryfile.xml -mdfp="C:/Program Files (x86)/Microchip/MPLABX/v5.30/packs/Microchip/dsPIC33E-GM-GP-MC-GU-MU_DFP/1.1.33"/xc16
nbproject/Makefile-default.mk:696: recipe for target 'dist/default/production/ZC_A300_T01.X.production.hex' failed
make[2]: Leaving directory 'D:/(0)DISK1/(0)ZIR_CON/P2019_ZC145_078-ZC-A600/Source/PIC33EP512MU814_LPD_A300_T01/ZC_A300_T01.X'
nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
make[1]: Leaving directory 'D:/(0)DISK1/(0)ZIR_CON/P2019_ZC145_078-ZC-A600/Source/PIC33EP512MU814_LPD_A300_T01/ZC_A300_T01.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
Link Error: PSV or AUXPSV section '.const' exceeds 32K bytes (actual size = 42978).
Link Error: Could not allocate program memory

make[2]: *** [dist/default/production/ZC_A300_T01.X.production.hex] Error 255
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 45s)

我程式內 const 陣列資料的寫法:


/*"D:\專業軟體\點陣圖轉51DATA\角度盤_字型\16x16_9X12\0.bmp",0*/
const Uchar NUM_16x16_0[33] __attribute__((space(auto_psv))) =
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};

/*"D:\專業軟體\點陣圖轉51DATA\角度盤_字型\16x16_9X12\1.bmp",0*/
const Uchar NUM_16x16_1[33] __attribute__((space(auto_psv))) =
{
0x00,0x00,0x00,0x00,0x00,0x10,0x08,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x3F,0x3F,0x20,0x20,0x20,0x00,0x00,0x00,0x00,
};


請問: const 語法須如何寫,才不會產生上列的編譯錯誤?

2月21日 18:21:04
轉換PDF檔 列印


Re: XC16_1.50V_PRO 編譯dsPIC33EP512MU814產生錯誤,請問如何解決?
資深會員
註冊日期:
2009/04/07 13:30
所屬群組:
註冊會員
文章: 175
等級: 12; EXP: 28
HP : 0 / 282
MP : 58 / 9201
離線
編譯器 XC16
請試試以下方法:


#include "./p33EP256MU814.h"


__psv__ int __attribute__((space(psv))) table1[100] = { 1, 1, 1, 1, 1};
__psv__ int __attribute__((space(psv))) table2[200] = { 2, 2, 2, 2, 2};
__psv__ int __attribute__((space(psv))) table3[300] = { 3, 3, 3, 3, 3};
__psv__ int __attribute__((space(psv))) table4[400] = { 4, 4, 4, 4, 4};

__psv__ unsigned char __attribute__((space(psv))) NUM_16x16_0[33] =
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};

int  main(void)
{
int aa1;
__psv__ unsigned char *Ptr_psv;


aa1 = table1[1];

aa1 = table2[2];

aa1 = table3[3];

aa1 = table4[4];

aa1 = NUM_16x16_0[5];


Ptr_psv = NUM_16x16_0;

aa1 = *Ptr_psv++;

aa1 = *Ptr_psv++;

aa1 = *Ptr_psv++;

aa1 = *Ptr_psv++;

aa1 = *Ptr_psv++;

aa1 = *Ptr_psv++;


return  
0;
}

2月21日 21:15:46
轉換PDF檔 列印


Re: XC16_1.50V_PRO 編譯dsPIC33EP512MU814產生錯誤,請問如何解決?
新會員
註冊日期:
2017/11/23 16:35
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 111
離線
感謝OuO...前輩的解說,問題已經解決!

順便解說一下:
會XC16C會編譯錯誤的原因?
是因為我的程式內,所有的常數陣列資料超過32K,
若使用
const Uchar NUM_16x16_0[33]=
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};


__psv__ unsigned char __attribute__((space(auto_psv))) NUM_16x16_0[33]=
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};

宣告的常數陣列資料,會被xc16編譯到同一個psv page 程式空間內,
若須合併的常數陣列資料小於32K,編譯不會有錯誤,
若超過32K,編譯就會產生錯誤!

須改用以下的方式,宣告常數陣列資料,
xc16才不會想要合併所有常數陣列資料到單一PSV程式空間內,而會自動使用多頁PSV程式空間,

__prog__ unsigned char __attribute__((space(prog))) NUM_16x16_0[33]=
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};

__prog__ unsigned char *NUM_16x16_PTR[30] ; //數字_16x16_地址指標


__psv__ unsigned char __attribute__((space(psv))) NUM_16x16_0[33]=
{
0x00,0x00,0x00,0xF0,0xF8,0x04,0x04,0x84,0xC4,0x64,0xF8,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1F,0x26,0x23,0x21,0x20,0x20,0x1F,0x0F,0x00,0x00,0x00,0x00,
};

__psv__ unsigned char *NUM_16x16_PTR[30] ; //數字_16x16_地址指標

另外XC16編譯器內的 CODE MODEL 須設為 LARGE:

附加檔案:



jpg  xc16設定_Image 1.jpg (219.60 KB)
68465_5e5484127d325.jpg 917X599 px

2月25日 10:19:11
轉換PDF檔 列印






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

[進階搜尋]


搜尋
Microchip連結
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project