2026/4/17 8:10:10
网站建设
项目流程
创建网站代码是什么问题,wordpress加速会主题曲,专业网站优化软件,深圳住房和建设局网站哪里预约启动文件流程图#xff1a;TC3xx系列MCU复位后会从Ifx_Ssw_Tc0.c文件的_START()函数开始启动#xff0c;启动的时候都会从CPU0开始运行#xff0c;直到在__StartUpSoftware_Phase6()函数中才会根据用户配置依次启动其他核。_START()_START()的地址由link文件中RESET决定TC3xx系列MCU复位后会从Ifx_Ssw_Tc0.c文件的_START()函数开始启动启动的时候都会从CPU0开始运行直到在__StartUpSoftware_Phase6()函数中才会根据用户配置依次启动其他核。_START()_START()的地址由link文件中RESET决定以Tasking为例. 在Link文件中这个地址也必须和BMHD中的应用程序起始地址定义一致。_START()代码解析__StartUpSoftware()__StartUpSoftware()主要用来设置A1寄存器设置PSW寄存器以及判断是否是Application Reset, 从而进行不同的跳转。在Tricore中A0,A1,A8,A9是全局地址寄存器此处的A1所指向区域用来存放small RODATA, 所谓small data区域就是可以直接寻址。PSW的默认值设的是0x980, 即Supervise mode, Global Address Register Write Permission Enable, Call Depth Count Enable, User Stack__StartUpSoftware()代码解析__StartUpSoftware_Phase2()在这个API里面会根据用户的配置执行EVRC的初始化配置LBIST测试MONBIST测试。__StartUpSoftware_Phase2()代码解析__StartUpSoftware_Phase3PowerOnResetPath()在这个API里面, 会初始化上下文所谓的上下文就是SP指针和CSA。在Tricore中SP是A10寄存器在这里会把栈顶地址赋给A10.CSA是存放上下文的区域在Tricore中每当调用子函数或者进中断时都会把一些通用寄存器自动存放在CSA区域 Push然后等到子函数返回或中断返回时再把这些寄存器恢复Pop。__StartUpSoftware_Phase3ApplicationResetPath代码解析__StartUpSoftware_Phase4在这个API里面会首先进行对CPU0 watchdog和safety watchdog进行一次喂狗注意复位后CPU0 watchdog和safety watchdog是使能的然后根据用户配置完成时钟初始化以及MBIST测试。__StartUpSoftware_Phase5在这个API里面, 只有SMU配置的一个API但是这个API只是个空函数所以其实在这里什么都没有做。__StartUpSoftware_Phase3ApplicationResetPath和__StartUpSoftware_Phase3PowerOnResetPath()一样。__StartUpSoftware_Phase6根据用户配置启动不同的内核。SYSCON寄存器的BHALT位用来设置Core是否启动PC用来设置程序指针Ifx_Ssw_startCore()中设置这两个寄存器来启动其他内核。__StartUpSoftware_Phase6()代码解析__Ifx_Ssw_startCore()代码解析以TC38x为例如果所有4个内核都启动那么__StartUpSoftware_Phase6()中会启动CORE1。这个时候__Core0_Start()和__Core1_Start()是同时运行的在__Core1_Start()的最后会启动Core2然后跳转到__Core2_Start()在_Core2_Start() 最后会启动Core3, 然后跳转到__Core3_Start().__Corex_start以__Core0_Start()为例在__Core0_Start()中会根据配置使能PCACHE和DCACHE设置A0, A8, A9地址配置Trap和中断向量表起始地址配置中断栈指针初始化全局变量。CACHE配置是否使能CACHE通过配置下面两个宏通过配置PCON0的PCBYP位来使能PCACHE通过配置DCON0的PCBYP来使能DCACHE:Trap和中断向量配置BTV寄存器用来设置Trap向量表的首地址在工程中Trap向量表的首地址在link文件中设置通过下面语句会把link文件中Trap向量表地址赋给BTV.BIV寄存器用来设置中断向量表的首地址在工程中中断向量表的首地址在link文件中设置通过下面语句会把link文件的中断向量表地址赋给BIV. 注意在Tricore中默认状态下中断向量是32字节对齐的中断向量的位置不是固定的而是由中断优先级决定的。配置ISTACK在Tricore中栈分为USTACK和ISTACK, 他们的使用由PSW.IS位来决定默认配置PSW.IS0即在线程中的函数调用时会用USTACKA11部分作为CPU的栈而在中断函数中会用ISTACKISP作为CPU的栈。USTACK和ISTACK大小和位置是在Link文件中配置的。下面语句设置ISP:对于CPU0在__StartUpSoftware_Phase3ApplicationResetPath()已经把USTACK的栈顶指针赋给了A10. 对于其他CPU在各自的__Corex_Start()把USTACK的栈顶指针赋给了各自CPU的A10。初始化全局变量下面函数用来初始化全局变量 (这个函数是编译器来实现的)全局变量分为两部分:Data和BSS。Data: 存放有初始化全局变量有初始化的全局变量的初始值最初是放在Flash中在这个函数里面会把初始值从Flash赋给全局变量。BSS: BSS段用于存放没有初始化值的全局变量在这个函数里面会把没有初始化值的全局变量清零。对于其它__Corex_Start()而言和__Core0_Start()的流程基本一样另外增加了把USTACK栈顶指针赋给A10的操作和PSW初始化操作。在各个CPU的__Corex_Start()最后会跳转到各自的corex_main()中运行。