1),首先f2812上电之后,cpu处理boot ROM中的内容(地址是:0x3F F000,大小4k*16)。头3k*16是存放数学函数表,不需要处理。接下来存放的是bootloader函数和一些芯片版本的校对信息。最后是cpu 向量表,cpu只处理第一条:复位向量。复位后(上电,手动等),程序先从复位向量执行(0x3F FFC0)
2),执行完复位向量后执行initBoot函数,这个函数文档中没有找到具体干些什么。
3),接着call select bootmode function.这一步主要是根据外部引脚(gpiof4,f12,f3,f2)来确定程序接下来执行的位置。具体如下图:
如果是跳到flash执行代码,由于制定的跳转位置是0x3F 7FF6,这正是csm密码代码的前一个位置,所以不能从这里开始程序,必须在这个地址安排一条跳转指令,跳到flash别的地方执行,当然代码是存在哪个地方的了。跳到H0就没什么问题了。这里不研究bootloader了,没看懂。
好了,这样,处理器顺利的跑到了我们想要的地方(sram或者flash),接下来就是我们要做在这里安排一个代码了。也就是把代码放在sram或者flash中。怎么来安排代码呢?当然是cmd文件了,通过cmd文件你可以随便把你的代码安排在哪个地方(当然,随便放是运行不了的),所以把代码安排在H0中或者flash中。下面贴个cmd文件的例子。
/*------------------------------------------*/
/*描述:设置堆栈值 */
/*------------------------------------------*/
-stack 400
/*------------------------------------------*/
/*描述:通过MEMORY伪指令来指示存储