2015-07-25 12:02-- Hi-tech 编译器编写单片机 BootLoad程序
1.由于bootload 程序占用0-0x200空间,所以正常程序编译时,需对ROM加偏移地址.
2.函数可以用绝对定位方式指定地址,如:
void start_ini(void)@0x08
则这个函数将会强制编译定位在0x008这个地址
3.由于这部分程序覆盖了中断地址,因此需要对中断程序进重定向
4.在BootLoad与正常用户程序应分开编写,对于芯片只需要烧写BootLoad程序即可.
5.正常用户程序在调试时,不需要对ROM加偏移地址,正常调试即可.调试完成后,需要
把程序通过BOOTLOAD烧入芯片时,需要加偏移地址编译.
6.BootLoad可以采用以下方式重定向
void interrupt_redirect(void)@0x04 ///这个地址为中断响应地址,如果存在高优先级中断,也可以采用这个方式重定向
{
#asm LJMP 0x04+(Boot_Load_size) //直接跳转到重定向地址
}
7.BootLoad程序的则上不使用中断,以免造成中断引用混乱
8.Boot_Load程序应该用超时机制,当指定时间内没有接收到特征触发命令序列时,要退出bootload状态,进入用户程序.
9.上电后首先执行的程序是BootLoad程序,在设定时间到达后,没有特征命令序列时,才能执行用户程序,这样就可以保证
任意情况下都可以重新写入新程序.
10.考虑到代码安全的原因,BootLoad程序禁止响应读Flash命令,以免用户程序被恶意读出.
11.由于bootload需要放在指定的程序空间,所以在编译器ROM Range设置[default,-300-fff]
|