帮你捋顺多核启动,启动代码要执行的内容。
首先没看具体代码前,可以思考下启动代码里面要做的任务大概有哪些?
一般有寄存器清零初始化r0~r31,Basic system register系统寄存器的初始化设置例如EBASE(异常向量表地址),RBASE(复位向量表地址),INTBP(中断向量表地址)这些重要的,RAM清0初始化(有的项目会根据复位源情况决定全清或者部分清,就是所谓的Retain Ram数据),BootCtrl控制其它核的开启,核同步设置(多核运行时,可能需要等待所有的核到达同一点才能保证各自运行任务时使用的它核资源已经就绪)等。
接着开始阅读代码。
阅读代码思考代码执行的先后顺序是怎样的?需要先看那个文件。
可以先看下.ld分区文件(green hills编译环境),CS+的编译环境就直接打开工程.mtpj通过菜单view下代码分分区配置:
很清晰能看到复位后首先执行到了RESET_PE0段的代码。
对应文件:
这里应该是PE0的RBASE地址,能看到RESET_PE0段包含复位后的跳转地址,SYSERR错误的跳转地址,以及其它各种异常的入口地址。
如果发生复位会执行到BrsSt