以C8051F系列为例,单片机的程序经过keil等IDLE软件编译成hex文件,然后通过仿真器烧写至单片机的flash里,hex首先得转换成二进制文件,然后写入flash,以500为例,flash为64KB,从0x0000H起始到0xFFFF结束。
地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000H | 02 | xx | xx | … | ||||||||||||
0x0010H | ||||||||||||||||
0x0020H | ||||||||||||||||
… | ||||||||||||||||
0xDFFFH | ||||||||||||||||
0x7FFFH | ||||||||||||||||
0xFFFFH |
如表所示,程序正常的机器码从地址0x0000H开始,最开头的一般都是02,02代表跳转,跳转到接下来的后两个字节xx xx,第四个字节往后会配置一些中断向量及其他一些操作。我们想要上电后执行boot的程序就需要把boot的程序放置在02 xx xx 的这个xx xx位置,然后boot程序里执行串口的接收程序,将串口接收的8位的数据(也就是机器码)依次烧写至flash的地址0x0003之后的位置,需要注意的是,boot程序执行完之后需要跳转的app的程序,而boot程序需要跳转的位置就是储存app跳转命令的地方,要烧写的程序分两个部分,前三个字节和后面的部分,前三个字节的储存位置解释boot程序需要跳转的位置。上电->boot->储存app跳转指令的位置->执行app跳转指令(这个指令本来应该是在flash前三个字节),这样就实现了boot。
未完待续。。。
本文发布于:2024-02-01 01:30:31,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170672223132861.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |