【中断向量重映射】
使用上述bootloader程序下载app程序后你会发现中断无法使用,因为STM8的默认中断向量地址是在0x8000-0x8080,stm8编译出的二进制文件会把向量表放在前0x80个字节。即如果在app中使用了中断,那么程序就会跳回bootloader程序中去了,解决这个问题的方是进行中断向量重映射。
在bootloader程序main.c文件的函数之外添加以下代码:
__root const long reintvec[]@".intvec"=
{
0x82008080,0x82008404,0x82008408,0x8200840c,
0x82008410,0x82008414,0x82008418,0x8200841c,
0x82008420,0x82008424,0x82008428,0x8200842c,
0x82008430,0x82008434,0x82008438,0x8200843c,
0x82008440,0x82008444,0x82008448,0x8200844c,
0x82008450,0x82008454,0x82008458,0x8200845c,
0x82008460,0x82008464,0x82008468,0x8200846c,
0x82008470,0x82008474,0x82008478,0x8200847c,
};//当应用程序地址不是0x8400时则要相应改掉除第一个0x82008080以外的数值
便完成了中断向量的重映射,这里映射到了0x8400-0x8480,即APP程序的中断向量表存放区。
但是这时候你的IAR编译器会报错:
中断向量空间不够?当然,因为加入了重定向数组。
|