Цитата(paskal @ Jun 28 2013, 00:19)

А вы не замечали, что самый первый файл исходника на ассемблере написан? И, например, основная функция main() из ассемблера вызывается?
(говорю про кейл, с ИАРом не работал)
Не факт. Для Cortex-M стартап вполне можно написать на C.
CODE
//-----------------------------------------------------------------------------
// Объявления обработчиков прерываний (векторов)
//-----------------------------------------------------------------------------
void NMIException(void);
void HardFaultException(void);
void MemManageException(void);
void BusFaultException(void);
void UsageFaultException(void);
void DebugMonitor(void);
void SVCHandler(void);
void PendSVC(void);
void SysTickHandler(void);
...
//-----------------------------------------------------------------------------
// Указатели секций линкера
//-----------------------------------------------------------------------------
extern unsigned long _sidata; //!< Начало инициализируемых данных.
extern unsigned long _sdata; //!< Начало секции .data.
extern unsigned long _edata; //!< Конец секции .data.
extern unsigned long _sbss; //!< Начало секции .bss.
extern unsigned long _ebss; //!< Конец секции .bss.
extern unsigned long _estack; //!< Начало стека.
//-----------------------------------------------------------------------------
// Определение функций
//-----------------------------------------------------------------------------
void Reset_Handler(void) __attribute__((__interrupt__));
extern int main(void);
//-----------------------------------------------------------------------------
// Таблица векторов прерываний
//-----------------------------------------------------------------------------
typedef void (*t_vector)(void);
__attribute__ ((section(".isr_vector")))
const t_vector vectors[] =
{
(t_vector)&_estack,
Reset_Handler,
NMIException,
HardFaultException,
MemManageException,
BusFaultException,
UsageFaultException,
0,
0,
0,
0,
SVCHandler,
DebugMonitor,
0,
PendSVC,
SysTickHandler,
...
};
//-----------------------------------------------------------------------------
//! \fn void Reset_Handler(void)
//! \brief Вектор сброса.
//-----------------------------------------------------------------------------
void Reset_Handler(void)
{
unsigned long *pulSrc, *pulDest;
// Инициализация данный в секции .data
pulSrc = &_sidata;
for(pulDest = &_sdata; pulDest < &_edata; )
{
*(pulDest++) = *(pulSrc++);
}
// Обнуление данных в секции .bss
for(pulDest = &_sbss; pulDest < &_ebss; )
{
*(pulDest++) = 0;
}
// Вызов функции main
main();
}