Witam
Czy ktokolwiek z szanownych forumowiczów wie w jaki sposób sprawić żeby funkcja ISR (jak niżej).
W przypadku gdy warunek 'ADC_buff>20' jest spełniony nie wróciła do adresu spod którego została wywołana, a wróciła pod zmodyfikowany adres?
Rozwiązanie typu wywołanie innej funkcji przed 'return' nie wchodzi w gre (hardware na to niemożliwe).
Za pomocą 'PUSH' próbowałem zmodyfikować stos i tam zmienić adres jednak bez pozytywnego rezultatu.
void ISR (_no_auto_psv_, _interrupt_) // parametry odnoszą się do kompilatora (kwestia wywoływania przez hardware)
{
ADC_buff = ADC1; // odczytaj pomiar adc
IFS0.ADC1 = 0; // wyczysc flage przerwania
if (ADC_buff > 20)
{
/* zmodyfikowac adres pod ktory funkcja wroci za pomoca 'return' */
}
return;
}