Привет всем!
Работаю с LPC2468. Есть проблемка. Студия не хочет определять функцию main в неперезаписываемую область памяти (сектор) BOOTSEG, которую я определяю в файле .icf. Размещение в BOOTSEG связано с поддержкой IAP, которое не могу запустить. Так сделано, что IAP обработчик и основная программа запускаются из ф-ции main. Код прилагается:
- <main.c> //--------------------------------------------------------------------- __thumb __interwork main() @ "BOOTSEG";
//--------------------------------------------------------------------- // Non-rewritable Main function //--------------------------------------------------------------------- __thumb __interwork main() @ "BOOTSEG" { if ( /* Program in LPC flash is correct */) { //start rewritable part of program RW_main(); } else { //start iap routines IAP_ReLoad(); IAP_Restart(); } } //---------------------------------------------------------------------
- <lpc2468.icf> //--------------------------------------------------------------------- ... define region ROM1_region = mem: [from __ICFEDIT_region_ROM_start__ to 0x00003FFF]; define region ROM2_region = mem: [from 0x00004000 to __ICFEDIT_region_ROM_end__]; ... place in ROM1_region { readonly section .difunct, section .cstart, section BOOTSEG }; place in ROM2_region { readonly }; //---------------------------------------------------------------------
- <lpc2468_project.map> //--------------------------------------------------------------------- ... ************************************************** *** ENTRY LIST ***
Entry Address Size Type Object ----- ------- ---- ---- ------ ?main 0x00011610 Code Gb cmain.o [4] ... __iar_via_R0 0x00012045 Code Wk boot_segment.o [1] __iar_via_R2 0x0001204d Code Wk boot_segment.o [1] __iar_via_R3 0x00012051 Code Wk boot_segment.o [1] __iar_via_R5 0x00012049 Code Wk boot_segment.o [1] //---------------------------------------------------------------------
Необходимо, чтобы ф-ия main вставала между адресами 0x00001000 и 0x00004000. Ф-ии __iar_via_Rn определяют iap-процедуры при вызове iap_entry( iap_command, iap_result );. Они тоже попадают в перезаписываемую часть памяти, хотя процедуры IAP_ReLoad() и другие определены в памяти BOOTSEG.
Подскажите, в чём дело?
|