pointer function的原型宣告
|
||||
---|---|---|---|---|
資深會員
|
小弟最近想要將程式裡的一個大型switch case改為pointer function型式。
使用環境: MPLAB 8.10 header、linker script: PIC18F6722 修改後型式如下: Evt1(){…} Evt2(){…} Evt3(){…} Evt4(){…} Evt5(){…} ……… void (* oper_evt[])() = {Evt1,Evt2,Evt3,Evt4,Evt5,…}; 因為Evt的數量共有九十多個,編譯後看到錯誤訊息如下: Error - section '.idata_avl_09o1.o' can not fit the section. Section '.idata_avl_09o1.o' length=0x00000120 看來是儲存空間不足所造成的問題,且測試了一下,若將void (* oper_evt[])()定義改為 = {Evt1,Evt2,Evt3,Evt4};,即少一個Evt5的話,原本的length=0x00000120會改為length=0x00000117。 感覺起來像是定義了一個過大的array而用完儲存空間, 但void (* oper_evt[])() = {Evt1,Evt2,Evt3,Evt4,Evt5};似乎不儲存於AcessBank或其它DATA BANK中。 可以請教一下,上面的錯誤訊息是什麼情況會發生嗎? 因為目前並沒有使用#pragma idata來宣告,是否必須將一個bank指定為idata來放? 但原本的記憶空間便不足了,似乎也無法找到一個能放九十多個event位址的空間,令人苦惱啊
發表於: 2008/7/29 15:49
|
|||
|