Народ, подскажите, в каком порядке сохраняются регистры, текущий pc и указатели стека(SP и Y), в буфере jmp_buf в компиляторе ИАР при использовании макро setjmp?
В Вин АВР всё прозрачно
Код
jmp_buf:
offset size description
0 16 call-saved registers (r2-r17)
16 2 frame pointer (r29:r28)
18 2 stack pointer (SPH:SPL)
20 1 status register (SREG)
21 2/3 return address (PC) (2 bytes used for <=128Kw flash)
23/24 = total size
Чувствую что в ИАРе нужно внимательно изучать мап файл?
Дабы потом не рассказывать для чего оно мне нужно, приведу
пример кода написанного Rst7 , хотя по коду вопрос больше к автору
Код
((unsigned int *)rs_task)[10]=((unsigned int)rs_rstack)+7; //SP
((unsigned int *)rs_task)[8]=((unsigned int)rs_cstack)+64; //Y
((unsigned int *)rs_task)[9]=(unsigned int)RS_TRX; //Адрес перехода
просто, насколько я понимаю, то setjmp сохраняет текущий pc и указатели стека(SP и Y), и так званые localstore-регистры, остальными сохранениями заведует компилятор при переходе,
тогда непонятен размер буфера задачи ну и манипуляции с ним
Понимаю, что ВинАВР за уши притянут к аврам, у него один стек -- может в этом особенность?
всем заранее спасибо