int rtthread_startup(void)
{
rt_hw_interrupt_disable();
/* board level initialization
NOTE: please initialize heap inside board initialization.
/
rt_hw_board_init();
/ show RT-Thread version /
rt_show_version();
/ timer system initialization /
rt_system_timer_init();
/ scheduler system initialization /
rt_system_scheduler_init();
#ifdef RT_USING_SIGNALS
/ signal system initialization /
rt_system_signal_init();
#endif
/ create init_thread /
rt_application_init();
/ timer thread initialization /
rt_system_timer_thread_init();
/ idle thread initialization /
rt_thread_idle_init();
/ start scheduler /
rt_system_scheduler_start();
/ never reach here */
return 0;
}
卡在了 rt_system_scheduler_start(); 函数中
void UserSysTickInit(void)//初始化SysTick
{
SYSTICK_InitStruType x;
x.SysTick_Value = SystemCoreClock / 1000; //10000是SYSTIC的频率, 10000Hz->100us 1000->1ms
x.SysTick_ClkSource = SysTick_ClkS_Cpu;
x.SysTick_ITEnable = Enable; //中断使能
SysTick_Init(&x);
//SysTick_Disable(); //使用时才开启
SysTick_Enable(); //开启
x.SysTick_Value = SystemCoreClock / 1000;
}
void rt_hw_board_init()
{
SystemInit(); //配置时钟
SCU_SysClkSelect(SCU_CLK_HRC);
PLLClock_Config(Enable, SCU_PLL_IN16M, SCU_PLL_48M, Enable); //PLL使能,倍频到32M(可关闭打开分别观察指示灯闪烁差异)
DeviceClockAllEnable(); //打开所有外设时钟
UserSysTickInit();
/* System Clock Update /
// SystemCoreClockUpdate();
/ System Tick Configuration /
_SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
/ Call components board initial (use INIT_BOARD_EXPORT()) /
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
void SysTick_Handler(void)
{
/ enter interrupt /
rt_interrupt_enter();
rt_tick_increase();
/ leave interrupt */
rt_interrupt_leave();
}
RT_Thread移植到东软HR8P506上卡在
EXPORT SysTick_IRQHandler [WEAK]
上。单片机是M0内核。