搞嵌入式的知道,NOR FLASH,可以掉电保存数据,但是反复擦写比较容易坏,在开发阶段必然会不停的烧写和验证,这个过程必不可少,这必然会引入损坏nor flash的风险。其实这也不是不可以规避的风险,比如开发阶段把程序下载到RAM中并运行,就可以规避这个。缺点就是掉电没法保存数据,不过RAM通常会比Nor FLASH 空间小,等程序的验证完了,稍作修改就可以下载到nor flash中了,这样最小次数的烧写到flash 中。
之前写个一篇文章 (STM32 启动代码分析 及stm32 启动代码 实现|C语言 )写道,cortext-m4 的启动过程:
1,在系统reset时会去找异常向量表中前4个字节指向的地址作为栈顶
2,第4-8个字节是reset handler函数的地址,然后PC会load这个地址,并运行。这个reset 向量指向的函数是我们能写代码控制的最开始的位置。 cortext-m4 从向量表中把reset异常的函数地址加载到PC寄存器并运行是纯硬件行为,而且是无法更改的,那么如何做到从RAM运行了,就需要解决:
1,默认的向量表是在Nor Flash最开始的位置,现在就需要修改向量表到RAM中。
2,如何让PC寄存器从RAM中向量表开始加载reset_handler 函数地址。---显然我们是没法用软件控制的,我们的软件的第一行代码都跑不到。
一个个的搞。