Привет всем!
Работаю с 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.
Подскажите, в чём дело?