北京东八区网站建设,淮安网站建设公司电话,简单的网站设计怎么做,中英文网站源码 免费#xff08;一#xff09;rtthread主线程启动流程 声明1.启动分析2.源码分析 声明
本文主要为个人学习笔记内容总结#xff0c;有来自网络及其他#xff0c;如有雷同#xff0c;请告知。
1.启动分析
基于#xff1a;rt-thread-v5.0.1 先执行#xff1a;汇编代码start… 一rtthread主线程启动流程 声明1.启动分析2.源码分析 声明
本文主要为个人学习笔记内容总结有来自网络及其他如有雷同请告知。
1.启动分析
基于rt-thread-v5.0.1 先执行汇编代码startup_stm32f429xx.s开始运行主要调用SystemInit和 __main
; Reset handler
Reset_Handler PROCEXPORT Reset_Handler [WEAK]IMPORT SystemInitIMPORT __mainLDR R0, SystemInitBLX R0LDR R0, __mainBX R0ENDP#mermaid-svg-cN0rgDgTbyLOnDC2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .error-icon{fill:#552222;}#mermaid-svg-cN0rgDgTbyLOnDC2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cN0rgDgTbyLOnDC2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .marker.cross{stroke:#333333;}#mermaid-svg-cN0rgDgTbyLOnDC2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .cluster-label text{fill:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .cluster-label span{color:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .label text,#mermaid-svg-cN0rgDgTbyLOnDC2 span{fill:#333;color:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .node rect,#mermaid-svg-cN0rgDgTbyLOnDC2 .node circle,#mermaid-svg-cN0rgDgTbyLOnDC2 .node ellipse,#mermaid-svg-cN0rgDgTbyLOnDC2 .node polygon,#mermaid-svg-cN0rgDgTbyLOnDC2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .node .label{text-align:center;}#mermaid-svg-cN0rgDgTbyLOnDC2 .node.clickable{cursor:pointer;}#mermaid-svg-cN0rgDgTbyLOnDC2 .arrowheadPath{fill:#333333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-cN0rgDgTbyLOnDC2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-cN0rgDgTbyLOnDC2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cN0rgDgTbyLOnDC2 .cluster text{fill:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 .cluster span{color:#333;}#mermaid-svg-cN0rgDgTbyLOnDC2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cN0rgDgTbyLOnDC2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} $Sub$$main rtthread_startup rt_application_init main_thread_entry main 2.源码分析
路径rt-thread-v5.0.1\src\components.c
#ifdef __ARMCC_VERSION
extern int $Super$$main(void);
/* re-define main function */
int $Sub$$main(void)
{rtthread_startup();return 0;
}
#elif defined(__ICCARM__)
/* __low_level_init will auto called by IAR cstartup */
extern void __iar_data_init3(void);
int __low_level_init(void)
{// call IAR table copy function.__iar_data_init3();rtthread_startup();return 0;
}
#elif defined(__GNUC__)
/* Add -eentry to arm-none-eabi-gcc argument */
int entry(void)
{rtthread_startup();return 0;
}
#endifint 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 /* RT_USING_SIGNALS *//* create init_thread */rt_application_init();/* timer thread initialization */rt_system_timer_thread_init();/* idle thread initialization */rt_thread_idle_init();#ifdef RT_USING_SMPrt_hw_spin_lock(_cpus_lock);
#endif /* RT_USING_SMP *//* start scheduler */rt_system_scheduler_start();/* never reach here */return 0;
}路径rt-thread-v5.0.1\src\components.c
void rt_application_init(void)
{rt_thread_t tid;#ifdef RT_USING_HEAPtid rt_thread_create(main, main_thread_entry, RT_NULL,RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(tid ! RT_NULL);
#elsert_err_t result;tid main_thread;result rt_thread_init(tid, main, main_thread_entry, RT_NULL,main_thread_stack, sizeof(main_thread_stack), RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(result RT_EOK);/* if not define RT_USING_HEAP, using to eliminate the warning */(void)result;
#endif /* RT_USING_HEAP */rt_thread_startup(tid);
}路径rt-thread-v5.0.1\src\components.c
void main_thread_entry(void *parameter)
{extern int main(void);#ifdef RT_USING_COMPONENTS_INIT/* RT-Thread components initialization */rt_components_init();
#endif /* RT_USING_COMPONENTS_INIT */#ifdef RT_USING_SMPrt_hw_secondary_cpu_up();
#endif /* RT_USING_SMP *//* invoke system main function */
#ifdef __ARMCC_VERSION{extern int $Super$$main(void);$Super$$main(); /* for ARMCC. */}
#elif defined(__ICCARM__) || defined(__GNUC__) || defined(__TASKING__) || defined(__TI_COMPILER_VERSION__)main();
#endif
}#include stdio.h
#include rtthread.hint main(void)
{return 0;
}