Код
/*---------------------------------------------------------------------------*/
__C_task void main(void) /* the main code is here */
/*---------------------------------------------------------------------------*/
{
Initialize();
if (testCode == 0) /* bad code */
{
((void (*)())0x200)(); /* jump to the fixed address (!!!! USES ICALL!!!!)*/
}
if (busReceiveByte() == seq1)
{
if (busReceiveByte() == seq2)
{
loader();
}
}
((void (*)())0x200)(); /*(!!!! USES IJMP!!!!) */
}
__C_task void main(void) /* the main code is here */
/*---------------------------------------------------------------------------*/
{
Initialize();
if (testCode == 0) /* bad code */
{
((void (*)())0x200)(); /* jump to the fixed address (!!!! USES ICALL!!!!)*/
}
if (busReceiveByte() == seq1)
{
if (busReceiveByte() == seq2)
{
loader();
}
}
((void (*)())0x200)(); /*(!!!! USES IJMP!!!!) */
}
Но на дизассемблере находил что первый JMP \"сделан\" из ICALL а второй из IJMP, что то вроде:
Код
LDI R30, 0x00
LDI R31, 0x02
ICALL
LDI R30, 0x00
LDI R31, 0x02
IJMP
LDI R31, 0x02
ICALL
LDI R30, 0x00
LDI R31, 0x02
IJMP
Мне хотелось как нибудь чтобы компилятор поставил RJMP и не мучил меня с IJMP. Конечно я совсем не согласен когда он огорчил меня с ICALL. Слово goto точно подходить для меня но как установить этикет по адресу 0x200?