2016-03-07 144 views
1

我試圖通過編譯一個簡單的代碼來編碼/解碼流,但我在NXP的MPC5748G上運行LZMA(C版本)(7-zip.org/sdk.html)得到一些錯誤... 但是這些文件在我的筆記本電腦成功編譯,我是能夠運行應用LZMADiab編譯器中的解析錯誤

這裏是DCC顯示錯誤:

scons: done reading SConscript files. 
scons: Building targets ... 
..\tools\wr\mpc5748_wr594\diab\5.9.4.2\WIN32\bin\dcc.exe -c -Xenum-is-best -Xrtti-off -Xexceptions-off -Xforce-declarations -ee1481 -tPPCVLEES:simple -Xsection-split -g3 -XO -Xsize-opt -DTGT_MPC5748_WR594 -DC_DERIVATIVE_MPC5748G -DFREESCALE_OS -DAUTOSAR_OS_USED -DOSDIABPPC -DADC_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DCAN_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DGPT_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DICU_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DLIN_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DPWM_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DSPI_INTERRUPT_TYPE=MCAL_ISR_TYPE_NONE -DTGT_DBG -DTGT_APP -DCFG_CFG -DCFG_CAN -DCFG_CSL -DCFG_MCU -DCFG_DUT -DCFG_MEM -DCFG_MOV -DCFG_GPI -DCFG_GPO -DCFG_ADC -DCFG_SED -DCFG_FRY -DCFG_LPM -DCFG_ETH -IC:\GW_MCU\tools\wr\mpc5748_wr594\diab\5.9.4.2\include -Ibsw\mcal\mcalAS\inc -I. lib\lzma\Alloc.c -o lib\lzma\Alloc.o 
..\tools\wr\mpc5748_wr594\diab\5.9.4.2\WIN32\bin\dcc.exe -tPPCVLEES:simple -u__lear_calypso_memory_init -Wl,-Xremove-unused-sections -Wl,-Xunused-sections-list -lc -Wl,-m6 -Wm bsw/mcal/mcalm/linkerDescriptionVLE_App.dld -o out\app\BmwBdc2018GwmDutApp.elf out/app\objToLink.inl 1>out/app/BmwBdc2018GwmDutApp.map 
dld: warning: Undefined symbol '__HEAP_END' in file 'sbrk.o(C:\GW_MCU\tools\wr\mpc5748_wr594\diab\5.9.4.2\PPCVLEE\libchar.a)' 
dld: warning: Undefined symbol '__HEAP_START' in file 'sbrk.o(C:\GW_MCU\tools\wr\mpc5748_wr594\diab\5.9.4.2\PPCVLEE\libchar.a)' 
dld: error: Undefined symbols found - no output written 

此錯誤是適當的迪亞布編譯器,這裏是我在文檔中找到的:

Dynamic Memory Allocation - the heap, malloc(), sbrk() 
malloc() allocates memory from a heap managed by function sbrk() in src/sbrk.c. 
There are two ways to create the heap: 
■ Define __HEAP_START and __HEAP_END, typically in a linker command file. 
See the files conf/default.dld, conf/sample.dld, and 25.6 Command File 
Structure, p.419 for examples. 
■ Recompile sbrk.c as follows: 
dcc -ttarget -c -D SBRK_SIZE=n sbrk.c 
where n is the size of the desired heap in bytes. 

我不是既不是目標源代碼的作者,也不是C中的LZMA SDK的作者。 我的理解是LZMA編碼器至少爲編碼器分配1Mb的RAM,並且MPC5748僅提供768Kb的RAM。

所以我已標記的問題LZMA和DIAB編譯器(沒有找到標籤),只有一個人如何在這兩個工作能夠幫助我

UPDATE

我刪除在DLD問題:警告:在'lib/lzma/LzmaLib.o'文件中未定義的符號'LzmaEncProps_Init'包含相應的源文件到我的生成文件中,但HEAP問題仍然存在。 問題disapeared然而,應用程序並不運行 使用TRACE32調試我能診斷這個錯誤的根源: 在行

p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); 

行返回空P-> probs如此看來,頁頭有未能分配所有需要的尺寸

感謝

+1

看起來它不具有鏈接腳本需要的符號。按照建議查看示例'dld'文件。 –

+1

內存分配如何可以使用指針的靜態內存分配? –

回答