|
发表于 2017-7-7 08:47:09
|
显示全部楼层
在用户程序中有这两个语句,如果PC2为高电平就转到BOOTLOADER区,但就是转不过去
if ((PINC & _BV(PC2)) != 0)
asm("rjmp 0x0f00": : );//
我用的是GCC AVR,不知道插入汇编的方法是否正确,编译可以通过.
BOOTLOADER区空间是256,起始地址0xf00,我打开HEX文件BOOTLOADER的地址是从0x01f00开始的这是不有问题?但是如果我将复位向量指向BL区BL的程序是可以工作的.
你没有熟读兵书(数据手册), asm("rjmp 0x0f00": : );//这条是(相等转移)就是说,现在的PC值(程序计数器)+((-2048)或(+2047)),
if ((PINC & _BV(PC2)) != 0)
{
asm("ldi r30,0x00": : ); // 0xf000 低8bit -> r30
asm("ldi r31,0x0f": : ); // 0xf000 高8bit -> r31
asm("ijmp ": : ); // 间接跳转 到 Z (16Bit)值,因mega8系列没有(jmp xxxxx 直接跳转指令),只能用这个方法。
} |
|