RT-thread的启动

it2023-03-03  107

复位中断

按下复位按键后,系统复位中断,从地址0x0000_0004开始执行代码。

复位中断发生后,执行的中断代码

先执行SystemInit函数,再执行main函数。

SystemInit里面就是对RCC时钟进行了一些操作。

main就是开始调用自己准备写的代码。

MDK中扩展关键字sub的用法

在执行main函数之前,需要执行一些逻辑。可以使用sub和super关键字来完成这个目标

//被Sub关键字修饰后-->执行main函数之前,执行这个函数(执行完成后不自动跳回main,需要手动) int $Sub$$main(void)//components.c里 { rtthread_startup(); return 0; } // $Super$$main()手动跳回main函数 void main_thread_entry(void *parameter)//components.c里 { ... ... #if defined(__CC_ARM) || defined(__CLANG_ARM) $Super$$main(); }

main之前进的RTT初始化

int rtthread_startup(void) { rt_hw_interrupt_disable();//关闭所有的中断 rt_hw_board_init();//板级初始化(内存堆初始化、初始化时钟 HAL库 串口设备 shell控制台设备 板级硬件) rt_show_version();//打印当前RT系统的版本 rt_system_timer_init();//初始化系统定时器 rt_system_scheduler_init();//初始化系统调度器 #ifdef RT_USING_SIGNALS rt_system_signal_init();//信号初始化 #endif rt_application_init();.//创建一个用户main线程 rt_system_timer_thread_init();//初始化系统定时器线程 rt_thread_idle_init();//空闲线程初始化 rt_system_scheduler_start();//开调度器 return 0; }

最新回复(0)