Цитата
При входе в цикл регистры R2 и R10 будут изначально равны и цикл по сути не выполнится ни разу
Тяжело дается ассемблер, но вроде как BCS - переход, если больше или равно, т. е. цикл выполнится 1 раз. Иначе вообще бы ничего не работало
Это соответствует исходному коду функции wbCalcDA
Код
short wbCalcDA(UBYTE beg, UBYTE end, UBYTE minus, ecgWAVE_BUILD *wseg)
{
UBYTE i;
short da;
for (i = beg, da = 0; i <= end; i++)
da += wseg->segs[i].da;
if (minus) da = -da;
return da;
}
Цитата
Если же есть явное подозрение на порчу R8, то это ещё может быть из-за неправильного сохранения/восстановления регистров в прерывании.
Думаю, что это и есть самая вероятная причина. Но, глядя на листинг обработчиков прерываний, ничего подозрительного не нахожу. Правда, смотрел только на использование R8. Все смотреть тяжеловато, проект очень болшьой, а я с ассемблером на "Вы".
fiq в проекте не используется, вложенные прерывания - тоже
IAR показывает, что стеков хватает с запасом. Проверял (считал сам и смотрел на содержимое ОЗУ) - не врет.